DS Factory : Un design system production-ready généré depuis une couleur hex. En moins de 5 minutes.
Trois semaines à monter le design system d'Alivia from scratch. Toujours les mêmes étapes, toujours les mêmes décisions refaites à zéro. J'ai codé l'outil que j'aurais voulu avoir.
Contexte
Beaucoup d'équipes se lancent avec un design.md : quelques couleurs, une typo, un border-radius. Ce n'est pas un design system, c'est une liste d'intentions sans structure. Résultat : une interface à cohérence aléatoire dès le troisième sprint.
Défi : Comment permettre à n'importe quelle équipe de partir d'un design system structuré, accessible et adapté à sa stack, sans 3 jours de setup ni expertise tokens ?
Chez Polycea, la question revenait à chaque projet. On reconduisait le même template parce que le dev le connaissait, pas parce qu'il était bon. Pas de tokens, pas de pipeline, pas d'accessibilité vérifiée. Des habitudes reconduites par défaut.
Objectif : Passer d'une couleur hex à un design system complet, accessible et adapté à la stack exacte du projet.
- Un .zip : tokens (4 formats dont W3C DTCG), config Tailwind, globals.css avec dark mode
- 50+ composants générés pour la lib choisie, rendus live avec la vraie palette
- WCAG 2.2 AA validé avant l'export, pas après coup
- Beta privée : 100 places
DS Factory est construit avec son propre design system. Il mange sa propre cuisine : chaque mauvaise décision d'architecture, je la voyais immédiatement dans mon propre outil.
Utilisateurs cibles : Designers, développeurs front-end et builders solo qui démarrent un produit
- Side project : 3 semaines pour une v1
- Solo : design, architecture, dev, tests
- Doit être générique : 6 frameworks, 12 librairies de composants
- Accessibilité non négociable : WCAG 2.2 AA garanti à la sortie
Approche
Pas "créer un design system prend du temps". Tout le monde le sait. Le vrai problème : chaque équipe refait les mêmes arbitrages, avec les mêmes erreurs.
Ce n'est pas un problème de temps. C'est un problème de décision. Un configurateur peut prendre ces décisions une fois, correctement, pour tout le monde.
- Est-ce que ma palette passe le contraste ?
- Comment structurer mes tokens pour Style Dictionary ?
- Est-ce que shadcn est compatible avec Vue ?
- 80% des design systems se ressemblent : même palette bleue, même radius 8px
- L'accessibilité arrive toujours après coup, quand elle arrive
1. La couleur
L'utilisateur entre un hex. DS Factory génère une palette 10 tons calibrée en HSL (50 à 900), suggère une couleur accent par théorie des complémentaires, et calcule le ratio de contraste en direct. Si ça ne passe pas WCAG AA (4.5:1), l'alerte s'affiche avant l'export.
- Palette 10 tons calibrée HSL
- Suggestion d'accent automatique
- Contraste vérifié en temps réel
2. La stack
Six frameworks, douze librairies de composants, cinq sets d'icônes. Une matrice de compatibilité bloque les combinaisons impossibles : shadcn/ui sans Tailwind est grisé, avec une explication. Les options invalides ne peuvent pas être sélectionnées.
- Matrice de compatibilité framework × lib × CSS
- Blocage explicite des combinaisons invalides
- Zéro documentation à lire
3. L'export
Un bouton. Un .zip. Dedans : tokens au format choisi (W3C DTCG, Style Dictionary, Figma Variables, CSS custom properties), config Tailwind générée depuis les tokens, globals.css avec dark mode, et 50+ composants adaptés à la stack exacte.
- 4 formats de tokens
- 50+ composants générés pour la lib choisie
- Dark mode natif
Méthodes : Design Tokens, Théorie des couleurs, Accessibilité by design, Dogfooding, Vibecoding (AI-assisted dev)
Solution
Quatre choix structurants font l'outil.
Le pipeline token temps réel
Exemple : hex → generateScale() → CSS custom properties sur :root → Tailwind lit à runtime
Impact : Modifier une couleur dans le store met à jour tout le preview instantanément, sans rechargement
La matrice de compatibilité
Exemple : COMP_COMPAT et CSS_COMPAT dans le store Zustand : setFw() désélectionne les libs bloquées
Impact : Impossible de créer une combinaison invalide, même sans connaître les contraintes d'interopérabilité
Les garanties a11y structurelles
Exemple : Focus ring WCAG 2.2 AA, aria-invalid et aria-describedby sur les champs, aria-busy sur les boutons en loading
Impact : Écrites une fois, appliquées à chaque composant généré. L'équipe n'a pas à les retravailler
Les composants rendus live
Exemple : Chaque variante est du React réel, pas un screenshot : palette, radius et typo réels
Impact : Changer la couleur brand montre immédiatement comment Button et Table réagissent
- Configurateur web complet (React + Vite)
- Pipeline de génération de tokens 4 formats
- Registry de 50+ composants adaptatifs
- Export .zip production-ready
Résultats
Une v1 en 3 semaines, en beta privée limitée à 100 places.
- < 5 min D'un hex au .zip : Le setup design system passe de 3 jours à moins de 5 minutes
- 10 tons Palette calibrée HSL : De 50 à 900, contraste WCAG vérifié avant l'export
- 6 × 12 Frameworks × librairies : Avec matrice de compatibilité qui bloque les combinaisons impossibles
- 4 formats De tokens : W3C DTCG, Style Dictionary, Figma Variables, CSS custom properties
- WCAG 2.2 AA Garanti à la sortie : Focus ring, aria-invalid, aria-busy : structurels, pas optionnels
- 100 places Beta privée : V1 construite en 3 semaines, en cours de test avant ouverture
Ce que j'ai appris
Ce projet dit moins "je sais coder" que "je pense en systèmes".
- Penser en systèmes, pas en écrans : construire un pipeline de tokens complet oblige à comprendre les tokens à un niveau que le design seul ne demande jamais. Mes specs et mes handoffs en sortent transformés.
- Le dogfooding est la contrainte la plus utile que je me sois imposée : DS Factory est construit avec exactement ce qu'il génère (React, Tailwind, Radix, Zustand). Chaque mauvaise décision d'architecture était immédiatement visible dans mon propre outil.
- Sur Alivia, j'ai construit TaskFlow parce que je n'avais pas le budget pour Maze. Ici, DS Factory parce que je refusais de refaire 3 jours de setup à chaque projet. Même origine : un problème récurrent, une décision de le résoudre plutôt que de le contourner.
Compétences mobilisées
Rôle : Founding Designer + dev solo, 3 semaines (v1)
- Design Tokens
- Architecture Front-end
- Accessibilité
- Product Thinking
- TypeScript
- AI-assisted Development
Outils : React 18, Vite, TypeScript, Tailwind CSS, Zustand, Radix UI
Thématiques : Design System, Tooling, Side Project, Tokens, Accessibilité