Aller au contenu

🚀 Plan d'Action Technique - Impro Manager v2.0

Roadmap de développement technique Version 2.0 - Octobre 2025


Table des Matières

  1. Vue d'Ensemble
  2. Stack Technique
  3. Phase 1 : Fondations
  4. Phase 2 : Bibliothèque Musicale
  5. Phase 3 : Assignation Musicale
  6. Phase 4 : Mode Live & Synchronisation
  7. Phase 5 : PWA & Optimisation
  8. Phase 6 : Admin & Features Avancées
  9. Prochaines Étapes Immédiates

1. Vue d'Ensemble

1.1 Objectif Global

Développer Impro Manager v2.0 en 10 sprints de 2 semaines (20 semaines = 5 mois).

Livrable final : - Application web complète MC + Son - Mode Préparation + Mode Live - Bibliothèque musicale 777+ pistes avec métadonnées enrichies - Synchronisation temps réel WebSocket - Utilisable en production pour 100% des matchs de la troupe

1.2 Stratégie de Développement

Approche incrémentale : - Chaque phase livre une fonctionnalité complète et testable - Validation avec utilisateurs réels (Julie MC, Marc Son) à la fin de chaque phase - Pivot possible en cours de route selon feedback

Priorités : 1. Valeur utilisateur : Features les plus critiques d'abord 2. Risque technique : Tackle les challenges complexes tôt (WebSocket, analyse audio) 3. Dépendances : Respecter l'ordre logique (feuille de match avant assignation musicale)


2. Stack Technique

2.1 Frontend

Framework : - Vue.js 3.4+ avec Composition API - TypeScript (optionnel, recommandé pour V2) - Vite comme bundler (rapide, hot reload)

PWA (Progressive Web App) : - Service Worker : Workbox (via vite-plugin-pwa) - Cache Storage API : Chansons assignées + tous les bruitages - Offline-first strategy : - MC smartphone : Lecture seule offline (pas de modifications) - Son laptop : Fonctionnalités complètes offline - Manifest.json : Installable sur iOS/Android/Desktop

UI & Styling : - CSS custom (pas de framework lourd, esthétique glassmorphisme) - Vue Draggable (vue.draggable.next) pour drag & drop - Vue Router pour navigation - Pinia pour state management (optionnel, peut utiliser Composition API seule)

Audio : - HTML5 Audio API (natif) - Pre-loading strategy : INTRO/OUTRO/TRANSITION de ligne actuelle + suivante - WaveSurfer.js (optionnel pour waveform visualisation V2)

WebSocket Client : - Socket.IO Client (v4+) - Reconnexion automatique si déconnexion - Heartbeat adaptatif : 5 sec (desktop), 10 sec (smartphone)


2.2 Backend

Framework : - Express.js (Node.js 18+) - TypeScript (optionnel)

Hébergement : - Hostinger Cloud (production) - Stockage : 200 GB - Organisation fichiers : - /audio/songs/ : Chansons (2-5 min, 777+ fichiers, ~150-250 MB) - /audio/sfx/ : Bruitages (1-10 sec, ~100 fichiers, ~10 MB) - /data/ : Fichiers JSON (matchs, personnel, bibliothèque) - /logs/ : Logs applicatifs

WebSocket Server : - Socket.IO (v4+) - Heartbeat : 10 sec (smartphone), 5 sec (desktop)

Stockage : - Fichiers JSON (phase initiale) - /data/matches/match_*.json - /data/personnel/personnel.json - /data/music/songs_library.json - /data/music/sfx_library.json - Migration DB future : MongoDB ou PostgreSQL (V2)

API : - RESTful API : - GET/POST/PUT/DELETE /api/matches - GET /api/music/songs (avec filtres) - GET /api/music/sfx (bruitages) - GET/POST /api/personnel - GET/POST /api/auth (authentification - Phase 6)

