127 lines
6 KiB
Markdown
127 lines
6 KiB
Markdown
|
|
# 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` + 1 `createLazyComponent` dans `lazyExports.ts`.
|
||
|
|
- ✅ Pattern établi et reproductible.
|
||
|
|
- ⚠️ `routeConfig.tsx` croî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`
|
||
|
|
- ✅ `ThemeProvider` avec `useTheme()` 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 `!important` dans les fix CSS pourraient bloquer le theming
|
||
|
|
|
||
|
|
### Switch de thème
|
||
|
|
- ✅ **Prêt** — `ThemeSwitcher` composant 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-languagedetector` pour 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 de `ml-*`, `mr-*`)
|
||
|
|
|
||
|
|
### Formatage localisé
|
||
|
|
- ✅ `date-fns` avec 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
|
||
|
|
- ✅ `VirtualizedList` composant avec `@tanstack/react-virtual`
|
||
|
|
- ✅ Chat messages virtualisés
|
||
|
|
- ⚠️ Pas de virtualisation systématique sur toutes les listes longues (TrackGrid utilise une grille classique)
|
||
|
|
|
||
|
|
### Pagination
|
||
|
|
- ✅ `useInfiniteQuery` pour 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.memo` sous-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) |
|