# 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 `