Serveur Audio : - Fichiers statiques servis par Express - Chansons : /audio/songs/* - Bruitages : /audio/sfx/* - Cache headers : Optimisé pour PWA Cache Storage API


2.3 Analyse Musicale (Pipeline séparé)

Langage : - Python 3.10+

Bibliothèques : - Librosa : Analyse audio technique (tempo, spectral centroid, etc.) - Essentia : Extraction features audio avancées - Modèles ML (Hugging Face, TensorFlow) : Arousal-Valence-Dominance - Mutagen : Extraction métadonnées fichiers (ID3 tags)

Output : - music_library.json généré - Exécution manuelle (script indépendant) - Mise à jour : Relance script si nouvelles pistes ajoutées


2.4 DevOps & Tooling

Versioning : - Git + GitHub

Linting & Formatting : - ESLint + Prettier (JavaScript/Vue) - Black (Python)

Testing : - Vitest (tests unitaires Vue) - Playwright (tests E2E, optionnel V2)

Build & PWA : - vite-plugin-pwa : Génération Service Worker automatique - Workbox : Stratégies de cache (CacheFirst, NetworkFirst) - Build production : npm run build → génère /dist avec SW

Environnement : - Dev : - Frontend : localhost:5173 (Vite dev server) - Backend : localhost:3001 (Express) - WebSocket : localhost:3001 - Prod : - Hostinger Cloud (hébergement principal) - Domain : TBD (ex: impro-manager.troupe.com) - HTTPS : Requis pour PWA et Service Worker - Deploy : FTP/SFTP ou Git hooks

Logging Production : - Winston ou Pino pour logs structurés - Rotation : Logs quotidiens (app-2025-10-10.log) - Accès : /logs/ (Admin uniquement) - Format LLM-friendly : [timestamp] [level] [context] message


3. Phase 1 : Fondations (Sprint 1-2)

3.1 Objectif

Créer, éditer et stocker des feuilles de match fonctionnelles.

Livrable : Julie (MC) peut créer une feuille de match complète en < 10 minutes.


3.2 Sprint 1 : Backend API + Structure Données

Durée : 2 semaines

Tâches Backend :

  1. Setup projet Express.js
  2. Initialiser repo Git
  3. Structure dossiers :
    /backend
      /routes
      /controllers
      /models
      /data
        /matches
        /personnel
        /music
      server.js
    
  4. Install dépendances : express, cors, socket.io, nodemon

  5. Modèles de données

  6. Créer schémas JSON :
    • match.schema.json (validation avec ajv)
    • personnel.schema.json
  7. Exemples fixtures pour tests

  8. API CRUD Matchs

  9. POST /api/matches : Créer match
  10. GET /api/matches/:id : Récupérer match
  11. PUT /api/matches/:id : Modifier match
  12. DELETE /api/matches/:id : Supprimer match
  13. GET /api/matches : Liste tous les matchs

  14. API Personnel

  15. GET /api/personnel : Liste personnel troupe
  16. POST /api/personnel : Ajouter membre (V2)

  17. Stockage JSON

  18. Fonctions lecture/écriture fichiers JSON
  19. Gestion IDs uniques (match_001, match_002, etc.)
  20. Timestamps created_at/updated_at automatiques

  21. Tests API

  22. Tester tous endpoints avec Postman/Insomnia
  23. Créer collection de tests

Validation Sprint 1 : - ✅ API CRUD complète fonctionnelle - ✅ Stockage JSON opérationnel - ✅ Tests manuels passés


3.3 Sprint 2 : Frontend Interface MC Préparation

Durée : 2 semaines

Tâches Frontend :

  1. Setup projet Vue.js
  2. Initialiser Vite + Vue 3
  3. Structure dossiers :
    /frontend
      /src
        /components
        /views
        /composables
        /assets
        App.vue
        main.js
    
  4. Install : vue-router, axios, vue-draggable-next

  5. Routing

  6. Pages :
    • / → Accueil
    • /matches → Liste matchs
    • /matches/new → Créer match
    • /matches/:id/edit → Éditer match (MC)
  7. Navigation header

  8. Composants de base

  9. MatchLine.vue : Ligne de feuille de match
  10. LineEditor.vue : Modal d'édition ligne
  11. InfoGenerales.vue : Formulaire infos match

  12. Vue Création Match (MC)

  13. Formulaire infos générales (date, lieu, équipes)
  14. Sélection personnel (dropdowns depuis API)
  15. Template standard (bouton charger 19 lignes)
  16. Ajout/suppression/édition lignes dynamique
  17. Drag & drop réorganisation (vue-draggable-next)

  18. Types de Lignes

  19. Implémenter les 8 types :
    • ARRIVÉE, ÉCHAUFFEMENT, PRÉSENTATION, SÉQUENCE, ANNONCE INTERMÉDIAIRE, PAUSE, ANNONCE FIN, FIN
  20. Formulaires spécifiques par type dans modal

  21. Sauvegarde

  22. Sauvegarde auto toutes les 30 secondes
  23. Bouton sauvegarder manuel
  24. Appel API PUT /api/matches/:id
  25. Toast confirmations

Validation Sprint 2 : - ✅ Julie peut créer feuille complète en < 10 minutes - ✅ Tous types de lignes fonctionnels - ✅ Drag & drop réorganisation OK - ✅ Sauvegarde persistante

Validation Phase 1 Complète : - ✅ Démonstration à Julie - ✅ Feedback recueilli - ✅ Tests création 3 feuilles de match réelles


4. Phase 2 : Bibliothèque Musicale (Sprint 3-4)

4.1 Objectif

Bibliothèque musicale avec métadonnées enrichies et filtres puissants.

Livrable : Marc (Son) trouve une musique Western en < 30 secondes.


4.2 Sprint 3 : Pipeline Analyse Musicale

Durée : 2 semaines

Tâches Python :

  1. Setup environnement Python
  2. Créer /music-analyzer dossier
  3. Virtual env : python -m venv venv
  4. Install : librosa, essentia, mutagen, pandas

  5. Script scan fichiers audio

  6. Parcourir dossier OneDrive musiques (777+ fichiers)
  7. Lister tous .mp3, .wav, .flac
  8. Générer liste fichiers avec chemins absolus

  9. Extraction métadonnées de base

  10. Titre, Artiste, Album (via Mutagen)
  11. Durée, Format, Bitrate
  12. Cover art (extraction image)

  13. Analyse audio technique

  14. Tempo (BPM) : Librosa beat.tempo()
  15. Tonalité/Key : Essentia KeyExtractor
  16. Mode : Majeur/Mineur
  17. Spectral Centroid : Brillance son
  18. Vocal/Instrumental : Détection voix (Essentia)
  19. Instruments dominants : Classification (modèle pré-entraîné)

  20. Analyse émotionnelle (simplifié V1)

  21. Arousal : Basé sur tempo + energy
    • Rapide + fort → Arousal élevé
    • Lent + doux → Arousal faible
  22. Valence : Basé sur mode (majeur/mineur) + harmonie
    • Majeur → Valence positive
    • Mineur → Valence négative
  23. Dominance : Basé sur dynamique + intensité
  24. Tags émotions discrètes (mapping simple)

  25. Détection structure

  26. Sections : Intro/Verse/Chorus/Outro (Essentia SBICSegmenter)
  27. Climax : Point max energy
  28. Clip auto : Sélection meilleur extrait 30-45 sec

  29. Génération music_library.json

  30. Format conforme schéma PRD (section 9.2)
  31. Un objet par piste avec toutes métadonnées
  32. Sauvegarde dans /backend/data/music/music_library.json

  33. Tags manuels initiaux

  34. Ajouter manuellement scenarios pour ~50 pistes clés
  35. Exemples : Western, Romance, Action, Comédie, etc.
  36. Base pour suggestions futures

Validation Sprint 3 : - ✅ music_library.json généré avec 777+ pistes - ✅ Métadonnées complètes (30+ champs par piste) - ✅ Vérification qualité sur 20 pistes échantillon


4.3 Sprint 4 : Interface Bibliothèque + Filtres

Durée : 2 semaines

Tâches Backend :

  1. API Musiques
  2. GET /api/music : Liste toutes musiques
  3. GET /api/music/:id : Détails musique
  4. Filtres query params :
    • ?scenarios=Western,Action
    • ?tempo_min=100&tempo_max=140
    • ?vocal=true
    • ?search=showdown
  5. Implémentation filtrage en mémoire (JSON)

  6. Serveur fichiers audio

  7. Route statique : /audio/* → Servir fichiers mp3
  8. Copier fichiers depuis OneDrive vers /backend/public/music/ (ou symbolic link)
  9. Headers CORS pour lecture cross-origin

Tâches Frontend :

  1. Composants Bibliothèque
  2. MusicCard.vue : Carte musique (grille)
  3. MusicFilters.vue : Panel filtres (scenarios, tempo, émotions)
  4. AudioPlayer.vue : Lecteur preview compact

  5. Page Bibliothèque

  6. Route /music (accessible indépendamment)
  7. Layout : Filtres (gauche) | Grille musiques (droite)
  8. Appel API GET /api/music au mount

  9. Filtres interactifs

  10. Scenarios : Checkboxes multi-sélection
  11. Tempo : Range slider (60-180 BPM)
  12. Vocal/Instrumental : Checkboxes
  13. Recherche texte : Input avec debounce 300ms
  14. Émotions : Sliders Valence/Arousal (avancé, collapsible)
  15. Filtres appliqués côté client (réactif)

  16. Affichage Grille

  17. Grille responsive (3-4 colonnes desktop, 2 tablet, 1 mobile)
  18. Pagination ou virtualisation (si > 100 résultats)
  19. Tri : Énergie, Titre, Durée, BPM

  20. Lecteur Preview

  21. Click [▶️] carte → Charge dans lecteur bas de page
  22. Play/Pause/Stop
  23. Progress bar
  24. Volume slider
  25. Bouton [🎬 Clip] → Joue extrait clippé

Validation Sprint 4 : - ✅ Marc trouve musique Western en < 30 secondes - ✅ Filtres fonctionnels et réactifs - ✅ Lecteur preview opérationnel - ✅ 777 pistes affichées correctement

Validation Phase 2 Complète : - ✅ Démonstration à Marc - ✅ Tests recherche sur 10 scenarios différents - ✅ Feedback qualité métadonnées


5. Phase 3 : Assignation Musicale (Sprint 5-6)

5.1 Objectif

Drag & drop musiques depuis bibliothèque vers feuille de match.

Livrable : Marc assigne musiques pour un match complet en < 30 minutes.


5.2 Sprint 5 : Backend Assignations + Frontend Layout

Durée : 2 semaines

Tâches Backend :

  1. Extension modèle Match
  2. Ajouter champs music à chaque ligne :
    "music": {
      "intro": {
        "music_id": "music_042",
        "settings": {
          "play_type": "clip",
          "clip_start": 30,
          "clip_end": 75,
          "fade_in": 2,
          "fade_out": 3,
          "volume": 80
        }
      },
      "outro": null,
      "transition": null
    }
    
  3. Validation schéma

  4. API Assignation

  5. Endpoint existant PUT /api/matches/:id suffit
  6. Mise à jour musiques dans JSON
  7. Validation : music_id existe dans music_library.json

Tâches Frontend :

  1. Page Son Préparation
  2. Route /matches/:id/sound-prep
  3. Layout split-screen :

    • Gauche (30%) : Feuille de match (lecture seule structure)
    • Droite (70%) : Bibliothèque musicale
  4. Composant Feuille de Match (Son)

  5. SoundMatchSheet.vue
  6. Affichage lignes (séquences seulement en V1)
  7. 3 zones par ligne : INTRO / OUTRO / TRANSITION
  8. Zones vides : [+ Assigner]
  9. Zones remplies : ✅ [🎸 Titre 2:45] [✏️] [🗑️]

  10. Intégration Bibliothèque

  11. Réutiliser composants Sprint 4
  12. Filtres visibles
  13. Grille musiques drag-enabled

Validation Sprint 5 : - ✅ Layout split-screen fonctionnel - ✅ Feuille de match affichée côté gauche - ✅ Bibliothèque fonctionnelle côté droit


5.3 Sprint 6 : Drag & Drop + Édition

Durée : 2 semaines

Tâches Frontend :

  1. Implémentation Drag & Drop
  2. Cartes musiques : draggable="true"
  3. Zones INTRO/OUTRO/TRANSITION : droppable
  4. Event handlers :
    • @dragstart : Stocker music_id
    • @dragover : Highlight zone drop
    • @drop : Assignation musique
  5. Appel API PUT /api/matches/:id après drop

  6. Composant Édition Musique

  7. MusicSettings.vue (modal)
  8. Déclencheur : Click [✏️] sur musique assignée
  9. Formulaire :
    • Type lecture : Entier / Clip auto / Clip custom
    • Point de départ : 0:00 / Hook / Climax / Custom
    • Fade in/out (sliders)
    • Volume (slider)
  10. Visualisation timeline musique (sections)
  11. Preview configuration

  12. Sauvegarde Assignations

  13. Auto-save après chaque assignation (debounce 1 sec)
  14. Toast confirmations
  15. Indicateur : "⚠️ X musiques non assignées"

  16. Actions supplémentaires

  17. [🗑️ Retirer] : Supprimer assignation
  18. Popup confirmation si musique déjà assignée ailleurs

Validation Sprint 6 : - ✅ Drag & drop fluide et fonctionnel - ✅ Assignations sauvegardées persistantes - ✅ Édition musique opérationnelle - ✅ Marc assigne 8 séquences en < 30 minutes

Validation Phase 3 Complète : - ✅ Démonstration à Marc - ✅ Test assignation match complet (8 séquences × 3 points) - ✅ Feedback UX drag & drop


6. Phase 4 : Mode Live & Synchronisation (Sprint 7-8)

6.1 Objectif

Mode Live + synchronisation temps réel WebSocket MC ↔ Son.

Livrable : Julie et Marc coordonnent un spectacle complet sans incident.


6.2 Sprint 7 : WebSocket + Interface MC Live

Durée : 2 semaines

Tâches Backend :

  1. Setup Socket.IO Server
  2. Intégrer Socket.IO à Express
  3. Rooms par match : match_{match_id}
  4. Événements :

    • join_match : Client rejoint room
    • live_mode_activated
    • line_started
    • chrono_update
    • line_completed
  5. Gestion Rooms

  6. Client MC/Son s'identifie (role + match_id)
  7. Serveur broadcast événements dans room
  8. Logging événements pour debug

  9. Persistance État Live

  10. Ajouter champs au JSON match :
    • live_state.current_line_id
    • live_state.chrono_elapsed
    • live_state.chrono_status (running/paused/stopped)
  11. Mise à jour temps réel

Tâches Frontend :

  1. Setup Socket.IO Client
  2. Install socket.io-client
  3. Composable useWebSocket.js :
    • Connexion au serveur
    • Join room match
    • Emit/Listen événements
  4. Reconnexion automatique si déconnexion

  5. Page MC Mode Live

  6. Route /matches/:id/live/mc
  7. Layout selon wireframe (section 2.2)
  8. Composants :

    • LiveTimer.vue : Chronomètre
    • ScoreBoard.vue : Gestion score
    • ProgressionList.vue : Liste lignes
  9. Chronomètre

  10. Décompte manuel (pas automatique)
  11. Boutons : Démarrer / Pause / Stop / Reset
  12. Affichage : Écoulé / Total / Restant
  13. Emit chrono_update chaque seconde si running

  14. Passage Ligne

  15. Bouton [⏭️ Passer ligne suivante]
  16. Auto si chrono = 0:00 (popup confirmation)
  17. Emit line_started avec nouvelle ligne
  18. Emit line_completed pour ancienne ligne

  19. Toggle Mode Live

  20. Bouton dans MC Préparation : [🔄 Mode Live →]
  21. Confirmation popup
  22. Transition route vers /live/mc
  23. Emit live_mode_activated

Validation Sprint 7 : - ✅ WebSocket connecté et stable - ✅ Interface MC Live fonctionnelle - ✅ Chronomètre opérationnel - ✅ Événements émis correctement


6.3 Sprint 8 : Interface Son Live + Synchronisation

Durée : 2 semaines

Tâches Frontend :

  1. Page Son Mode Live
  2. Route /matches/:id/live/sound
  3. Layout selon wireframe (section 4.2)
  4. Composants :

    • SoundLivePlayer.vue : Lecteur principal
    • LiveMusicAssignments.vue : Musiques ligne actuelle
    • QuickSearch.vue : Recherche rapide bruitages
  5. Synchronisation Ligne Active

  6. Listen line_started :
    • Mise à jour "EN COURS"
    • Affichage musiques INTRO/OUTRO/TRANSITION
    • Reset lecteur
  7. Listen chrono_update :

    • Affichage chrono synchronisé (temps restant)
  8. Lecteur Audio Principal

  9. Boutons [▶️ JOUER INTRO/OUTRO/TRANSITION]
  10. Click → Charge musique avec settings
  11. Play avec fade in, volume, clip si configuré
  12. Contrôles avancés :

    • Skip au climax
    • Fade out manuel
    • Volume en temps réel
  13. Recherche Rapide Bruitages

  14. Input recherche
  15. Suggestions rapides (badges cliquables)
  16. Résultats instantanés
  17. Click → Play immédiat (bruitage court)

  18. Toggle Mode Live (Son)

  19. Bouton dans Son Préparation
  20. Listen live_mode_activated (émis par MC)
  21. Notification toast : "MC a activé le Mode Live"
  22. Transition route vers /live/sound

Validation Sprint 8 : - ✅ Synchronisation MC → Son fonctionnelle - ✅ Chrono affiché en temps réel chez Son - ✅ Ligne active mise à jour instantanément - ✅ Lecteur audio opérationnel - ✅ Recherche rapide bruitages OK

Validation Phase 4 Complète : - ✅ Test spectacle complet avec Julie + Marc - ✅ Latence synchronisation < 1 seconde mesurée - ✅ Zéro problème coordination pendant test - ✅ Feedback UX Mode Live


7. Phase 5 : PWA & Optimisation (Sprint 9-10)

7.1 Objectif

Implémentation PWA (Progressive Web App), cache offline, optimisations performance.

Livrable : Application installable sur smartphones/laptops, fonctionnelle offline, prête pour production.


7.2 Sprint 9 : Implémentation PWA & Cache

Durée : 2 semaines

Tâches PWA Frontend :

  1. Configuration vite-plugin-pwa
  2. Install : npm install vite-plugin-pwa -D
  3. Config vite.config.js :
    import { VitePWA } from 'vite-plugin-pwa'
    plugins: [
      vue(),
      VitePWA({
        registerType: 'autoUpdate',
        workbox: {
          globPatterns: ['**/*.{js,css,html,ico,png,svg}']
        }
      })
    ]
    
  4. Génération automatique Service Worker

  5. Manifest.json

  6. Créer public/manifest.json :
    • name, short_name, description
    • start_url, display: "standalone"
    • Icons (192x192, 512x512)
    • theme_color, background_color
  7. Lien dans index.html

  8. ⚠️ Découverte Critique : Limite Safari 50 MB

  9. Problème : Safari/iOS limite Cache Storage API à ~50 MB
  10. Impact : Impossible de cacher toutes les chansons (150-250 MB) dans Cache Storage
  11. Solution : Architecture hybride (voir ci-dessous)

  12. Architecture de Cache Hybride (voir RESEARCH_FINDINGS.md)

  13. IndexedDB pour chansons (pas de limite stricte 50 MB) :
    • Fichier /utils/audioCache.js avec fonctions cacheSong(), getCachedSong()
    • Stockage Blob dans IndexedDB
    • Blob URLs pour lecture HTML5 Audio
  14. Cache Storage API pour bruitages + assets :
    • Bruitages (~100 fichiers, 10 MB) ✅ Compatible Safari
    • Assets statiques (JS, CSS, images)
  15. Créer composable useProgressiveDownload.js pour tracking

  16. Cache Strategy - Chansons (IndexedDB)

  17. Téléchargement progressif avec progress :
    • Lors assignation musique → Download en arrière-plan
    • Utiliser ReadableStream pour tracking progress
    • downloadProgress.value[songId] = { loaded, total, percent }
    • Stocker dans IndexedDB après download complet
  18. Bouton manuel "Télécharger tout" :
    • Interface : "💾 Télécharger toutes les musiques (150 MB)"
    • Progress bar global : "12 / 24 musiques téléchargées"
    • Batch download avec Promise.all()
  19. Vérification cache : Icône ✅ si en cache, ⏳ sinon

  20. Cache Strategy - Bruitages (Cache Storage API)

  21. Tous les bruitages (~100 fichiers, ~10 MB) :
    • Téléchargement auto au chargement app SON
    • Ou lors activation Mode Live
    • Workbox CacheFirst strategy
  22. Compatible Safari (< 50 MB)

  23. Offline Detection

  24. Composable useOnlineStatus.js
  25. Event listener : window.addEventListener('online/offline')
  26. Banner UI : "⚠️ MODE HORS LIGNE - Reconnexion auto..."
  27. Désactivation boutons si offline (MC smartphone)

  28. Interface MC Smartphone

  29. Route spécifique : /matches/:id/live/mc-mobile
  30. Détection device : navigator.userAgent ou matchMedia
  31. Layout touch-optimized (section 2.4 wireframes)
  32. Boutons 48x48px minimum
  33. Swipe gestures pour navigation

