veza/apps/web/dev_audit/frontend/10_recommendations.md
senke f64a85414c refactor: Phase 1 — SUMI token foundation
- 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>
2026-02-12 01:48:01 +01:00

9.1 KiB
Raw Blame History

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 → import educationService manquant
  • 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 → utiliser ui/Spinner.tsx
    • Supprimer ui/button-loading.tsx → utiliser Button prop loading
    • Choisir entre modal.tsx et dialog/ → migrer vers un seul
    • Consolider DataList et Accordion (legacy → nouveau)
  • 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 any dans 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 dans OptimizedImage et 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 sauf components/ui/ et components/layout/)
  • Extraire client.ts en 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 prefetchQuery sur 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.