# Phase K — Score Global & Recommandations --- ## Tableau de synthèse | Catégorie | Score /10 | Pondération | Score pondéré | Justification (1 phrase) | |-----------|-----------|-------------|---------------|--------------------------| | Architecture | 7.0 | ×1.3 | 9.1 | Feature-based solide mais migration incomplète (dualité views/features, AuthContext/authStore) | | Design System | 7.5 | ×1.0 | 7.5 | SUMI v2.0 mature avec tokens complets, dark/light, quelques fuites z-index | | Cohérence UI | 6.5 | ×1.0 | 6.5 | Composants bien centralisés, toast dualité et `variant="glass"` non défini | | Accessibilité | 5.5 | ×1.0 | 5.5 | ARIA correct, focus-visible, mais sémantique HTML insuffisante et skip nav absent | | Sécurité | 7.0 | ×1.5 | 10.5 | httpOnly JWT, DOMPurify, Zod, mais open redirect et API keys en localStorage | | Performance | 6.5 | ×1.2 | 7.8 | Lazy loading systématique, request dedup, mais React.memo insuffisant | | Dette technique | 6.0 | ×1.0 | 6.0 | client.ts monolithe (2237L), dualité structurelle, ~262 `any`/`as any` en prod | | Scalabilité | 6.5 | ×1.0 | 6.5 | Theming prêt, virtualisation OK, i18n partiel, pas de white-labeling | | Maturité perçue | 6.5 | ×1.0 | 6.5 | Identité SUMI distinctive, beta avancée, features ComingSoon | | **SCORE GLOBAL** | | | **66.0 / 99** | | | **Moyenne pondérée** | | | **6.6 / 10** | | --- ## Recommandations immédiates (semaine 1-2) ### 1. Corriger l'open redirect dans usePlaylistNotifications - **Fichier** : `features/playlists/hooks/usePlaylistNotifications.ts:203,219,235,251` - **Temps estimé** : 30 min - **Impact** : Ferme une vulnérabilité de sécurité exploitable - **Action** : Valider `notification.link` avant `window.location.href` (vérifier que l'URL est same-origin ou dans une allowlist) ### 2. Résoudre la dualité AuthContext vs authStore - **Fichiers** : `context/AuthContext.tsx`, `providers/AuthProvider.tsx` - **Temps estimé** : 2-4h - **Impact** : Élimine la source de bugs auth, simplifie le modèle mental - **Action** : Supprimer `AuthContext.tsx` et `AuthProvider.tsx`, s'assurer que tous les imports utilisent `useAuthStore` ### 3. Ajouter un skip navigation link - **Fichier** : `components/layout/Layout.tsx` ou `app/App.tsx` - **Temps estimé** : 30 min - **Impact** : Conformité WCAG 2.4.1 - **Action** : Ajouter `Skip to content` + `id="main-content"` sur le `
` ### 4. Définir la variante `glass` dans Button - **Fichier** : `components/ui/button.tsx:14-35` - **Temps estimé** : 15 min - **Impact** : Corrige des boutons sans style dans CloudIntegrationView et GearViewHeader - **Action** : Ajouter `glass: 'bg-white/10 text-foreground backdrop-blur-md border border-white/20 hover:bg-white/20'` dans `buttonVariants` ### 5. Supprimer les fichiers legacy auth - **Fichiers** : `pages/auth/Login.tsx`, `pages/auth/Register.tsx`, `pages/auth/Login.test.tsx`, `pages/auth/Register.test.tsx` - **Temps estimé** : 30 min - **Impact** : Élimine la confusion, réduit le code mort - **Action** : Supprimer les fichiers, vérifier qu'aucun import ne les référence --- ## Recommandations court terme (mois 1-2) ### 1. Éclater `client.ts` (2237L) - **Description** : Découper le client HTTP monolithique en modules cohérents - **Prérequis** : Aucun - **Effort** : L - **Impact** : Critique — maintenabilité et testabilité - **Découpage** : `httpClient.ts`, `requestValidation.ts`, `responseCache.ts`, `requestInterceptors.ts`, `validationMetrics.ts` ### 2. Terminer la migration `components/views/` → `features/pages/` - **Description** : Migrer les 20 sous-dossiers de `components/views/` vers `features/*/pages/` - **Prérequis** : Convention de migration définie - **Effort** : XL - **Impact** : Majeur — architecture cohérente - **Suggestion** : Migrer 3-4 views par sprint ### 3. Unifier le système de toast - **Description** : Choisir entre `addToast()` et `toast()` react-hot-toast, supprimer l'autre - **Prérequis** : Aucun - **Effort** : M - **Impact** : Majeur — cohérence DX et UX ### 4. Enrichir la sémantique HTML - **Description** : Ajouter `