Mission freelance chez Noside sur Envelope, SaaS de workflows IA pour la mode. Médiathèque d'équipe, outil de review créative, enrichissement IA des médias et ingénierie assistée par Claude Code.
Envelope est un SaaS de workflows IA : les équipes créatives de la mode et du luxe assemblent sur un canvas collaboratif des nœuds (images, textes, vidéos, modèles génératifs) pour produire leurs visuels. Le produit est développé par Noside, avec une équipe de deux développeurs. J’y interviens en freelance depuis juillet 2026.
Stack : Next.js 16, React 19, TypeScript, Supabase (Postgres, Auth, Storage, RLS), Drizzle, canvas synchronisé par CRDT (Yjs, Liveblocks), Vercel AI SDK, Stripe, Vitest.
Cette page décrit la démarche et les problèmes résolus, sans code ni donnée client.
Le besoin : les équipes échangeaient leurs visuels par mail et Slack, sans historique ni versions. J’ai conçu et livré de bout en bout une médiathèque partagée au niveau de l’équipe, puis un outil de review inspiré de Frame.io.
Chaque média est décrit par un modèle vision-langage. J’ai transformé ces descriptions en outils de recherche : facettes (cadrage, moment de la journée, ambiance lumineuse), extraction de palette 12 couleurs et filtre par couleur de fond, champs personnalisés définis par l’équipe et classifiés par LLM, regroupement de visages en personnes derrière un opt-in.
Framework de connecteurs OAuth à tokens chiffrés (OneDrive, SharePoint, Dropbox) pour importer et publier les médias. Garde d’autorisation généralisée à toutes les server actions, avec un test qui fait échouer la CI dès qu’une action touche la base sans passer par la garde. Sauvegarde chiffrée nightly de la base et du stockage vers Scaleway.
Après un « remplacer cette image partout dans le canvas », l’ancienne image réapparaissait pour un collègue qui ouvrait le projet. Cause : un navigateur fraîchement ouvert peint d’abord son cache local, un traitement de fond démarrait sur cette vue périmée et réécrivait le contenu entier comme une nouvelle écriture CRDT, causalement postérieure au remplacement. Elle gagnait. Diagnostic par timestamps de stockage et lecture directe de la room Liveblocks ; correctif par un signal « vue réconciliée avec le serveur » qui gate tout writer de fond.
La spec disait qu’un visiteur anonyme laissait son e-mail. Le champ n’avait jamais existé. La règle « pas d’e-mail, pas de notification » masquait parfaitement un « jamais d’e-mail ». Leçon : vérifier qu’une donnée est réellement collectée avant d’écrire la règle qui la consomme.
Une route de push vers un DAM validait la forme d’un chemin de stockage, puis téléchargeait le fichier avec un rôle privilégié : un chemin d’une autre équipe passait. Trouvée en revue de code, pas par la suite de tests. Depuis, une liste d’autorisation du proxy est épinglée par un test, et toute nouvelle surface anonyme doit y figurer.
Toute la mission s’est faite avec Claude Code, en gardant la responsabilité de chaque décision.
Résultat : la suite de tests est passée de 3 800 à 6 700, plus de 20 PR mergées en trois mois, et une mémoire de projet qui capitalise les pièges pour les sessions suivantes.