Tâches Backend :

  1. Headers HTTP Cache
  2. Musiques : Cache-Control: public, max-age=31536000 (1 an)
  3. Bruitages : Cache-Control: public, max-age=31536000
  4. API JSON : Cache-Control: no-cache, must-revalidate

  5. Optimisation API

  6. Caching : Musiques en mémoire (pas de reload fichier JSON à chaque requête)
  7. Compression gzip responses
  8. Rate limiting (si besoin)

  9. Gestion Erreurs

  10. Try/catch complets
  11. Logs structurés (Winston ou Pino)
  12. Retours erreurs clairs (codes HTTP + messages)

  13. WebSocket Robustesse

  14. Gestion déconnexions client
  15. Reconnexion automatique côté serveur
  16. Persistance état (récupération après crash)
  17. Heartbeat adaptatif : 10 sec (smartphone), 5 sec (desktop)

Tâches Frontend (Performance) :

  1. Optimisation Chargement
  2. Lazy loading routes (Vue Router)
  3. Code splitting (Vite automatique)
  4. Préchargement musiques assignées en Mode Live

  5. Virtualisation Bibliothèque

  6. Si > 100 musiques affichées : Virtual scroll
  7. Librairie : vue-virtual-scroller
  8. Performance 777 pistes testée

  9. Gestion Erreurs UI

  10. Try/catch dans composables
  11. Toast erreurs utilisateur-friendly
  12. Fallback si API down
  13. Offline detection

  14. Optimisation Audio

  15. Pre-loading musiques :
    • En Mode Live : Preload INTRO/OUTRO/TRANSITION de ligne actuelle + suivante
  16. Gestion cache navigateur (HTTP headers)

