1060 lines
48 KiB
Markdown
1060 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.*
|