Projet universitaire en équipe, SAÉ 5 · De 2025 à 2026
Aramis
La préparation de commandes guidée à la voix, dans un entrepôt à −18 °C.
Les préparateurs travaillent avec des gants, dans le froid. L’interface devait se faire oublier.
- −18 °C dans l’entrepôt, où l’on travaille en gants
- 3D palettisation avec rotations et gravité
- 30 s entre deux mises à jour du suivi
Le contexte
C’est le projet de troisième année de BUT, la SAÉ 5, que nous avons mené en équipe pour un vrai commanditaire, le service logistique d’un grand groupe de distribution. Dans un entrepôt frigorifique à −18 °C, les préparateurs manipulent des palettes avec des gants épais. L’application devait donc se piloter à la voix et se lire d’un coup d’œil sur une tablette.
Stack & infra
L’application est construite avec Next.js 16 et TypeScript, Drizzle ORM sur PostgreSQL, hébergé chez Neon en production, zod pour la validation et Three.js pour la visualisation. Les préparateurs se connectent avec un code, et la session repose sur un jeton JWT. Les tests sont écrits avec Vitest. La CI GitLab les lance contre un vrai PostgreSQL, puis déploie sur Vercel à chaque fusion sur la branche principale.
Comment ça marche
Le superviseur importe les listes de préparation exportées du WMS en CSV, les attribue aux préparateurs et suit l’activité en direct, avec l’avancement, les stocks et les produits manquants.
Le préparateur se connecte avec un code à trois chiffres. L’application le guide ensuite d’emplacement en emplacement, en indiquant la zone, l’allée, l’alvéole et le niveau. Il valide chaque prélèvement ou signale un produit manquant à la voix ou d’un geste. À la fin du support, une vue 3D lui montre la palette qu’il vient de constituer.
- Superviseur (interface, import · affectation · suivi)
- WMS (service externe, exports CSV)
- Tablette préparateur (interface, voix · vue 3D)
- Next.js 16 (service, pages et API)
- PostgreSQL (stockage, Drizzle · Neon)
- WMS vers Superviseur, CSV
- Superviseur vers Next.js 16, supports
- Tablette préparateur vers Next.js 16, valider · manquant
- Next.js 16 vers PostgreSQL, SQL
La difficulté
Deux points nous ont donné du fil à retordre.
- La reconnaissance vocale continue en français sur Android. L’API du navigateur s’y arrête et redémarre de façon imprévisible. Il a fallu gérer ces redémarrages sans jamais perdre une commande vocale.
- La palettisation. Un algorithme de bin-packing en 3D range d’abord les colis par étages en essayant leurs différentes rotations. Une passe de « gravité » fait ensuite reposer chaque colis sur ce qui se trouve vraiment en dessous. Le rendu Three.js n’est chargé que lorsqu’on en a besoin.
Ce que ça m’a apporté
J’ai appris à travailler en équipe pour un client réel, avec des contraintes physiques très concrètes comme le froid, les gants et le bruit. Ce projet m’a appris à concevoir pour l’usage avant de penser à l’esthétique, et à rendre un algorithme géométrique compréhensible en un coup d’œil.