Validation Sprint 9 : - ✅ PWA installable sur iOS/Android/Desktop - ✅ Service Worker actif et fonctionnel - ✅ Chansons assignées téléchargeables offline - ✅ Tous les bruitages en cache (~10 MB) - ✅ Interface MC smartphone optimisée tactile - ✅ Mode offline fonctionnel (lecture seule MC) - ✅ Chargement initial < 3 secondes - ✅ Recherche musicale < 500ms (777 pistes) - ✅ Switch Mode Live < 1 seconde - ✅ Pas de lag pendant spectacle


7.3 Sprint 10 : UX Polish & Tests Utilisateur

Durée : 2 semaines

Tâches Frontend :

  1. Animations & Transitions
  2. Transitions pages fluides (fade, slide)
  3. Animations drag & drop (scale, opacity)
  4. Pulse icône 🔴 EN COURS
  5. Progress bar lecteur animée

  6. Feedback Visuel

  7. Loading spinners (appels API)
  8. Skeleton loaders (grille musiques)
  9. Toast confirmations (succès/erreur)
  10. Tooltips sur boutons/icônes

  11. Accessibilité

  12. Labels ARIA
  13. Navigation clavier (tab, enter)
  14. Contraste couleurs (WCAG AA)
  15. Focus visible

  16. Responsive Final

  17. Tests tablette (iPad)
  18. Ajustements marges/padding
  19. Grille musiques responsive

