- Rewrite index.css with complete SUMI token system (dark + light themes) - All --sumi-* variables: backgrounds, surfaces, borders, text, pigments, spacing, radius, shadows, glass, scrollbar, motion, z-index, layout - shadcn/Radix semantic mapping (--background, --foreground, etc.) - Tailwind @theme mapping with new fonts (Inter, Space Grotesk, JetBrains Mono) - SUMI keyframe animations (sumi-fade-in, sumi-slide-up, sumi-scale-in, etc.) - Delete 11 redundant CSS files (design-system.css, design-tokens.css, button.css, card.css, input.css, badge-avatar.css, header.css, fix-input-focus.css, fix-login-form.css, visual-enhancements.css, premium-utilities.css) - Update main.tsx: single CSS import (index.css only) - Update ThemeProvider: data-theme attribute instead of .dark class toggle - Update index.html FOUC script: data-theme attribute Co-authored-by: Cursor <cursoragent@cursor.com>
6 KiB
PHASE I — SCALABILITÉ UI
I1. Ajout de 50 écrans
Routing
- ✅ Prêt — React Router v6 avec lazy loading. Ajouter une route = 1 entrée dans
routeConfig.tsx+ 1createLazyComponentdanslazyExports.ts. - ✅ Pattern établi et reproductible.
- ⚠️
routeConfig.tsxcroîtra linéairement — mais fichier de configuration, acceptable.
Design system
- ⚠️ Partiel — Les primitives UI couvrent les cas standards (Button, Card, Input, Table, Modal, Tabs, Badge, Avatar, Select, etc.).
- ⚠️ Manques pour 50 écrans : pas de composant
Stepper,Timeline,Tree,Kanban,Calendar view,Rich Text Editor. Ces primitives devront être créées. - ✅ Le pattern de création (Tailwind + forwardRef + variants via CVA) est bien établi.
Convention de nommage
- ✅ Scalable — Nommage cohérent :
FeatureNamePage,useFeatureNamePage,FeatureNameSkeleton. - ✅ Les feature modules ont une structure reproductible :
components/,hooks/,pages/,services/,types/. - ⚠️ La dualité
components/↔features/brouille les conventions — à résoudre avant scale.
State management
- ✅ Supporte la complexité — Zustand pour UI state, React Query pour server state.
- ✅ L'ajout d'un nouveau store Zustand est trivial.
- ✅ React Query supporte le cache granulaire par feature.
- ⚠️ La duplication Auth (Context + Store) devra être unifiée avant d'ajouter plus de features auth-dépendantes.
Verdict : ⚠️ Partiel — L'architecture supporte 50 écrans techniquement, mais la dette organisationnelle (dualité components/features, code mort) ralentira significativement. Résolution estimée : 1-2 semaines de refactoring préalable.
I2. Theming / Dark mode
Tokenisation des couleurs
- ✅ Les couleurs sont tokenisées via CSS variables (
--primary,--background,--foreground, etc.) - ✅ Dark mode complet avec override de toutes les variables dans
.dark - ✅
ThemeProvideravecuseTheme()hook - ✅ Tailwind
dark:variant configuré via@custom-variant dark (&:is(.dark *))
Valeurs hardcodées à migrer
- ⚠️ ~30 couleurs hex hardcodées dans 12 fichiers TSX (charts, Swagger, OAuth, settings)
- ⚠️ 5 fichiers CSS avec couleurs hardcodées dans les styles vanilla
- ⚠️ Les
!importantdans les fix CSS pourraient bloquer le theming
Switch de thème
- ✅ Prêt —
ThemeSwitchercomposant existant - ✅ Persistence via Zustand store
- ✅ Respect de
prefers-color-scheme
Verdict : ✅ Prêt — Le theming fonctionne. Ajout d'un 3ème thème (ex: high-contrast) nécessiterait ~30 fichiers à corriger pour les valeurs hardcodées.
I3. Internationalisation (i18n)
Système i18n
- ✅ i18next + react-i18next installés et configurés
- ✅ Dossier
src/locales/présent - ✅
i18next-browser-languagedetectorpour la détection automatique
Strings hardcodées
- ⚠️ MASSIF — Estimation grossière : la grande majorité des textes UI sont hardcodés en français ou anglais directement dans les composants TSX.
- ⚠️ Exemples : titres de pages, labels de boutons, messages d'erreur, placeholders, tooltips
- ⚠️ Migration vers i18n = effort XL (semaines de travail)
RTL support
- ❌ Non implémenté — Pas de
dir="rtl"ni de classes logiques (ms-*,me-*au lieu deml-*,mr-*)
Formatage localisé
- ✅
date-fnsavec locale support potentiel - ⚠️ Pas de formatage de nombres localisé détecté
Verdict : ⚠️ Partiel — L'infrastructure i18n est en place mais les strings ne sont pas externalisées. Effort de migration estimé : 3-4 semaines.
I4. White-labeling / Multi-tenant UI
Logo et branding
- ⚠️ Le design system "KODO" a une identité très forte (neon cyan, manga clips, gaming elements)
- ⚠️ Les couleurs sont tokenisées mais les gradients, clip-paths et effets visuels sont hardcodés
- ⚠️ Les noms thématiques (void, manga, shonen, terminal) sont culturellement spécifiques
Couleurs/fonts externalisables
- ✅ CSS variables permettent théoriquement de changer les couleurs
- ⚠️ 6 familles de fonts hardcodées dans le CSS — pas configurable par tenant
- ⚠️ Les gradients et glows sont définis en CSS, pas via un système de tokens dynamique
Layouts personnalisables
- ❌ Non prévu — Le layout est fixe (sidebar + header + main)
- ❌ Pas de système de slots ou de configuration de layout par tenant
Verdict : ❌ Bloqué — Le white-labeling nécessiterait une refonte significative du design system pour externaliser les éléments visuels. Le design est trop opinionné pour un multi-tenant.
I5. Performance à l'échelle
Virtualisation
- ✅
VirtualizedListcomposant avec@tanstack/react-virtual - ✅ Chat messages virtualisés
- ⚠️ Pas de virtualisation systématique sur toutes les listes longues (TrackGrid utilise une grille classique)
Pagination
- ✅
useInfiniteQuerypour le scroll infini - ✅ Pagination côté serveur (React Query)
- ⚠️ Pas de composant de pagination UI dédié détecté
Listes longues
- ✅ Skeletons pour le chargement progressif
- ⚠️
React.memosous-utilisé sur les items de liste (5 instances seulement) - ⚠️ Pas de
loading="lazy"sur les images dans les listes
Verdict : ⚠️ Partiel — L'infrastructure est en place (virtualization, infinite scroll) mais pas systématiquement appliquée. À 10 000+ items, des bottlenecks de rendu apparaîtront.
Résumé scalabilité
| Dimension | Verdict | Effort pour être prêt |
|---|---|---|
| +50 écrans | ⚠️ Partiel | M (refactoring architecture) |
| Theming / Dark mode | ✅ Prêt | S (nettoyer hardcoded values) |
| i18n | ⚠️ Partiel | XL (externaliser toutes les strings) |
| White-labeling | ❌ Bloqué | XL (refonte design system) |
| Performance à l'échelle | ⚠️ Partiel | M (systématiser virtualisation + memo) |