veza/docs/VEZA_PROJECT_DOCUMENTATION.md
senke d5bfe4a558
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
Frontend CI / test (push) Failing after 0s
Storybook Audit / Build & audit Storybook (push) Failing after 0s
docs: add project documentation, logging config, status script
- docs/VEZA_PROJECT_DOCUMENTATION.md
- config/logging.toml
- status.sh utility script

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:36:36 +01:00

1059 lines
48 KiB
Markdown

# Veza — Documentation Complète du Projet
> **Plateforme de streaming musical éthique**
> Version du document : 2026-03-16 | Statut : Production-Ready (v1.0.0-rc1)
---
## Table des matières
1. [Vision et Mission](#1-vision-et-mission)
2. [Pourquoi Veza existe](#2-pourquoi-veza-existe)
3. [Principes fondateurs](#3-principes-fondateurs)
4. [Fonctionnalités de la plateforme](#4-fonctionnalités-de-la-plateforme)
5. [Architecture technique](#5-architecture-technique)
6. [Stack technologique](#6-stack-technologique)
7. [Backend API (Go)](#7-backend-api-go)
8. [Serveur de streaming (Rust)](#8-serveur-de-streaming-rust)
9. [Frontend (React/TypeScript)](#9-frontend-reacttypescript)
10. [Infrastructure et déploiement](#10-infrastructure-et-déploiement)
11. [Sécurité](#11-sécurité)
12. [Modèle économique](#12-modèle-économique)
13. [Parcours utilisateur](#13-parcours-utilisateur)
14. [Conformité et vie privée](#14-conformité-et-vie-privée)
15. [Performance et scalabilité](#15-performance-et-scalabilité)
16. [Historique des versions](#16-historique-des-versions)
17. [Roadmap](#17-roadmap)
18. [Équipe et processus de développement](#18-équipe-et-processus-de-développement)
19. [Glossaire](#19-glossaire)
---
## 1. Vision et Mission
**Veza** est une plateforme de streaming musical conçue pour remettre l'artiste au centre de l'écosystème musical numérique.
### Mission
> Créer une plateforme de streaming musical transparente, équitable et respectueuse — où les créateurs sont rémunérés justement, les utilisateurs ne sont pas manipulés, et la technologie sert la musique plutôt que l'inverse.
### Vision
Dans un paysage dominé par des plateformes qui optimisent l'engagement au détriment des créateurs et des auditeurs, Veza propose une alternative fondée sur trois piliers :
| Pilier | Engagement |
|--------|------------|
| **Équité créateur** | Commission marketplace de 15% (vs 30% industrie), paiements hebdomadaires, analytics détaillés |
| **Respect utilisateur** | Zéro dark pattern, pas de tracking comportemental, flux chronologique |
| **Transparence technologique** | Pas d'algorithme opaque, découverte par tags/genres déclaratifs, métriques de popularité privées |
---
## 2. Pourquoi Veza existe
### Le problème
Les plateformes de streaming actuelles souffrent de défauts structurels :
- **Rémunération dérisoire des artistes** — Les petits créateurs reçoivent des fractions de centimes par écoute, avec des paiements trimestriels.
- **Algorithmes opaques** — Les systèmes de recommandation favorisent les artistes déjà populaires, créant un effet de concentration.
- **Dark patterns UX** — Notifications manipulatrices, FOMO artificiel, friction à la désinscription.
- **Exploitation des données comportementales** — Le comportement des utilisateurs est traqué, analysé et monétisé pour maximiser le temps d'écoute.
- **Gamification addictive** — Streaks, badges, leaderboards transforment l'écoute musicale en jeu compulsif.
### La solution Veza
| Problème | Approche Veza |
|----------|---------------|
| Rémunération insuffisante | Commission de 15%, paiements hebdomadaires (seuil $50) |
| Algorithmes opaques | Feed chronologique, découverte par tags/genres déclaratifs |
| Dark patterns | Aucun FOMO, notifications respectueuses, quiet hours |
| Tracking comportemental | Zéro données comportementales pour le ranking |
| Gamification | Aucun XP, streak, leaderboard, badge |
| Métriques publiques | Likes et play counts visibles uniquement par le créateur |
---
## 3. Principes fondateurs
Ces principes sont inscrits dans le code source et ne peuvent être contournés :
### 3.1 Ce que Veza ne fera JAMAIS
1. **Pas d'IA/ML pour les recommandations** — Pas de TensorFlow, PyTorch, ou scikit-learn. La découverte est humaine.
2. **Pas de blockchain/Web3** — Pas de NFT, smart contracts, ou wallets crypto.
3. **Pas de gamification** — Pas d'XP, de streaks, de leaderboards, de badges ou de niveaux.
4. **Pas de métriques de popularité publiques** — Les compteurs de likes et d'écoutes sont privés (visibles uniquement par le créateur dans ses analytics).
5. **Pas de dark patterns UX** — Pas de FOMO, pas de notifications push manipulatrices, pas de friction à la désinscription.
6. **Pas de données comportementales pour le ranking** — Le feed est chronologique. La découverte est par tags et genres déclarés par l'artiste.
### 3.2 Ce que Veza garantit
- **Transparence totale** sur le fonctionnement de la plateforme
- **Portabilité des données** — Export complet à tout moment (RGPD)
- **Suppression réelle** — Les données sont effectivement supprimées, pas masquées
- **Accessibilité** — Interface WCAG AA compliant, navigation clavier complète
- **Internationalisation** — Disponible en français, anglais et espagnol
---
## 4. Fonctionnalités de la plateforme
### 4.1 Pour les auditeurs
| Fonctionnalité | Description |
|----------------|-------------|
| **Écoute en streaming** | HLS adaptatif (qualité auto-ajustée selon la bande passante) |
| **Recherche unifiée** | Recherche full-text sur les tracks, artistes et playlists (Elasticsearch + fallback PostgreSQL) |
| **Découverte éthique** | Navigation par genres, tags, moods — pas d'algorithme comportemental |
| **Playlists** | Création, édition, collaboration, partage public, import/export (JSON, CSV, M3U) |
| **Playlists collaboratives** | Inviter d'autres utilisateurs à contribuer avec des rôles (viewer, editor, admin) |
| **File d'attente** | Gestion de queue avec drag-and-drop, sessions partagées |
| **Feed chronologique** | Flux des artistes suivis, strictement chronologique |
| **Profils utilisateur** | Avatars, bio, liens, historique d'écoute (privé) |
| **Notifications** | In-app, email digest, préférences granulaires, quiet hours |
| **Chat** | Messagerie temps réel, réactions emoji, mentions, threads |
| **Co-écoute** | Sessions synchronisées d'écoute entre amis |
| **Social** | Follow/unfollow, groupes communautaires, posts |
| **Lecteur avancé** | Vitesse de lecture (0.5x-2x), crossfade, normalisation audio, PiP |
| **PWA** | Application installable, mode offline partiel, contrôles lockscreen |
| **Multi-langue** | Interface en FR, EN, ES avec détection automatique |
### 4.2 Pour les créateurs
| Fonctionnalité | Description |
|----------------|-------------|
| **Upload** | Upload simple ou par chunks (reprise possible), multi-format |
| **Analytics privés** | Écoutes, sources de trafic, données géographiques (anonymisées), devices |
| **Analytics avancés** | Heatmaps d'écoute par track, comparaison de périodes, alertes métriques |
| **Marketplace** | Vente de beats, samples, kits avec système de licences (Basic, Premium, Exclusive) |
| **Distribution** | Distribution vers Spotify, Apple Music, Deezer via partenaire |
| **Formation** | Création et vente de cours avec vidéos HLS, modules, certificats |
| **Live streaming** | Diffusion live via OBS (RTMP), chat intégré, co-hosting |
| **Stems** | Upload et partage de stems individuels pour remixage |
| **Versioning** | Historique de versions des tracks avec restauration |
| **Cloud storage** | Stockage cloud avec dossiers, versioning et partage |
| **Gestion d'équipement** | Inventaire de gear avec photos, documents, historique de réparations |
| **Payouts** | Paiements automatiques hebdomadaires via Stripe Connect |
| **KYC** | Vérification d'identité vendeur via Stripe Identity |
### 4.3 Pour les administrateurs
| Fonctionnalité | Description |
|----------------|-------------|
| **Dashboard admin** | Métriques plateforme, gestion utilisateurs, gestion contenu |
| **Modération** | File de rapports, détection de spam, fingerprinting audio (ACRCloud) |
| **Strikes & appels** | Système de sanctions avec possibilité d'appel |
| **Feature flags** | Activation/désactivation de fonctionnalités en temps réel |
| **Annonces** | Annonces plateforme visibles par tous les utilisateurs |
| **Mode maintenance** | Activation du mode maintenance avec message personnalisé |
| **Audit logs** | Historique complet de toutes les actions admin |
| **Gestion paiements** | Vue d'ensemble des paiements, remboursements |
### 4.4 Pour les développeurs
| Fonctionnalité | Description |
|----------------|-------------|
| **API publique** | API REST documentée (OpenAPI 3.0 / Swagger UI) |
| **Clés API** | Génération de clés avec scopes et rate limits par clé |
| **Webhooks** | Notifications d'événements vers des endpoints externes |
---
## 5. Architecture technique
### 5.1 Vue d'ensemble
```
┌─────────────────────────────────────────────────────────────────┐
│ CLIENTS │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Web App │ │ PWA │ │ API │ │ OBS (RTMP) │ │
│ │ (React) │ │ (Mobile) │ │ Externe │ │ Live Stream │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └──────┬───────┘ │
└───────┼──────────────┼──────────────┼──────────────┼────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌───────────────────────────────────────────────────────────────┐
│ COUCHE API │
│ ┌─────────────────────────────┐ ┌─────────────────────────┐ │
│ │ Backend API (Go/Gin) │ │ Stream Server (Rust) │ │
│ │ │ │ │ │
│ │ • REST API (/api/v1/...) │ │ • HLS Streaming │ │
│ │ • WebSocket (chat, notif) │ │ • Transcodage audio │ │
│ │ • Auth (JWT RS256) │ │ • WebSocket (sync) │ │
│ │ • Rate limiting │ │ • Adaptive bitrate │ │
│ │ • CSRF protection │ │ • Co-écoute │ │
│ │ Port: 8080 │ │ Port: 18082 │ │
│ └──────────┬──────────────────┘ └────────────┬────────────┘ │
└─────────────┼──────────────────────────────────┼──────────────┘
│ │
▼ ▼
┌───────────────────────────────────────────────────────────────┐
│ COUCHE DONNÉES │
│ │
│ ┌──────────────┐ ┌────────┐ ┌───────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ Elasticsearch │ │
│ │ │ │ │ │ (optionnel) │ │
│ │ • 91 tables │ │ • Cache│ │ │ │
│ │ • 144 migr. │ │ • Sess.│ │ • Full-text │ │
│ │ • ACID │ │ • Rate │ │ • Autocomplete│ │
│ │ │ │ • CSRF │ │ • Facettes │ │
│ └──────────────┘ └────────┘ └───────────────┘ │
│ │
│ ┌──────────────┐ ┌────────────────┐ ┌───────────────────┐ │
│ │ RabbitMQ │ │ MinIO / S3 │ │ Nginx-RTMP │ │
│ │ │ │ │ │ │ │
│ │ • Jobs async │ │ • Fichiers │ │ • Ingest RTMP │ │
│ │ • Events │ │ audio │ │ • Output HLS │ │
│ │ • Notif. │ │ • Images │ │ • Live streams │ │
│ │ │ │ • Vidéos cours │ │ │ │
│ └──────────────┘ └────────────────┘ └───────────────────┘ │
│ │
│ ┌──────────────┐ ┌────────────────┐ │
│ │ Prometheus │ │ ClamAV │ │
│ │ + Grafana │ │ │ │
│ │ │ │ • Antivirus │ │
│ │ • Métriques │ │ • Scan uploads │ │
│ │ • Alerting │ │ │ │
│ └──────────────┘ └────────────────┘ │
└───────────────────────────────────────────────────────────────┘
```
### 5.2 Architecture hexagonale (Backend Go)
Le backend suit une architecture hexagonale stricte avec séparation claire des responsabilités :
```
internal/
├── models/ # Entités du domaine (structs Go)
│ # Aucune dépendance externe
├── repositories/ # Interfaces d'accès aux données + implémentations PostgreSQL
│ # Seule couche qui parle à la base de données
├── services/ # Logique métier pure
│ # Accepte context.Context comme 1er paramètre
│ # Dépend des interfaces repository, jamais des implémentations
├── handlers/ # Contrôleurs HTTP (framework Gin)
│ # Validation des entrées, appel des services, formatage des réponses
├── middleware/ # Middlewares transversaux
│ # Auth, CORS, rate limiting, logging, CSRF, audit
└── api/ # Déclaration des routes
# Associe URLs → handlers + middlewares
```
### 5.3 Flux de données
```
Client HTTP Request
[Middleware Chain]
│ CORS → Rate Limit → Auth → CSRF → Audit → Cache Headers
[Handler]
│ Parse request → Validate input → Call service
[Service]
│ Business logic → Call repository → Return result
[Repository]
│ SQL query → Map to model → Return
[Handler]
│ Format response → Set headers → Return JSON
Client HTTP Response
```
---
## 6. Stack technologique
### 6.1 Technologies principales
| Composant | Technologie | Version | Justification |
|-----------|-------------|---------|---------------|
| **Backend API** | Go + Gin | 1.24 | Performance, typage fort, concurrence native |
| **Stream Server** | Rust + Axum + Tokio | 1.35 | Performance maximale, safety mémoire, zero-cost abstractions |
| **Frontend** | React + TypeScript + Vite | 18 / 5+ / 7 | Écosystème mature, typage strict, build rapide |
| **Base de données** | PostgreSQL | 16 | Fiabilité, ACID, full-text search natif |
| **Cache** | Redis | 7 | Rapidité, pub/sub, structures de données riches |
| **Recherche** | Elasticsearch | 8 | Full-text search performant avec tolérance phonétique |
| **Message Queue** | RabbitMQ | 3 | Fiabilité, routing flexible, acknowledgment |
| **Object Storage** | MinIO (dev) / S3 (prod) | — | Standard S3, coût maîtrisé |
| **Paiements** | Hyperswitch + Stripe Connect | — | Multi-PSP, indépendance fournisseur |
| **Live Streaming** | Nginx-RTMP + HLS | — | Standard industrie, compatible OBS |
| **Antivirus** | ClamAV | 1.4 | Scan des uploads, protection contre les malwares |
| **CI/CD** | GitHub Actions | — | Intégration native GitHub, parallelisation |
| **Conteneurs** | Docker + docker-compose | — | Reproductibilité, isolation |
| **Monitoring** | Prometheus + Grafana | — | Métriques temps réel, alerting |
### 6.2 Dépendances Frontend clés
| Bibliothèque | Rôle |
|--------------|------|
| `@tanstack/react-query` | Gestion de l'état serveur (cache, revalidation, déduplication) |
| `zustand` | État client léger et persistant (auth, player, UI) |
| `axios` | Client HTTP avec intercepteurs (refresh token, CSRF, retry) |
| `react-router-dom` | Routing avec lazy loading |
| `i18next` | Internationalisation (3 langues) |
| `react-hook-form` + `zod` | Formulaires typés avec validation runtime |
| `hls.js` | Lecture HLS dans le navigateur |
| `framer-motion` | Animations fluides |
| `recharts` | Graphiques pour les analytics |
| `@radix-ui` | Primitives UI accessibles |
| `@dnd-kit` | Drag-and-drop (playlists) |
| `lucide-react` | Icônes |
### 6.3 Dépendances Stream Server clés (Rust)
| Crate | Rôle |
|-------|------|
| `axum` + `tokio` | Framework web async haute performance |
| `symphonia` | Décodage audio multi-format |
| `hound` | Lecture/écriture WAV |
| `minimp3` | Décodage MP3 |
| `rustfft` + `dasp` | Traitement du signal audio |
| `sqlx` | Accès DB type-safe async |
| `deadpool-redis` | Pool de connexions Redis |
| `lapin` | Client RabbitMQ |
| `metrics` + `tracing` | Observabilité (Prometheus + logs structurés) |
---
## 7. Backend API (Go)
### 7.1 Surface API
Le backend expose **120+ endpoints REST** organisés en **26 groupes de routes**, tous préfixés par `/api/v1/` :
| Groupe | Endpoints | Description |
|--------|-----------|-------------|
| **Auth** | 20+ | Inscription, connexion, 2FA, OAuth, WebAuthn, sessions |
| **Tracks** | 40+ | Upload, métadonnées, likes, reposts, commentaires, stems, HLS |
| **Users** | 25+ | Profils, follow, block, avatar, export RGPD, présence |
| **Playlists** | 20+ | CRUD, collaboration, partage, analytics, export multi-format |
| **Search** | 2 | Recherche unifiée + autocomplete |
| **Marketplace** | 30+ | Produits, commandes, licences, reviews, wishlist, panier |
| **Subscriptions** | 8 | Plans, abonnement, facturation, annulation |
| **Analytics** | 20+ | Statistiques créateur, heatmaps, comparaisons, alertes |
| **Social** | 15+ | Feed, posts, groupes, likes, commentaires |
| **Distribution** | 6 | Soumission aux plateformes, suivi, royalties |
| **Education** | 20+ | Cours, leçons, inscriptions, certificats |
| **Live** | 8 | Streams live, clé RTMP, callbacks |
| **Chat** | 12 | Conversations, membres, messagerie temps réel |
| **Notifications** | 7 | In-app, préférences, push web |
| **Cloud** | 15+ | Fichiers, dossiers, versioning, partage |
| **Modération** | 10+ | Reports, spam, fingerprints, strikes, appels |
| **Admin** | 15+ | Utilisateurs, contenu, paiements, feature flags |
| **Developer** | 3 | Clés API, gestion |
| **Discover** | 6 | Genres, tags, playlists éditoriales |
| **Feed** | 1 | Feed chronologique |
| **Co-listening** | 3 | Sessions synchronisées |
| **Queue** | 8 | File d'attente de lecture |
| **Gear** | 12 | Inventaire d'équipement |
| **Core** | 15+ | Health, metrics, uploads, audit, CSRF |
### 7.2 Formats de réponse
**Réponse standard :**
```json
{
"data": { ... },
"message": "Track created successfully"
}
```
**Pagination :**
```json
{
"data": [ ... ],
"pagination": {
"page": 1,
"limit": 20,
"total": 150,
"total_pages": 8
}
}
```
**Erreur :**
```json
{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Track with ID 123 not found",
"context": { "track_id": "123" }
}
}
```
### 7.3 Entités de base de données
**91 entités** réparties en domaines :
| Domaine | Entités principales |
|---------|-------------------|
| **Utilisateurs** | User, Session, RefreshToken, MFAConfig, WebAuthnCredential, FederatedIdentity, UserSettings, UserPresence |
| **Audio** | Track, TrackVersion, TrackStem, TrackPlay, TrackLike, TrackRepost, TrackComment, HLSStream, WaveformData |
| **Playlists** | Playlist, PlaylistTrack, PlaylistCollaborator, PlaylistFollow, PlaylistShareLink |
| **Marketplace** | Product, Order, OrderItem, License, Review, SellerStripeAccount, SellerTransfer, Royalty |
| **Abonnements** | SubscriptionPlan, Subscription |
| **Social** | Room, ChatMessage, MessageReaction, Post, Group |
| **Analytics** | PlaybackAnalytics, DailyTrackStats, CreatorAnalytics, AdvancedAnalytics |
| **Modération** | Report, Strike, Appeal, ModerationAnalytics |
| **Éducation** | Course, Lesson, CourseEnrollment, Certificate |
| **Cloud** | UserFile, UserFolder, CloudFileVersion, CloudFileShare, StorageQuota |
| **Administration** | AuditLog, FeatureFlag, Announcement, APIKey |
| **Distribution** | DistributionPlatform, Distribution |
| **Live** | LiveStream |
| **Équipement** | Gear, GearImage, GearDocument, GearRepair |
---
## 8. Serveur de streaming (Rust)
### 8.1 Rôle
Le serveur de streaming est un composant haute performance dédié à :
- La **diffusion audio** en streaming adaptatif (HLS)
- Le **transcodage** des fichiers audio (upload → multiples qualités)
- La **synchronisation temps réel** pour la co-écoute
- Le **cache** intelligent des segments audio
### 8.2 Codecs supportés
| Codec | Bitrate | Latence | Usage |
|-------|---------|---------|-------|
| **Opus** | 6-512 kbps | 2.5ms | Live, co-écoute (ultra-basse latence) |
| **AAC** | 32-320 kbps | 20ms | iOS/Safari, compatibilité universelle |
| **MP3** | 32-320 kbps | 26ms | Compatibilité legacy |
| **FLAC** | 700 kbps-1.4 Mbps | 40ms | Qualité lossless (premium) |
### 8.3 Pipeline de transcodage
```
Upload audio (WAV/MP3/FLAC/...)
[Décodage] → PCM samples (via Symphonia)
[Traitement] → Normalisation, effets, EQ
[Encodage multi-qualité]
├── Opus 128kbps (standard)
├── AAC 256kbps (haute qualité)
├── MP3 320kbps (compatibilité)
└── FLAC (lossless, premium)
[Segmentation HLS] → Segments .ts + playlist .m3u8
[Cache LRU] → Segments fréquemment demandés en mémoire
```
### 8.4 Architecture de concurrence
- **Runtime async** : Tokio (multi-thread, work-stealing)
- **Pool de workers** : 1 worker par core CPU pour le transcodage
- **Connexions concurrentes** : DashMap (lock-free concurrent HashMap)
- **WebSocket** : Gestion simultanée de milliers de connexions
- **Rate limiting** : Token bucket (governor crate)
---
## 9. Frontend (React/TypeScript)
### 9.1 Design System SUMI
Le frontend utilise **SUMI v2.0**, un design system propriétaire conçu pour l'éthique et l'accessibilité :
**Palette de couleurs :**
- **Fonds** : Void (#0c0c0f) → Raised (#1a1a1f) → Overlay (#222228)
- **Texte** : Primary (#f0ede8) → Secondary (#a8a4a0) → Tertiary (#706c68)
- **Accent** : Bleu (#7c9dd6) — Actions principales
- **Vermillion** : Rouge (#d4634a) — Erreurs, actions destructives
- **Sage** : Vert (#7a9e6c) — Succès, confirmations
- **Gold** : Jaune (#c9a84c) — Avertissements
**Typographie :**
- Titres : Space Grotesk
- Corps : Inter
- Code : JetBrains Mono
- Éditorial : Noto Serif JP
**Accessibilité :**
- Conforme WCAG AA
- Labels ARIA sur tous les composants interactifs
- Navigation clavier complète (Tab, Enter, Escape)
- Focus visible sur tous les éléments interactifs
### 9.2 Modules fonctionnels
Le frontend est organisé en **37 modules fonctionnels** indépendants dans `/src/features/` :
```
features/
├── auth/ # Login, register, 2FA, sessions, email verification
├── player/ # Lecteur audio global, contrôles, queue, waveform
├── tracks/ # Pages de tracks, cards, commentaires, upload
├── playlists/ # Gestion playlists, collaboration, export
├── search/ # Recherche unifiée, autocomplete
├── dashboard/ # Page d'accueil, stats, activité récente
├── discover/ # Navigation par genres/tags/moods
├── library/ # Bibliothèque personnelle
├── notifications/ # Centre de notifications
├── chat/ # Messagerie temps réel
├── profile/ # Profil utilisateur
├── settings/ # Préférences, thème, langue, confidentialité
├── marketplace/ # Vente/achat de beats et samples
├── seller/ # Dashboard vendeur
├── checkout/ # Flux de paiement
├── analytics/ # Analytics créateur
├── distribution/ # Distribution externe
├── education/ # Cours et formations
├── live/ # Live streaming
├── social/ # Follow, like, feed
├── cloud/ # Stockage cloud
├── admin/ # Administration plateforme
├── developer/ # Dashboard développeur, webhooks
├── subscription/ # Gestion abonnement premium
├── ... # Et plus encore
```
### 9.3 Gestion d'état
| Couche | Technologie | Usage |
|--------|-------------|-------|
| **État serveur** | React Query (TanStack) | Tracks, playlists, profils, notifications — cache, revalidation, déduplication |
| **État client** | Zustand (persist) | Auth, player, UI (sidebar, thème, langue) |
| **État formulaires** | React Hook Form + Zod | Validation runtime typée |
| **Temps réel** | WebSocket + Broadcast Channel | Synchronisation cross-tabs, chat, notifications |
### 9.4 Lecteur audio
Le lecteur audio est un composant central de l'application :
- **HLS adaptatif** via hls.js (qualité auto-ajustée)
- **Contrôles** : play/pause, seek, volume, mute, next/previous
- **Fonctionnalités avancées** : vitesse de lecture (0.5x-2x), crossfade, normalisation audio
- **Media Session API** : Contrôles lockscreen (mobile)
- **WakeLock** : Empêche la mise en veille pendant la lecture
- **Picture-in-Picture** : Mini-lecteur flottant
- **Queue partagée** : Sessions de queue synchronisées entre utilisateurs
- **Raccourcis clavier** : Espace (play), flèches (seek), V (volume), > (suivant)
---
## 10. Infrastructure et déploiement
### 10.1 Services Docker
| Service | Image | Mémoire | Port | Rôle |
|---------|-------|---------|------|------|
| **PostgreSQL** | postgres:16 | 256 MB | 5432 | Base de données principale |
| **Redis** | redis:7-alpine | 64 MB | 6379 | Cache, sessions, rate limit |
| **RabbitMQ** | rabbitmq:3-management | 512 MB | 5672/15672 | Message queue + dashboard |
| **ClamAV** | clamav/clamav:1.4 | 512 MB | 3310 | Antivirus scan des uploads |
| **MinIO** | minio/minio | 256 MB | 9000/9001 | Object storage (dev) |
| **Nginx-RTMP** | custom | 128 MB | 1935/8088 | Ingest RTMP + HLS live |
| **Backend API** | go:1.24 | variable | 8080 | API REST |
| **Stream Server** | rust:latest | variable | 18082 | Streaming audio |
### 10.2 Environnements
| Environnement | Description | Commande |
|---------------|-------------|----------|
| **Local** | Tous les services via Docker | `make dev` |
| **Dev** | Backend Docker + frontend Vite local | `make dev-backend-api` |
| **Staging** | Validation pré-production (Lighthouse, k6, RGPD) | CI/CD auto |
| **Production** | SSL, limites ressources, health checks | `docker-compose.prod.yml` |
### 10.3 Health Checks
| Service | Endpoint | Méthode |
|---------|----------|---------|
| Backend API | `GET /api/v1/health` | HTTP 200 |
| Backend API (deep) | `GET /api/v1/health/deep` | Vérifie toute l'infra |
| Stream Server | `GET /health` | HTTP 200 |
| PostgreSQL | `pg_isready` | CLI |
| Redis | `redis-cli ping` | CLI |
| RabbitMQ | `rabbitmq-diagnostics ping` | CLI |
### 10.4 Monitoring
- **Prometheus** : Collecte des métriques depuis `/metrics` (protégé par token bearer)
- **Grafana** : Dashboards de visualisation et alerting
- **Sentry** : Tracking d'erreurs (frontend et backend)
- **Logs structurés JSON** : `level`, `time`, `msg`, `request_id`, `user_id`
---
## 11. Sécurité
### 11.1 Authentification multi-couches
| Méthode | Description |
|---------|-------------|
| **JWT RS256** | Tokens signés avec clé RSA (rotation de clés supportée) |
| **2FA TOTP** | Authentification à deux facteurs via app (Google Authenticator, Authy) |
| **WebAuthn/Passkeys** | Authentification sans mot de passe (FIDO2) |
| **OAuth** | Connexion via Google, GitHub, Discord, Spotify |
| **Codes de récupération** | Codes backup pour la 2FA |
### 11.2 Protections actives
| Protection | Détail |
|------------|--------|
| **Rate limiting** | Par IP (global), par utilisateur, par endpoint, par clé API |
| **CSRF** | Tokens double-submit cookie, validation sur les requêtes mutatives |
| **CORS** | Whitelist d'origines en production |
| **CSP** | Content Security Policy stricte |
| **Account lockout** | 5 tentatives → verrouillage 30 min |
| **Password history** | Empêche la réutilisation des derniers mots de passe |
| **Token blacklist** | Révocation immédiate des JWT via Redis |
| **ClamAV** | Scan antivirus de tous les fichiers uploadés |
| **Audit logging** | Journalisation de toutes les actions sensibles |
| **Signed URLs** | URLs S3 signées avec expiration pour les fichiers privés |
### 11.3 Audit de sécurité
Le projet a subi un **pentest complet** (v0.12.6) :
- **36 findings identifiés** sur 36 fichiers
- **36/36 findings remédiés**
- Conformité **ASVS Level 2** (OWASP Application Security Verification Standard)
- Suppression de modules fantômes et patterns non-éthiques
---
## 12. Modèle économique
### 12.1 Sources de revenus
```
┌─────────────────────────────────────────────────────────────┐
│ SOURCES DE REVENUS │
│ │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ MARKETPLACE │ │ ABONNEMENTS │ │
│ │ │ │ │ │
│ │ Commission 15% │ │ Creator $5.99/mo │ │
│ │ sur chaque │ │ Premium $9.99/mo │ │
│ │ vente │ │ │ │
│ └─────────────────┘ └──────────────────┘ │
│ │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ DISTRIBUTION │ │ FORMATIONS │ │
│ │ │ │ │ │
│ │ Commission sur │ │ Commission sur │ │
│ │ les royalties │ │ les ventes de │ │
│ │ externes │ │ cours │ │
│ └─────────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 12.2 Plans d'abonnement
| Plan | Prix | Fonctionnalités |
|------|------|----------------|
| **Free** | $0 | Écoute en streaming, playlists, recherche, feed, chat |
| **Creator** | $5.99/mois | Upload illimité, analytics avancés, marketplace, distribution |
| **Premium** | $9.99/mois | Qualité FLAC, téléchargements, pas de pub, remise 10% marketplace |
- Essai gratuit de 14 jours pour Creator et Premium
- Facturation via Stripe (mensuelle ou annuelle)
- Annulation en un clic, sans friction
### 12.3 Marketplace
| Aspect | Détail |
|--------|--------|
| **Produits** | Beats, samples, kits, presets |
| **Licences** | Basic, Premium, Exclusive (prix croissant) |
| **Commission** | 15% (vs 30% standard industrie) |
| **Paiements vendeurs** | Hebdomadaires automatiques (seuil $50) ou manuels (seuil $100) |
| **Processeur** | Hyperswitch (Stripe + PayPal) |
| **KYC** | Vérification d'identité obligatoire pour les vendeurs (Stripe Identity) |
### 12.4 Comparaison avec la concurrence
| Aspect | Veza | Spotify | SoundCloud | Bandcamp |
|--------|------|---------|------------|----------|
| Commission marketplace | **15%** | N/A | 45% | 15% |
| Fréquence paiements | **Hebdo** | Mensuel | Mensuel | Instantané |
| Métriques publiques | **Non** | Oui | Oui | Partiel |
| Dark patterns | **Aucun** | Oui | Oui | Limité |
| Algorithme comportemental | **Non** | Oui | Oui | Non |
| Export données | **Complet** | Limité | Limité | Limité |
| Open API | **Oui** | Oui | Oui | Non |
---
## 13. Parcours utilisateur
### 13.1 Auditeur
```
1. Inscription
├── Email + mot de passe
├── Vérification email
└── (optionnel) Activation 2FA
2. Découverte
├── Explorer par genres / tags / moods
├── Recherche unifiée
└── Feed chronologique des artistes suivis
3. Écoute
├── Clic sur un track → streaming HLS
├── Player bar : artwork, titre, artiste, progress, contrôles
├── Queue : ajouter, réordonner, sessions partagées
└── Raccourcis clavier pour toutes les actions
4. Organisation
├── Créer des playlists
├── Inviter des collaborateurs
├── Partager des playlists publiques
└── Exporter (JSON, CSV, M3U)
5. Social
├── Suivre des artistes
├── Rejoindre des groupes
├── Commenter des tracks
└── Chat avec d'autres utilisateurs
6. Marketplace
├── Acheter des beats / samples / kits
├── Choisir une licence (Basic / Premium / Exclusive)
└── Télécharger les produits achetés
```
### 13.2 Créateur
```
1. Passer au plan Creator ($5.99/mois)
2. Upload
├── Upload de tracks (drag-and-drop ou parcourir)
├── Métadonnées : titre, genre, tags, description, lyrics
├── Transcodage automatique multi-qualité
└── Upload de stems pour remix
3. Analytics (privés)
├── Nombre d'écoutes, sources de trafic
├── Données géographiques (anonymisées)
├── Heatmaps d'écoute
├── Comparaison de périodes
└── Alertes métriques personnalisées
4. Marketplace (vente)
├── Créer des produits (beats, samples, kits)
├── Définir les prix par licence
├── Suivre les ventes et revenus
└── Recevoir les paiements (hebdomadaires)
5. Distribution
├── Soumettre sur Spotify, Apple Music, Deezer
├── Suivre le statut de distribution
└── Voir les royalties externes
6. Live Streaming
├── Configurer OBS avec la clé RTMP
├── Lancer un live
└── Interagir avec le chat en direct
7. Formation
├── Créer des cours avec modules vidéo
├── Suivre les inscriptions
└── Délivrer des certificats
```
---
## 14. Conformité et vie privée
### 14.1 RGPD (Règlement Général sur la Protection des Données)
| Droit | Implémentation |
|-------|----------------|
| **Droit d'accès** | `GET /users/me/export` — Export JSON de toutes les données |
| **Droit à la portabilité** | `POST /users/me/export` — Export ZIP asynchrone complet |
| **Droit à l'effacement** | `DELETE /users/me` — Suppression du compte avec période de grâce de 30 jours |
| **Droit d'opposition** | Préférences de notifications granulaires, opt-out marketing |
| **Minimisation des données** | Seules les données nécessaires sont collectées |
### 14.2 CCPA (California Consumer Privacy Act)
- Endpoint dédié : `POST /users/me/privacy/opt-out`
- Opt-out du partage/vente de données personnelles (Veza ne vend pas de données, mais le mécanisme est prévu)
### 14.3 Politique de confidentialité des données
- **Géolocalisation** : Anonymisée au niveau pays (pas de ville ni d'IP stockée)
- **Analytics** : Agrégées à minimum 10 utilisateurs (pas de profiling individuel)
- **Données comportementales** : NON utilisées pour le ranking ou les recommandations
- **Cookies** : Uniquement fonctionnels (auth, CSRF) — aucun cookie de tracking tiers
- **Chiffrement** : Tokens OAuth chiffrés AES-256-GCM, passwords hashés bcrypt
---
## 15. Performance et scalabilité
### 15.1 Objectifs de performance
| Métrique | Cible |
|----------|-------|
| Temps de réponse API (p95) | < 100ms |
| Lighthouse Performance | >= 85 |
| Lighthouse Accessibility | >= 90 |
| Time to First Byte (TTFB) | < 200ms |
| First Contentful Paint (FCP) | < 1.5s |
| Largest Contentful Paint (LCP) | < 2.5s |
| Utilisateurs concurrents (charge) | 1000+ (validé par k6) |
### 15.2 Stratégies de performance
| Stratégie | Détail |
|-----------|--------|
| **Cache Redis** | Résultats fréquents cachés avec invalidation intelligente |
| **CDN** | Assets statiques servis via CDN avec cache longue durée |
| **Code splitting** | Routes lazy-loaded, vendor chunks séparés |
| **HLS adaptatif** | Qualité audio ajustée automatiquement selon la bande passante |
| **Cache LRU audio** | Segments audio fréquents en mémoire sur le stream server |
| **Index DB** | Index PostgreSQL optimisés (144 migrations incluant les index de performance) |
| **Pool de connexions** | Connexions DB/Redis poolées et réutilisées |
| **Compression** | gzip/brotli/zstd sur les réponses HTTP |
### 15.3 Scalabilité horizontale
```
Load Balancer
┌───────────┐
│ Nginx / │
│ HAProxy │
└─────┬─────┘
┌───────────┼───────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ API #1 │ │ API #2 │ │ API #3 │ ← Stateless, scale horizontal
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────┐
│ PostgreSQL (primary) │
│ + Read Replicas (optionnel) │
└─────────────────────────────────┘
┌────┴────┐
│ Redis │ ← Sessions, cache, rate limit (distribué)
└─────────┘
```
---
## 16. Historique des versions
### Phase P3.5 — Consolidation & Sécurité (v0.9.x)
| Version | Nom | Contenu principal |
|---------|-----|-------------------|
| v0.9.1 | Migration JWT RS256 | Rotation de clés, migration HS256 RS256 |
| v0.9.2 | Sécurité Infrastructure | Rate limiting, CSP headers, protection /metrics |
| v0.9.3 | Standardisation Toolchain | Node 20, Rust stable, Makefile unifié |
| v0.9.4 | Quality Gates CI/CD | Coverage enforcement, linting, build validation |
| v0.9.5 | Nettoyage Code | Suppression AI/ML, blockchain, gamification |
| v0.9.6-9.7 | Chat complet | Réactions, mentions, fichiers, threads, groupes |
| v0.9.8-9.9 | Dette technique | Error handling, context propagation, goroutines |
### Phase P4R — Social & Live (v0.10.x)
| Version | Nom | Contenu principal |
|---------|-----|-------------------|
| v0.10.0 | Système Follow | Follow/unfollow, feed chronologique |
| v0.10.1 | Découverte Éthique | Tags, genres, pas de ranking comportemental |
| v0.10.2 | Recherche Elasticsearch | Full-text search, tolérance phonétique |
| v0.10.3 | Interactions Sociales | Commentaires, likes (privés), reposts, notifications |
| v0.10.4 | Playlists Collaboratives | Collaboration, import/export, playlists éditoriales |
| v0.10.5 | Notifications | In-app, email digest, préférences, quiet hours |
| v0.10.6 | Live Streaming | RTMP ingest, HLS distribution, chat live |
| v0.10.7 | Collaboration Temps Réel | Co-écoute, stems, rooms collaboratives |
| v0.10.8 | Portabilité Données | Export ZIP, suppression compte, grâce 30 jours |
### Phase P5R — Analytics & Modération (v0.11.x)
| Version | Nom | Contenu principal |
|---------|-----|-------------------|
| v0.11.0 | Analytics Créateur | Écoutes privées, géo anonymisée, sources |
| v0.11.1 | Analytics Avancés | Heatmaps, comparaison périodes, alertes |
| v0.11.2 | Modération | Reports, spam déterministe, fingerprinting ACRCloud |
| v0.11.3 | Admin Plateforme | Dashboard admin, gestion users/content/paiements |
### Phase P6R — Premium & Infrastructure (v0.12.x)
| Version | Nom | Contenu principal |
|---------|-----|-------------------|
| v0.12.0 | Marketplace | Produits, licences, checkout Hyperswitch |
| v0.12.1 | Abonnements | Free/Creator/Premium, Stripe, trial 14j |
| v0.12.2 | Distribution | Spotify/Apple/Deezer via API partenaire |
| v0.12.3 | Formation | Cours vidéo HLS, modules, certificats |
| v0.12.4 | Performance | CDN, Redis cache, query optimization, k6 |
| v0.12.5 | PWA | Service Worker offline, manifest, Media Session |
| v0.12.6 | Pentest | 36 findings fixés, ASVS Level 2 |
### Phase P7 — Conformité & Polish (v0.13.x)
| Version | Nom | Contenu principal |
|---------|-----|-------------------|
| v0.12.7 | i18n | FR/EN/ES, 532+ clés par langue |
| v0.12.8 | API Publique | OpenAPI/Swagger, clés API avec scopes |
| v0.12.9 | Tests Éthiques | Bias checks, artistes émergents visibles |
| v0.13.0 | Features Complètes | SMS 2FA, CAPTCHA Turnstile, password history |
| v0.13.1 | Audio Avancé | Gapless, crossfade, normalisation |
| v0.13.2 | Design System | SUMI consolidé, design tokens, Storybook |
| v0.13.3 | Sécurité Polish | WebAuthn/Passkeys, IP geolocation |
| v0.13.4 | Audio Polish | PiP, Chromecast, visualizers |
| v0.13.5 | Marketplace Polish | KYC Stripe Identity, E2E testing |
### Phase Validation (v0.14.x → v1.0.0)
| Version | Nom | Contenu principal |
|---------|-----|-------------------|
| v0.14.0 | Staging Validation | Lighthouse, k6 load test, flux RGPD |
| v1.0.0-rc1 | Release Candidate | GO/NO-GO checklist, dark pattern audit, privacy policy |
| **v1.0.0** | **Release Stable** | **Prêt pour le lancement public** |
---
## 17. Roadmap
### Statut actuel
- **39 versions implémentées** (v0.9.1 v1.0.0-rc1)
- **v1.0.0-rc1 tagué et testé** en attente de validation business finale
- Le code est **production-ready**
### Prochaines étapes
1. **v1.0.0 — Lancement public**
- Validation finale du GO/NO-GO checklist
- Déploiement en production
- Monitoring de stabilité 48h sur staging
2. **Post-lancement (v1.x)**
- Retours utilisateurs et itérations
- Expansion géographique (nouvelles langues)
- Partenariats avec des labels indépendants
- Application mobile native (si demande validée)
---
## 18. Équipe et processus de développement
### 18.1 Organisation du code
Le projet est un **monorepo** organisé comme suit :
```
veza/
├── apps/web/ # Frontend React/TypeScript
├── veza-backend-api/ # Backend Go (API principale)
├── veza-stream-server/ # Serveur de streaming Rust
├── veza-common/ # Utilitaires partagés
├── ORIGIN/ # Spécifications (read-only)
├── docs/ # Documentation technique
├── make/ # Modules Makefile
├── docker-compose.yml # Orchestration Docker
└── .github/workflows/ # CI/CD GitHub Actions
```
### 18.2 Processus de développement
| Étape | Détail |
|-------|--------|
| **Spécification** | Fichiers ORIGIN/ (read-only, source de vérité) |
| **Planification** | Roadmap versionnée dans VEZA_VERSIONS_ROADMAP.md |
| **Branching** | Feature branches (`feat/v{VERSION}-{nom}`) |
| **Développement** | Architecture hexagonale, TDD, code review |
| **Tests** | Unitaires (Go, TS, Rust) + E2E (Playwright) + Load (k6) |
| **CI/CD** | GitHub Actions : lint, test, build, coverage |
| **Déploiement** | Docker-compose, staging validation, production |
### 18.3 Qualité du code
| Métrique | Valeur |
|----------|--------|
| **Backend Go** | ~160,000 lignes, TypeScript strict |
| **Frontend** | ~37,000 lignes, TypeScript strict |
| **Migrations SQL** | 144 fichiers |
| **Coverage Go** | >= 70% (enforced CI) |
| **Coverage Rust** | >= 50% (enforced CI) |
| **Linting** | golangci-lint (Go), ESLint (TS), cargo clippy (Rust) |
### 18.4 Commandes de développement
```bash
make dev # Démarre l'environnement complet
make test # Lance tous les tests
make lint # Linting strict
make build # Build complet
make migrate-up # Applique les migrations
make doctor # Vérifie les dépendances
make infra-up-dev # Lance l'infrastructure (Postgres, Redis, etc.)
```
---
## 19. Glossaire
| Terme | Définition |
|-------|------------|
| **ASVS** | Application Security Verification Standard — standard OWASP pour la vérification de sécurité des applications |
| **Dark pattern** | Technique de design UX qui manipule l'utilisateur pour qu'il agisse contre son intérêt |
| **Feed chronologique** | Flux d'actualités ordonné par date de publication (sans algorithme de ranking) |
| **HLS** | HTTP Live Streaming — protocole de streaming adaptatif développé par Apple |
| **Hyperswitch** | Routeur de paiement open-source permettant de connecter plusieurs processeurs (Stripe, PayPal) |
| **KYC** | Know Your Customer — vérification d'identité obligatoire pour les vendeurs |
| **Marketplace** | Place de marché intégrée pour la vente de beats, samples, kits et cours |
| **ORIGIN** | Dossier de spécifications read-only qui définit les règles immuables du projet |
| **Pentest** | Test de pénétration — audit de sécurité simulant des attaques |
| **PWA** | Progressive Web App — application web installable avec fonctionnalités offline |
| **RGPD** | Règlement Général sur la Protection des Données (règlement européen) |
| **RTMP** | Real-Time Messaging Protocol — protocole pour le live streaming (ingest depuis OBS) |
| **SUMI** | Design system propriétaire de Veza (couleurs, typographie, composants) |
| **Stem** | Piste audio isolée (voix, batterie, basse, etc.) permettant le remixage |
| **Stripe Connect** | Plateforme de paiement pour les marketplaces (paiements aux vendeurs) |
---
## Chiffres clés
| Métrique | Valeur |
|----------|--------|
| Lignes de code total | ~200,000+ |
| Endpoints API | 120+ |
| Entités base de données | 91 |
| Services backend | 130+ |
| Middlewares | 20+ |
| Modules frontend | 37 |
| Migrations SQL | 144 |
| Versions implémentées | 39 |
| Langues supportées | 3 (FR, EN, ES) |
| Findings pentest remédiés | 36/36 |
| Codecs audio supportés | 4 (Opus, AAC, MP3, FLAC) |
---
*Document généré le 2026-03-16. Pour toute question technique, consultez le code source et les fichiers ORIGIN/ du repository.*