PD-228 — Retour d'expérience¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 [Spécification](PD-228-specification.md) | | | 🛠️ [Plan d'implémentation](PD-228-plan.md) | | | ✅ [Critères d'acceptation](PD-228-acceptability.md) | | | 📝 **Retour d'expérience** | *(ce document)* | [← Retour à site-vitrine](../PD-225-epic.md) · [↑ Index User Story](index.md)1. Résumé exécutif¶
La User Story PD-228 visait à établir un design system CSS basé sur des tokens pour garantir la cohérence des couleurs et espacements. L'implémentation a produit un fichier design-system.css complet avec une palette de tokens bien définie (couleurs, espacements, typographie, ombres, rayons). Cependant, plusieurs écarts majeurs ont été identifiés : des couleurs hardcodées dans les composants (gradients), des espacements en valeurs brutes au lieu des tokens, et l'absence de la structure modulaire et du linting prévu. Verdict : ACCEPTÉ AVEC RÉSERVES.
2. Points fluides¶
- Définition complète des tokens de couleurs dans
:root(palette principale, secondaire, états, sémantiques) - Tokens d'espacement cohérents avec une échelle claire (xs à 3xl)
- Intégration des polices @fontsource (Inter, Space Grotesk) sans dépendance externe
- Tokens de typographie bien structurés (tailles de texte, poids)
- Tokens d'ombres et de rayons de bordure complets
- Styles de base (reset, body, headings) utilisant les tokens
- Classes utilitaires (text-center, mb-, mt-) basées sur les tokens
- Responsive design avec adaptation des tokens sur mobile
3. Points difficiles¶
-
Discipline d'utilisation des tokens : Malgré la définition des tokens, les composants (Hero.astro, CallToAction.astro) utilisent des couleurs hex hardcodées (
#0d3461) dans les gradients CSS au lieu des tokens. -
Mixité tokens/valeurs brutes : Les boutons utilisent
padding: 1rem 1.5remau lieu devar(--spacing-sm) var(--spacing-md), créant une incohérence avec l'approche tokens. -
Structure modulaire abandonnée : Le plan prévoyait une séparation en fichiers (tokens/, base/, components/). L'implémentation a fusionné tout dans un seul fichier
design-system.css. -
Absence de garde-fou : Pas de stylelint ni de règle pour détecter les couleurs/espacements hors tokens. Rien n'empêche un développeur d'ajouter des valeurs arbitraires.
4. Hypothèses révélées tardivement¶
-
Complexité des gradients CSS : Les gradients CSS utilisent des valeurs RGBA avec opacité. Les tokens CSS natifs ne supportent pas facilement la manipulation de l'opacité, ce qui a conduit à hardcoder certaines valeurs.
-
Fichier legacy
public/styles.css: Ce fichier existait avant le design system et définit une palette différente (--primary,--text). Son existence n'avait pas été anticipée. -
Effort de migration : Aligner tous les composants existants sur les tokens demande un effort significatif après coup, ce qui a été sous-estimé.
5. Invariants complexes¶
| Invariant | Difficulté |
|---|---|
| Couleurs via tokens uniquement | Difficile pour les gradients et valeurs avec opacité |
| Espacements cohérents | Facile à définir, difficile à faire respecter sans linting |
| Aucun style inline arbitraire | Respecté mais non vérifié automatiquement |
6. Dette technique¶
| Dette | Impact | Priorité |
|---|---|---|
| Gradients avec hex hardcodés | Incohérence palette, maintenance difficile | Haute |
| Paddings boutons en valeurs brutes | Incohérence espacements | Moyenne |
| Pas de structure modulaire | Maintenance plus difficile à l'échelle | Moyenne |
| Pas de stylelint | Pas de garde-fou contre les valeurs arbitraires | Haute |
Fichier legacy public/styles.css | Risque de confusion, double source de vérité | Basse |
7. Risques résiduels¶
| Risque | Probabilité | Impact | Mitigation suggérée |
|---|---|---|---|
| Prolifération de valeurs hardcodées | Haute | Moyen | Implémenter stylelint avec règles strictes |
| Incohérence visuelle entre pages | Moyenne | Moyen | Revue CSS systématique, tests visuels |
| Confusion avec legacy styles | Faible | Faible | Supprimer ou documenter public/styles.css |
| Difficulté dark mode futur | Moyenne | Moyen | Prévoir tokens sémantiques adaptables |
8. Améliorations processus¶
- Implémenter le linting dès le départ : Configurer stylelint avec
color-no-hexet règles d'espacement avant d'écrire le premier composant - Définir des tokens pour les gradients : Créer des variables CSS pour les gradients complets, pas seulement les couleurs de base
- Créer un guide de contribution CSS : Documenter les règles d'utilisation des tokens pour les nouveaux développeurs
- Nettoyer les fichiers legacy : Supprimer ou migrer
public/styles.cssavant de livrer le design system
9. Enseignements clés¶
-
Définir des tokens ne suffit pas — Sans garde-fou (linting), les développeurs contourneront les tokens par commodité ou ignorance.
-
Les gradients CSS nécessitent une approche spécifique — Les tokens de couleurs seuls ne couvrent pas les cas avec opacité ou transitions de couleurs.
-
Un fichier unique peut devenir un monolithe — La structure modulaire prévue (tokens/, base/, components/) aurait facilité la maintenance.
-
La migration vers un design system est coûteuse — Il est plus efficace d'appliquer les tokens dès la création des composants que de les migrer après coup.
-
Les fichiers legacy sont des pièges — Un ancien fichier CSS non aligné crée de la confusion et un risque d'incohérence.
10. Addendum — Résolution des écarts¶
[2025-12-21] — Mise à jour suite à acceptation finale¶
Les écarts E-01 à E-04 identifiés lors de la revue initiale ont été corrigés :
| Écart | Résolution |
|---|---|
| E-01 (Couleurs hors tokens) | Gradients migrés sur tokens --color-* dans Hero, CTA ; plus de valeurs hex directes |
| E-02 (Espacements non tokenisés) | Paddings/marges basés sur var(--spacing-*) dans tous les composants |
| E-03 (Structure modulaire absente) | Architecture tokens/*.css, base/reset.css, components/*.css + Stylelint avec color-no-hex |
| E-04 (Feuille legacy) | Suppression de public/styles.css |
Verdict final : ✅ ACCEPTÉ (2025-12-20)