Tâches Tests :

  1. Tests avec Utilisateurs Réels
  2. Organiser session avec Julie + Marc
  3. Scénario : Créer feuille + Assigner musiques + Live
  4. Observer sans intervenir
  5. Recueillir feedback (questionnaire)

  6. Corrections Bugs

  7. Prioriser bugs identifiés
  8. Corriger tous les bugs bloquants
  9. Documenter bugs connus mineurs (V2)

  10. Documentation Utilisateur

  11. Guide rapide PDF/MD :
    • Comment créer une feuille de match
    • Comment assigner des musiques
    • Comment utiliser le Mode Live
  12. Screenshots/GIFs

Validation Sprint 10 : - ✅ Animations fluides et cohérentes - ✅ Accessibilité de base OK - ✅ Responsive tablette fonctionnel - ✅ Tests utilisateur réussis (satisfaction > 4.5/5) - ✅ Documentation créée

Validation Phase 5 Complète : - ✅ Application déployée en production (serveur troupe) - ✅ Match réel géré avec l'app (validation finale) - ✅ Zéro incident pendant spectacle - ✅ Feedback troupe positif


8. Phase 6 : Admin & Features Avancées (V2, Sprint 11+)

8.1 Objectif

Système d'authentification complet, gestion utilisateurs, logs, impersonation.

