ARCHIVED — Completed 2026-02-22
V0_501_RELEASE_SCOPE.md — Phase 5 : Streaming & Cloud
Phase : 5 — Streaming & Cloud (redéfinie, ex-Education/Gear)
Version précédente : v0.404 (Stabilisation post-audit)
Version suivante : v0.502
Prérequis : v0.404 taguée (sécurité critique résolue, stream server intégré, CI/CD fonctionnel)
1. Contexte & Redéfinition de la Phase 5
Pourquoi redéfinir ?
La Phase 5 était initialement « Education / Gear ». Le module Education a été supprimé (voir FEATURE_STATUS.md : dossier supprimé, 0/30 features). La Phase 5 doit être redéfinie autour des axes stratégiques restants.
Choix stratégique
Veza est une plateforme audio. Le streaming (HLS, live) est le différenciateur produit. Après la stabilisation v0.404 (qui intègre le stream server et active HLS), la Phase 5 doit consolider cette fondation et ajouter les fonctionnalités cloud qui font de Veza un outil de travail pour les musiciens, pas seulement une vitrine.
Nouvelle définition Phase 5
Phase 5 — Streaming & Cloud : Rendre le streaming audio production-ready, ajouter le stockage cloud pour les musiciens, et compléter le module Gear.
Plan Phase 5 complet
| Version |
Focus |
Lots |
| v0.501 |
HLS production + Cloud storage MVP + Gear avancé |
S1, C1, G1 |
| v0.502 |
Live streaming (Go Live) + Traitement audio |
S2, A1 |
| v0.503 |
Cloud avancé + Collaboration fichiers |
C2, C3 |
2. Périmètre v0.501
Lot S1 — HLS Streaming production-ready
Prérequis : v0.404 INT-02 terminé (stream server intégré, gRPC connecté, 1 flux E2E validé).
Le Lot S1 prend le relais pour rendre le streaming fiable et performant en production.
| ID |
Feature |
Frontend |
Backend |
Effort |
| S1.1 |
Transcoding adaptatif — générer automatiquement 3 variantes HLS (128k, 256k, 320k) à l'upload. Manifest master.m3u8 avec les 3 qualités. |
Sélecteur qualité dans le player |
Stream server : FFmpeg pipeline multi-bitrate, stockage segments |
L |
| S1.2 |
Playback adaptatif (ABR) — le player sélectionne automatiquement la qualité selon la bande passante. Fallback progressif si un segment échoue. |
hls.js intégré au player avec ABR activé |
Endpoint /hls/:track_id/master.m3u8 avec variantes |
M |
| S1.3 |
Cache CDN segments HLS — configurer des headers de cache sur les segments (.ts). Redis cache pour les manifests. TTL configurable. |
— |
Stream server : headers Cache-Control, Redis cache manifest |
M |
| S1.4 |
Monitoring streaming — métriques Prometheus : latence transcodage, erreurs segments, connexions actives, bande passante servie. Dashboard Grafana dédié. |
— |
Stream server : /metrics endpoint, compteurs Prometheus |
M |
| S1.5 |
Waveform generation — générer un fichier waveform JSON à l'upload (FFmpeg audiowaveform). Affichage dans le player et dans TrackDetailPage. |
Composant WaveformDisplay, intégration player progress bar |
Backend : job async waveform generation, endpoint GET /tracks/:id/waveform |
L |
Lot C1 — Cloud Storage MVP
Permettre aux musiciens de stocker et organiser leurs fichiers audio dans un espace cloud personnel.
| ID |
Feature |
Frontend |
Backend |
Effort |
| C1.1 |
Migration stockage — table user_files (id, user_id, filename, path, size_bytes, mime_type, folder_id, created_at). Table user_folders (id, user_id, name, parent_id). |
— |
Migration, modèles UserFile + UserFolder |
S |
| C1.2 |
Upload fichiers cloud — POST /cloud/files (multipart), validation type (audio/*, zip, midi, project files). Limite 500MB/fichier, quota 5GB/user (configurable). |
Dropzone upload dans CloudPage |
Handler, service, stockage S3-compatible (MinIO en dev) |
L |
| C1.3 |
File browser — arborescence de dossiers, navigation, renommage, déplacement, suppression. Tri par nom, date, taille. |
CloudBrowserView : tree sidebar + file list + breadcrumbs |
CRUD endpoints : GET/POST/PUT/DELETE /cloud/folders, GET /cloud/files (avec filtres folder_id, sort) |
L |
| C1.4 |
Prévisualisation audio — lecture inline des fichiers audio depuis le cloud sans les ajouter à la bibliothèque publique. Player minimal intégré au file browser. |
Mini player inline dans CloudBrowserView |
GET /cloud/files/:id/stream (auth, range requests) |
M |
| C1.5 |
Publier depuis le cloud — bouton « Publier comme track » qui crée un track à partir d'un fichier cloud, sans re-upload. Lien symbolique vers le fichier existant. |
Bouton dans CloudBrowserView → modale CreateTrack pré-remplie |
POST /cloud/files/:id/publish → crée un track lié au fichier |
M |
Lot G1 — Gear avancé
Le module Gear (inventaire équipement) est partiellement implémenté (CRUD basique). Le compléter.
| ID |
Feature |
Frontend |
Backend |
Effort |
| G1.1 |
Catégorisation — catégories prédéfinies (instruments, microphones, interfaces, DAW, plugins, accessoires). Filtrage par catégorie. |
Select catégorie dans GearForm, filtres dans GearListView |
Champ category dans gear, migration, enum validation |
S |
| G1.2 |
Images équipement — upload photo par item (max 3). Affichage galerie dans le détail. |
Upload image dans GearForm, galerie dans GearDetailView |
POST /inventory/gear/:id/images, stockage, migration gear_images |
M |
| G1.3 |
Gear sur profil public — section « Mon setup » sur le profil public, affichant les items marqués comme publics. |
Section GearShowcase dans ProfilePage |
GET /users/:username/gear (items publics), champ is_public sur gear |
M |
| G1.4 |
Recherche Gear — recherche textuelle dans le nom et la description des items. |
SearchBar dans GearListView |
Intégration au SearchService existant (type gear) |
S |
3. Périmètre HORS SCOPE v0.501
| Élément |
Raison |
Version cible |
| Live streaming (Go Live, RTMP) |
Nécessite infrastructure RTMP, complexité élevée |
v0.502 Lot S2 |
| Collaboration fichiers cloud (partage, commentaires) |
Dépend de C1 stabilisé |
v0.503 Lot C2 |
| Versioning fichiers cloud |
Feature avancée |
v0.503 Lot C3 |
| Traitement audio (normalisation, trim, fade) |
Dépend du stream server stabilisé |
v0.502 Lot A1 |
| Gamification |
TIER 2, hors priorité MVP |
v0.801+ |
| Web3 / tokens |
TIER 2, hors priorité MVP |
v0.901+ |
| Migration React 19 |
Évaluation en v0.501, migration en v0.602 |
v0.602 |
4. Prérequis techniques
| Prérequis |
Source |
Statut attendu à l'entrée v0.501 |
| Stream server intégré (gRPC fonctionnel) |
v0.404 INT-02 |
✅ Fait |
HLS activé (HLS_STREAMING=true) |
v0.404 INT-02 |
✅ Fait |
| Pipeline CD fonctionnel |
v0.404 SEC-01 |
✅ Fait |
| Auth stream token endpoint |
v0.404 SEC-03 |
✅ Fait |
| Staging compose complet |
v0.404 INF-07 |
✅ Fait |
| Object storage (MinIO/S3) |
Nouveau — configurer en v0.501 |
À faire |
Note : Le Lot C1 introduit MinIO (S3-compatible) pour le stockage de fichiers. C'est la seule nouvelle dépendance infra de v0.501. En production, remplaçable par AWS S3, GCS, ou Cloudflare R2.
5. Migrations prévues
| # |
Table |
Description |
| 101 |
user_folders |
Dossiers cloud utilisateur (id, user_id, name, parent_id, created_at) |
| 102 |
user_files |
Fichiers cloud (id, user_id, folder_id, filename, path, size_bytes, mime_type, created_at) |
| 103 |
tracks (alter) |
Ajouter waveform_url (nullable, chemin vers waveform JSON) |
| 104 |
gear (alter) |
Ajouter category (enum), is_public (bool default false) |
| 105 |
gear_images |
Images équipement (id, gear_id, image_url, position, created_at) |
| 106 |
user_storage_quotas |
Quotas stockage (user_id, max_bytes, used_bytes) |
6. Nouvelles routes API
Streaming (Lot S1)
| Méthode |
Route |
Auth |
Description |
| GET |
/hls/:track_id/master.m3u8 |
Stream token |
Manifest HLS multi-bitrate |
| GET |
/tracks/:id/waveform |
Optionnel |
Waveform JSON |
Cloud (Lot C1)
| Méthode |
Route |
Auth |
Description |
| GET |
/cloud/files |
Requis |
Lister fichiers (filtres: folder_id, sort, page) |
| POST |
/cloud/files |
Requis |
Upload fichier (multipart) |
| GET |
/cloud/files/:id |
Requis (owner) |
Détail fichier |
| DELETE |
/cloud/files/:id |
Requis (owner) |
Supprimer fichier |
| GET |
/cloud/files/:id/stream |
Requis (owner) |
Stream audio (range requests) |
| POST |
/cloud/files/:id/publish |
Requis (owner) |
Publier comme track |
| GET |
/cloud/folders |
Requis |
Lister dossiers |
| POST |
/cloud/folders |
Requis |
Créer dossier |
| PUT |
/cloud/folders/:id |
Requis (owner) |
Renommer/déplacer dossier |
| DELETE |
/cloud/folders/:id |
Requis (owner) |
Supprimer dossier (+ contenu) |
| GET |
/cloud/quota |
Requis |
Quota utilisateur |
Gear (Lot G1)
| Méthode |
Route |
Auth |
Description |
| POST |
/inventory/gear/:id/images |
Requis (owner) |
Upload image équipement |
| DELETE |
/inventory/gear/:id/images/:img_id |
Requis (owner) |
Supprimer image |
| GET |
/users/:username/gear |
Optionnel |
Gear public d'un utilisateur |
7. Nouvelles pages/composants frontend
| Page/Composant |
Route |
Lot |
| CloudPage |
/cloud |
C1 |
| CloudBrowserView |
— (dans CloudPage) |
C1 |
| CloudUploadModal |
— |
C1 |
| CloudFolderTree |
— |
C1 |
| CloudFilePreview (mini player) |
— |
C1 |
| WaveformDisplay |
— (dans player + TrackDetailPage) |
S1 |
| QualitySelector |
— (dans player) |
S1 |
| GearCategoryFilter |
— (dans GearListView) |
G1 |
| GearImageGallery |
— (dans GearDetailView) |
G1 |
| GearShowcase |
— (dans ProfilePage) |
G1 |
8. Estimation d'effort
| Lot |
Features |
Effort total estimé |
Répartition |
| S1 — HLS production |
5 |
~3 semaines |
60% backend/stream server, 40% frontend |
| C1 — Cloud MVP |
5 |
~3 semaines |
50% backend, 30% frontend, 20% infra (MinIO) |
| G1 — Gear avancé |
4 |
~1 semaine |
50/50 |
Durée totale estimée v0.501 : ~7 semaines (parallélisable à ~5 semaines si S1 et C1 avancent en parallèle)
9. Critères de succès v0.501
| Critère |
Seuil |
| Un track uploadé est jouable en HLS multi-bitrate |
3 qualités sélectionnables |
| ABR fonctionne (bascule automatique de qualité) |
Vérifié sur connexion throttlée |
| Waveform visible dans le player |
Sur 100% des nouveaux tracks |
| Cloud : upload + navigation + preview + publish fonctionnels |
Flux E2E validé |
| Quota stockage respecté |
Upload refusé au-delà du quota |
| Gear : catégories, images, profil public |
Visible sur /u/:username |
| Aucune régression sur les 14 features E2E de v0.404 |
Smoke test staging |
| Score maturité produit estimé |
≥ 5/10 (vs 3/10 post-audit) |
10. Risques v0.501
| Risque |
Probabilité |
Impact |
Mitigation |
| FFmpeg transcoding lent sur gros fichiers |
Élevée |
UX dégradée (upload → playback long) |
Job async + notification quand prêt. Progress bar. Limiter à 200MB initialement. |
| MinIO setup complexe en prod |
Moyenne |
Retard infra |
Commencer avec stockage local en dev, MinIO en staging, S3 en prod. Abstraction storage interface. |
| Quota stockage contournable |
Faible |
Coûts imprévus |
Vérification atomique (transaction DB) avant tout upload. Rate limiting sur upload. |
| Cloud browser UX complexe |
Moyenne |
Feature sous-utilisée |
MVP minimaliste (flat list + 1 niveau dossiers). Tree view en v0.503. |
11. Impact sur les métriques globales
| Métrique |
Avant v0.501 |
Après v0.501 (estimé) |
| Features E2E fonctionnelles |
14 |
~22 (+8) |
| TIER 0 complétude |
44% (83/190) |
~49% (93/190) |
| Score maturité produit |
3/10 |
~5/10 |
| Module 4 (Streaming) |
36% |
~55% |
| Module 9 (Cloud) |
0% |
~30% |
| Module 11 (Gear) |
~40% |
~60% |
12. Référence
13. Roadmap Phase 5 complète (preview)
v0.501 (ce document)
├── S1 — HLS production (transcoding, ABR, cache, monitoring, waveform)
├── C1 — Cloud MVP (upload, browser, preview, publish)
└── G1 — Gear avancé (catégories, images, profil public)
v0.502
├── S2 — Live streaming (Go Live RTMP → HLS, chat live, modération)
└── A1 — Traitement audio (normalisation, trim, fade-in/out, bounce)
v0.503
├── C2 — Cloud partage (partager fichier/dossier, permissions, lien public)
└── C3 — Cloud avancé (versioning fichiers, historique, restore, corbeille)