- 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>
9.1 KiB
PHASE K — SCORE GLOBAL & RECOMMANDATIONS
Tableau de synthèse
| Catégorie | Score /10 | Pondération | Score pondéré | Justification |
|---|---|---|---|---|
| Architecture | 7.0 | ×1.3 | 9.1 | Routing exemplaire, TypeScript strict, feature modules en cours, mais dualité components/features et client.ts monstre |
| Design System | 6.5 | ×1.0 | 6.5 | Tokens ambitieux et complets, mais fragmentation (kodo/veza), CSS vanilla parallèle, duplications composants |
| Cohérence UI | 7.0 | ×1.0 | 7.0 | Icônes uniformes, layout responsive, button system solide, mais hacks CSS et duplications |
| Accessibilité | 6.5 | ×1.0 | 6.5 | ARIA extensif, focus management, mais skip nav absent, sémantique HTML minimale |
| Sécurité | 8.0 | ×1.5 | 12.0 | JWT httpOnly, DOMPurify strict, CSRF, pas de secrets hardcodés — exemplaire |
| Performance | 6.0 | ×1.2 | 7.2 | Routes lazy, manual chunks, mais build cassé, vendor 925KB, images non-lazy |
| Dette technique | 5.0 | ×1.0 | 5.0 | 706 as any, 25 fichiers morts, client.ts 2237L, build cassé, hooks >600L |
| Scalabilité | 5.5 | ×1.0 | 5.5 | Theming prêt, routing scalable, mais i18n non externalisé, white-labeling bloqué |
| Maturité perçue | 6.5 | ×1.0 | 6.5 | Design distinctif et ambitieux, mais finitions manquantes et placeholders |
Calcul du score global
| Somme pondérée | Somme pondérations | |
|---|---|---|
| Total | 65.3 | 10.0 |
| SCORE GLOBAL | 6.5 / 10 |
Recommandations immédiates (semaine 1-2)
1. Fixer le build cassé
- Fichier :
src/components/views/education-view/useEducationView.ts→ importeducationServicemanquant - Temps : 15 minutes
- Impact : 🔴 Critique — débloque le déploiement
2. Supprimer les fichiers orphelins
- Fichiers : 25 fichiers identifiés en Phase H6 (~3 000 LOC de code mort)
- Temps : 2-4 heures
- Impact : Réduit la confusion, améliore la navigabilité du code
3. Supprimer les CSS vanilla parallèles
- Fichiers :
styles/button.css,styles/card.css,styles/input.css,styles/badge-avatar.css,styles/header.css - Temps : 1 jour (vérifier qu'aucun composant n'utilise encore les classes
.btn-veza,.card-veza, etc.) - Impact : Élimine la double maintenance CSS ↔ composants React
4. Supprimer les hacks CSS !important
- Fichiers :
styles/fix-input-focus.css,styles/fix-login-form.css - Temps : 4-8 heures
- Impact : Élimine les overrides imprévisibles
5. Résoudre les duplications de composants
- Actions :
- Supprimer
ui/loading-spinner.tsx→ utiliserui/Spinner.tsx - Supprimer
ui/button-loading.tsx→ utiliserButtonproploading - Choisir entre
modal.tsxetdialog/→ migrer vers un seul - Consolider
DataListetAccordion(legacy → nouveau)
- Supprimer
- Temps : 1-2 jours
- Impact : API claire pour les développeurs
Recommandations court terme (mois 1-2)
1. Split services/api/client.ts (2 237 lignes)
- Description : Décomposer en modules (interceptors, retry, cache, csrf, request-builder)
- Prérequis : Aucun
- Effort : L (3-5 jours)
- Impact : Critique — fichier le plus modifié du projet
2. Migrer components/ → features/
- Description : Déplacer
components/player/,components/settings/,components/social/,components/education/,components/commerce/,components/studio/dans les modules features correspondants - Prérequis : Fixer les imports, mettre à jour les barrel exports
- Effort : L (1 semaine)
- Impact : Majeur — architecture clarifiée
3. Activer @typescript-eslint/no-explicit-any: 'warn'
- Description : Réactiver la règle ESLint, corriger progressivement les ~120
anydans le code source (pas les tests ni les types générés) - Prérequis : Aucun
- Effort : M (2-3 jours pour la correction initiale)
- Impact : Majeur — type safety restaurée
4. Unifier les tokens de design (--kodo-* ↔ --veza-*)
- Description : Choisir un namespace unique, migrer toutes les références
- Prérequis : Décision de nommage
- Effort : M (2-3 jours)
- Impact : Majeur — source de vérité unique pour les couleurs
5. Ajouter skip navigation
- Description : Ajouter
<a href="#main-content" class="sr-only focus:not-sr-only">Skip to content</a>en haut du layout - Prérequis :
id="main-content"sur le<main> - Effort : XS (30 minutes)
- Impact : Critique (WCAG 2.4.1)
6. Ajouter sémantique HTML
- Description :
<aside>pour Sidebar,<article>pour cards de contenu,<section>pour les sections de page,<footer>pour les pieds de page - Prérequis : Aucun
- Effort : S (1 jour)
- Impact : Modéré (WCAG 1.3.1)
7. Split hooks lourds
- Description :
usePlaylist.ts(631L) →usePlaylistData,usePlaylistActions,usePlaylistCollaboration - Prérequis : Tests existants (595L)
- Effort : M (2 jours)
- Impact : Modéré — maintenance améliorée
8. Optimiser le vendor chunk
- Description : Identifier les dépendances dans le chunk de 925 KB, lazy-loader les plus lourds (emoji-picker, framer-motion, hls.js, swagger-ui)
- Prérequis : Build fonctionnel
- Effort : M (2-3 jours)
- Impact : Modéré — LCP amélioré
9. Ajouter loading="lazy" aux images
- Description : Ajouter l'attribut sur toutes les
<img>hors above-the-fold dansOptimizedImageet les images de listes - Prérequis : Aucun
- Effort : S (1 jour)
- Impact : Modéré — performance perçue
10. Remplacer les couleurs hardcodées par des tokens
- Description : Migrer les ~30 hex hardcodés vers les CSS variables du design system
- Prérequis : Tokens unifiés (recommandation #4)
- Effort : S (1 jour)
- Impact : Modéré — theming complet
Recommandations long terme (trimestre)
Refonte design system
- Fusionner les deux systèmes de tokens en un seul "KODO v4"
- Documenter formellement dans un Storybook dédié "Design System"
- Créer des composants manquants (Stepper, Timeline, Calendar, Rich Text Editor)
- Migrer les 75 fichiers avec inline styles vers des classes utilitaires
Architecture cible
- Finaliser la migration features-first (supprimer
components/legacy saufcomponents/ui/etcomponents/layout/) - Extraire
client.tsen un package interne (@veza/api-client) - Normaliser les patterns d'erreur (un seul pattern dans les services)
Performance
- Réduire les fonts de 6 familles à 2-3
- Implémenter le prefetching de données (React Query
prefetchQuerysur hover des liens) - Ajouter des Web Workers pour les calculs audio lourds (waveform, analytics)
i18n
- Externaliser toutes les strings hardcodées dans les fichiers de locale
- Ajouter au minimum l'anglais et le français
- Préparer le RTL support (classes logiques Tailwind)
Verdict final
1. Le frontend est-il présentable pour un investisseur aujourd'hui ?
NON — Le build est cassé, ce qui rend impossible toute démonstration en production. En revanche, si le build est fixé (15 minutes), l'interface démontrable en dark mode avec ses animations fluides et son design distinctif ferait une impression favorable pour un investisseur — à condition de ne pas naviguer sur les 5 pages placeholder "Coming Soon". L'infrastructure technique (TypeScript strict, Storybook, Sentry, feature flags) est un signal positif de rigueur.
2. Le frontend peut-il scaler sans refonte architecturale ?
OUI, avec caveats — L'architecture de base (feature modules, React Query, Zustand, routing lazy) est scalable. Cependant, la dualité components/ ↔ features/, les 706 as any, et le client API monolithique de 2 237 lignes devront être adressés pour supporter une équipe de 5+ développeurs travaillant en parallèle. Estimation : 2-3 semaines de refactoring pour être "scale-ready".
3. Une refonte complète est-elle nécessaire ou un refactoring suffit ?
Un refactoring suffit. La stack est moderne et bien choisie (React 18, Vite 7, Tailwind v4, TypeScript strict). Le design system KODO est ambitieux et fonctionnel. Les problèmes sont de l'ordre du nettoyage (code mort, duplications, CSS parallèle), de la consolidation (tokens, architecture) et de la finition (accessibilité, performance) — pas d'une refonte fondamentale. Estimation : 6-8 semaines de refactoring ciblé pour atteindre un niveau "production-ready".
4. Le projet respecte-t-il les standards minimaux d'un SaaS B2B/B2C en 2025 ?
PARTIELLEMENT — Les standards respectés : TypeScript strict, design system formalisé, Storybook, React Query, JWT httpOnly, CSRF, Sentry, feature flags, ESLint custom rules. Les standards non respectés : build cassé, skip navigation absent (WCAG), i18n non externalisé, code mort significatif, any types endémiques. Pour un SaaS B2B/B2C en 2025-2026, le seuil minimal exige un build fonctionnel, une accessibilité WCAG AA, et une internationalisation au minimum anglais/français. Le projet est à ~70% du seuil.