Livrable : Admin peut gérer l'application et les utilisateurs avec permissions granulaires.


8.2 Sprint 11 : Authentification & Rôles

Durée : 2 semaines

Tâches Backend :

  1. Système d'authentification
  2. Install : bcryptjs, jsonwebtoken (JWT) ou express-session, nodemailer
  3. Routes /api/auth/login, /api/auth/logout, /api/auth/register
  4. Hash mots de passe : bcrypt (salt rounds 10-12)
  5. Génération tokens JWT (expiration 24h) ou session Express

  6. Réinitialisation mot de passe par email

  7. Routes :
    • POST /api/auth/forgot-password : Demande réinitialisation
    • POST /api/auth/reset-password/:token : Reset avec token
  8. Génération token reset unique (UUID + expiration 1h)
  9. Stockage temporaire token dans /data/users/reset_tokens.json
  10. Email avec lien : https://app.com/reset-password?token=xxx
  11. Configuration SMTP (Gmail, Hostinger, ou service tiers)
  12. Template email HTML (simple, branding troupe)

  13. Modèle Utilisateur

  14. Fichier /data/users/users.json ou migration DB
  15. Champs :
    {
      "user_id": "user_001",
      "email": "julie@troupe.com",
      "password_hash": "...",
      "role": "MC",
      "created_at": "2025-10-01T10:00:00Z",
      "last_login": "2025-10-10T14:30:00Z"
    }
    
  16. Rôles : Admin, MC, Son, Membre

  17. Middleware d'authentification

  18. authMiddleware.js : Vérification token/session
  19. Protection routes API :

    • /api/matches → Authentification requise
    • /api/personnel → Admin uniquement (création)
    • /api/logs → Admin uniquement
  20. Permissions par rôle

  21. Admin : Accès complet (CRUD utilisateurs, logs, matches)
  22. MC : Créer/éditer matches assignés, Mode Live
  23. Son : Assigner musiques matches assignés, Mode Live
  24. Membre : Lecture seule matches passés

Tâches Frontend :

  1. Page Login
  2. Route /login
  3. Formulaire : Email + Mot de passe
  4. Appel API /api/auth/login
  5. Stockage token : LocalStorage ou SessionStorage
  6. Redirection après login : /matches
  7. Lien "Mot de passe oublié ?" → /forgot-password

  8. Pages Réinitialisation Mot de Passe

  9. Route /forgot-password :
    • Formulaire : Email uniquement
    • Appel API POST /api/auth/forgot-password
    • Message succès : "Email envoyé ! Vérifiez votre boîte mail."
  10. Route /reset-password?token=xxx :

    • Formulaire : Nouveau mot de passe + Confirmation
    • Validation : Mot de passe identiques, min 8 caractères
    • Appel API POST /api/auth/reset-password/:token
    • Redirection /login après succès
    • Gestion erreurs : Token expiré/invalide
  11. Gestion Session

  12. Composable useAuth.js :
    • État user, isLoggedIn, role
    • Fonctions login(), logout(), checkAuth()
  13. Interceptor Axios : Ajout token dans headers
  14. Redirection /login si 401 Unauthorized

  15. Navigation Guards

  16. Vue Router guards :
    router.beforeEach((to, from, next) => {
      if (to.meta.requiresAuth && !isLoggedIn) {
        next('/login')
      } else {
        next()
      }
    })
    
  17. Protection routes sensibles

  18. Interface utilisateur adaptée au rôle

  19. Menu navigation : Affichage conditionnel selon rôle
  20. Boutons d'action : Désactivés si permissions insuffisantes
  21. Messages d'erreur : "Vous n'avez pas les droits pour cette action"

Validation Sprint 11 : - ✅ Système login/logout fonctionnel - ✅ Réinitialisation mot de passe par email opérationnelle - ✅ Emails envoyés et reçus (test SMTP) - ✅ Tokens reset valides et expiration 1h respectée - ✅ Tokens JWT ou sessions sécurisées - ✅ Routes protégées par authentification - ✅ Permissions par rôle appliquées - ✅ Tests avec 4 utilisateurs (Admin, MC, Son, Membre)


8.3 Sprint 12 : Gestion Admin & Impersonation

Durée : 2 semaines

Tâches Backend :

  1. API Gestion Utilisateurs
  2. GET /api/admin/users : Liste tous les utilisateurs (Admin uniquement)
  3. POST /api/admin/users : Créer utilisateur
  4. PUT /api/admin/users/:id : Modifier utilisateur (rôle, email)
  5. DELETE /api/admin/users/:id : Supprimer utilisateur
  6. Validation : Empêcher suppression dernier Admin

  7. Impersonation (Dev/Testing)

  8. Route POST /api/admin/impersonate/:user_id
  9. Génération token temporaire avec rôle cible
  10. Log des actions en mode impersonation :
    [2025-10-10 15:00:00] [INFO] [Admin:marc_admin] Impersonating user_mc_julie
    [2025-10-10 15:05:00] [INFO] [Impersonated:user_mc_julie] Created match_042
    
  11. Durée limitée : 1 heure
  12. Badge UI visible : "⚠️ Mode Impersonation - Julie (MC)"

  13. Logging Structuré

  14. Install Winston ou Pino
  15. Config /config/logger.js :
    • Niveau dev : debug
    • Niveau prod : info
  16. Format :
    [timestamp] [level] [context] message
    [2025-10-10 14:30:25] [INFO] [User:marc_02] Assigned music_042 to match_001
    [2025-10-10 14:35:12] [ERROR] [WebSocket] Connection lost for client mc_julie_01
    
  17. Rotation logs : winston-daily-rotate-file
  18. Fichiers : /logs/app-2025-10-10.log

  19. API Logs

  20. GET /api/admin/logs : Liste logs (Admin uniquement)
  21. Query params filtres :
    • ?date=2025-10-10
    • ?level=error
    • ?user=marc_02
  22. Pagination : 100 lignes par page
  23. Téléchargement : GET /api/admin/logs/download?date=2025-10-10

Tâches Frontend :

  1. Interface Admin - Gestion Utilisateurs
  2. Route /admin/users
  3. Tableau : Liste utilisateurs (email, rôle, dernière connexion)
  4. Actions : [Éditer] [Supprimer] [Impersonate]
  5. Modal création utilisateur :
    • Email, Mot de passe initial, Rôle
    • Génération mot de passe aléatoire (optionnel)
  6. Recherche/filtrage par rôle

  7. Impersonation UI

  8. Bouton [🎭 Impersonate] dans liste utilisateurs
  9. Confirmation popup :
    ⚠️ Impersonate Julie (MC) ?
    
    Vous allez voir l'application comme Julie.
    Toutes vos actions seront loggées.
    Durée : 1 heure maximum.
    
    [Confirmer] [Annuler]
    
  10. Banner sticky en mode impersonation :
    ⚠️ MODE IMPERSONATION - Julie (MC)
    [Terminer l'impersonation]
    
  11. Bouton [Terminer] → Retour rôle Admin

  12. Interface Admin - Logs

  13. Route /admin/logs
  14. Filtres :
    • Date (date picker)
    • Niveau (INFO, WARN, ERROR)
    • Utilisateur (dropdown)
    • Recherche texte (full-text)
  15. Affichage :
    • Tableau format log
    • Syntax highlighting (couleurs par niveau)
    • Expansion ligne pour détails
  16. Bouton [📥 Télécharger logs] (CSV/TXT)

  17. Dashboard Admin (optionnel)

  18. Route /admin/dashboard
  19. Statistiques :
    • Nombre utilisateurs par rôle
    • Matches créés (ce mois)
    • Dernières connexions
    • Erreurs récentes (24h)
  20. Graphiques simples (Chart.js ou similaire)

Validation Sprint 12 : - ✅ Admin peut créer/éditer/supprimer utilisateurs - ✅ Impersonation fonctionnelle avec logs - ✅ Logs structurés et consultables - ✅ Interface logs avec filtres opérationnels - ✅ Tests impersonation (Admin → MC → actions → logs vérifiés)

Validation Phase 6 Complète : - ✅ Système Admin complet et sécurisé - ✅ Gestion utilisateurs opérationnelle - ✅ Impersonation testée (3+ scénarios) - ✅ Logs accessibles et lisibles - ✅ Documentation Admin créée


8.4 Features Avancées Futures (Post-V2)

Authentification avancée : - OAuth2 / SSO (Google, Microsoft) - Authentification multi-facteurs (2FA) - optionnel pour renforcer la sécurité

Gestion utilisateurs avancée : - Invitations par email - Désactivation compte (soft delete) - Historique actions utilisateur

Permissions granulaires : - Permissions par match (ex: MC assigné à match spécifique) - Rôles personnalisés (créer nouveaux rôles) - Héritage permissions

Logs & Analytics : - Dashboard analytics avancé - Export logs vers service externe (Sentry, LogRocket) - Alertes automatiques (erreurs critiques)

Autres features : - Mode "spectateur" (lecture seule live) - Notifications push (PWA) - Thème sombre/clair (toggle utilisateur)


9. Prochaines Étapes Immédiates

9.1 Avant de Coder (Validation)

Étape 1 : Validation Documents - [ ] Julie et Marc lisent PRD v2 - [ ] Julie valide wireframes interface MC - [ ] Marc valide wireframes interface Son - [ ] Ajustements si nécessaire

Étape 2 : Setup Environnement - [ ] Installer Node.js 18+ (si pas déjà fait) - [ ] Installer Python 3.10+ (si pas déjà fait) - [ ] Vérifier accès dossier musiques OneDrive

Étape 3 : Décision Clés - [ ] TypeScript ? (recommandé : Oui pour backend, Non pour frontend V1) - [ ] Hébergement production : Hostinger Cloud (200 GB, HTTPS requis) - [ ] Stratégie backup ? (Git + export JSON régulier + backup Hostinger)


9.2 Démarrage Sprint 1 (Backend API)

Semaine 1-2 :

Lundi : 1. Créer repo GitHub : impro-manager-v2 2. Cloner en local 3. Créer structure /backend + /frontend + /music-analyzer 4. Initialiser backend Express :

cd backend
npm init -y
npm install express cors socket.io nodemon
5. Créer server.js basique (Hello World) 6. Tester : npm start → http://localhost:3001

Mardi-Mercredi : 7. Créer structure dossiers /routes, /controllers, /data 8. Créer match.schema.json (schéma complet selon PRD section 9.2) 9. Implémenter POST /api/matches (création match) 10. Tester avec Postman : Créer un match test

Jeudi-Vendredi : 11. Implémenter GET /api/matches/:id 12. Implémenter PUT /api/matches/:id 13. Implémenter DELETE /api/matches/:id 14. Implémenter GET /api/matches (liste) 15. Tests complets API (CRUD complet)

Semaine 2 : 16. API Personnel : GET /api/personnel 17. Créer fichier personnel.json avec 10 membres fictifs 18. Tests finaux 19. Commit Git : "✅ Phase 1 Sprint 1 - Backend API complete" 20. Point validation : API fonctionnelle et testée


9.3 Checklist Démarrage

Avant de commencer Sprint 1 :

  • Documents validés par Julie + Marc
  • Environnement dev installé (Node, Python, Git)
  • Repo GitHub créé
  • Planning confirmé (20 semaines disponibles ?)
  • Décisions techniques prises (TypeScript, hébergement)

Prêt à coder : 🚀


10. Ressources & Références

10.1 Documentation Externe

Vue.js : - https://vuejs.org/guide/introduction.html - https://router.vuejs.org/ - https://pinia.vuejs.org/

Express.js : - https://expressjs.com/ - https://socket.io/docs/v4/

Analyse Audio : - Librosa : https://librosa.org/doc/latest/index.html - Essentia : https://essentia.upf.edu/

10.2 Outils Utiles

Design : - Excalidraw (wireframes) : https://excalidraw.com/ - Coolors (palettes) : https://coolors.co/

Testing : - Postman : https://www.postman.com/ - Vitest : https://vitest.dev/

Hébergement : - Vercel (frontend) : https://vercel.com/ - Railway (backend) : https://railway.app/ - Ou serveur local troupe


11. Glossaire Technique

API : Application Programming Interface (interface backend) CRUD : Create, Read, Update, Delete (opérations de base) PWA : Progressive Web App (application web installable, offline-capable) Service Worker : Script JavaScript exécuté en arrière-plan (cache, offline) Cache Storage API : API navigateur pour stockage fichiers offline WebSocket : Protocole communication bidirectionnelle temps réel Drag & Drop : Glisser-déposer Lazy Loading : Chargement différé (optimisation) Debounce : Délai avant exécution (optimisation recherche) Toast : Notification temporaire (popup) Virtualisation : Affichage seulement éléments visibles (optimisation listes longues) JWT : JSON Web Token (authentification token-based) Impersonation : Mode test permettant de prendre l'identité d'un autre utilisateur


Fin du Plan d'Action Technique Version 2.0 - Octobre 2025 Prêt pour développement 🚀