Files
roadwave/docs/regles-metier/11-creation-publication-contenu.md
2026-01-31 11:45:11 +01:00

286 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 4. Création et publication de contenu
### 4.1 Upload et encodage
**Décision** : Formats universels avec encodage asynchrone
**Formats acceptés** :
- ✅ MP3 (`.mp3`)
- ✅ AAC (`.aac`, `.m4a`)
- ❌ WAV, FLAC (trop lourds, inutiles en voiture)
**Limites** :
| Paramètre | Valeur | Justification |
|-----------|--------|---------------|
| **Taille maximale** | 200 MB | ~4h de podcast à 128 kbps |
| **Durée maximale** | 4 heures | Suffisant pour podcasts longs |
| **Validation format** | Client + backend | Double sécurité |
**Pipeline d'encodage** :
```
1. Upload fichier (MP3/AAC) → OVH Object Storage temporaire
2. Job asynchrone (worker Go + FFmpeg) :
- Validation format et intégrité
- Réencodage Opus 3 profils (24/48/64 kbps)
- Génération segments HLS (.m3u8 + .ts)
- Génération image couverture par défaut
3. Suppression fichier original (économie stockage)
4. Notification créateur : "Contenu prêt à publier"
```
**Temps d'encodage estimé** :
- Contenu 5 min → ~30 secondes
- Podcast 1h → ~5 minutes
- Podcast 4h → ~20 minutes
**Profils Opus générés** :
| Qualité | Bitrate | Usage |
|---------|---------|-------|
| Basse | 24 kbps | 2G/Edge |
| Standard | 48 kbps | 3G (défaut) |
| Haute | 64 kbps | 4G/5G |
**Écoute accélérée** :
| Vitesse | Usage |
|---------|-------|
| 0.75x | Compréhension difficile (accent, technique) |
| 1.0x | Normal (défaut) |
| 1.25x | Gain léger |
| 1.5x | Podcasts longs |
| 2.0x | Survol rapide (modérateurs) |
**Disponible pour** :
- ✅ Modérateurs (validation rapide : 30s → 15s à 2x)
- ✅ Auditeurs (tous les contenus)
- ✅ Standard industrie (YouTube, Spotify, Apple Podcasts)
**Justification** :
- **Simplicité** : 2 formats couvrent 95% des cas d'usage
- **Coût optimisé** : pas de conversion WAV/FLAC lourds
- **Stockage réduit** : suppression original après encodage
- **Scalabilité** : workers horizontalement (Kubernetes jobs)
- **Productivité** : écoute accélérée = double productivité modération
---
### 4.2 Métadonnées obligatoires
**Décision** : Minimaliste pour réduire friction
**Champs obligatoires** :
| Champ | Format | Validation |
|-------|--------|------------|
| **Titre** | 5-100 caractères | Alphanumérique + ponctuation basique |
| **Type géo** | Enum | Ancré / Contextuel / Neutre |
| **Zone diffusion** | Composite | Voir détails ci-dessous |
| **Tags** | Enum | 1 à 3 parmi liste prédéfinie |
| **Classification âge** | Enum | Tout public / 13+ / 16+ / 18+ |
**Zone de diffusion (obligatoire)** :
Options mutuellement exclusives :
- **Point GPS** : latitude + longitude + rayon (100m à 10km)
- **Ville** : sélection dans référentiel INSEE
- **Département** : sélection liste
- **Région** : sélection liste
- **National** : France entière
**Tags disponibles** (1 à 3 obligatoires) :
- Automobile
- Voyage
- Famille
- Amour
- Musique
- Économie
- Cryptomonnaie
- Politique
- Culture générale
- Sport
- Technologie
- Santé
**Champs optionnels** :
- ❌ Description (ajout ultérieur)
- ❌ Image couverture (génération auto)
**Image de couverture par défaut** :
Génération automatique selon règles :
- Icône selon type géo : 📍 Ancré / 🌍 Contextuel / 🎧 Neutre
- Couleur selon tag principal : bleu (Auto), vert (Voyage), rouge (Musique), etc.
- Format 800×800px, PNG
- Personnalisable ultérieurement (post-MVP)
**Exemple de publication** :
```
Titre : "Histoire de la Tour Eiffel"
Type géo : Ancré
Zone : Point GPS (48.8584, 2.2945, rayon 500m)
Tags : Voyage, Culture générale
Classification : Tout public
→ Image auto : 📍 fond bleu-vert (Voyage)
```
**Justification** :
- **Friction minimale** : 5 champs max = 2 min de publication
- **Publication rapide** : pas de blocage sur description/image
- **Coût 0** : pas de génération IA au MVP
- **Évolutif** : champs optionnels ajoutables ultérieurement
---
### 4.3 Validation des 3 premiers contenus
**Décision** : Validation manuelle par équipe modération RoadWave
**Processus nouveau créateur** :
1. Créateur upload ses 3 premiers contenus
2. Contenus passent en **file d'attente modération**
3. Modérateur junior RoadWave :
- Écoute 30 secondes (ou 15s à 2x)
- Vérifie métadonnées
- Valide ou rejette avec raison
4. Si accepté : contenu publié + notification créateur
5. Si refusé : notification avec raison détaillée + lien vers règles
6. Après 3 contenus validés : créateur passe en **statut vérifié**
**Critères de validation** :
| Critère | Détails |
|---------|---------|
| **Qualité audio** | Compréhensible (pas de grésillement excessif) |
| **Respect règles** | Pas de contenu prohibé évident (haine, spam, illégal) |
| **Classification âge** | Cohérente avec contenu écouté |
| **Tags pertinents** | Correspondance minimale avec contenu |
| **Zone diffusion** | Cohérente (pas "Tour Eiffel" avec zone "National") |
**Délai de validation** :
- Objectif : **24-48h** (jours ouvrés)
- Priorité : FIFO (First In First Out)
- Weekend : délai peut atteindre 72h
- Message au créateur : "Validation en cours, délai estimé 24-48h"
**Notification créateur** :
**Si accepté** :
- Email + push : "✅ Votre contenu '[Titre]' est en ligne !"
- Lien direct vers le contenu
- Compteur : "2/3 contenus validés pour devenir créateur vérifié"
**Si refusé** :
- Email + push : "❌ Contenu '[Titre]' refusé"
- Raison détaillée : "Qualité audio insuffisante" / "Tags non pertinents" / "Classification incorrecte" / etc.
- Lien vers règles de publication
- Possibilité de correction + resoumission
**Après 3 validations** :
Créateur obtient **statut "Vérifié"** :
- Badge ✓ visible sur profil
- Contenus futurs publiés **immédiatement** (modération a posteriori uniquement)
- Modération seulement si signalé par utilisateurs
**Outils modérateur** :
- Écoute accélérée (1.5x ou 2x) = double productivité
- Interface dédiée : queue de contenus à valider
- Raccourcis clavier : A (Accepter), R (Rejeter), Espace (Pause)
- Historique créateur visible (si déjà 1-2 contenus validés)
**Modération communautaire (post-MVP)** :
⚠️ **Non implémenté au MVP** (complexité juridique)
Vision future (envisageable) :
- Créateurs établis peuvent opt-in "Modérateur communautaire"
- Formation obligatoire (30 min) + quiz (80%)
- Pré-validation uniquement (validation finale toujours par équipe RoadWave)
- Compensation : badges, premium offert
- Attribution aléatoire (pas de collusion)
**Justification décision MVP** :
- **Responsabilité juridique** : plateforme reste responsable (DSA EU)
- **Qualité garantie** : modérateurs formés et mandatés
- **Anti-spam efficace** : bloque 95% des abus dès le début
- **Coût raisonnable** : 30s × 3 contenus = 1.5 min/créateur
- **UX acceptable** : délai 24-48h expliqué clairement
- **Pas de validation par pairs** au MVP = évite risques juridiques (collusion, compétence, conflits)
---
### 4.4 Modification et suppression
**Décision** : Modification métadonnées uniquement, suppression immédiate
**Modification autorisée** :
| Élément | Modifiable | Justification |
|---------|------------|---------------|
| **Titre** | ✅ | Correction coquilles |
| **Description** | ✅ | Si ajoutée ultérieurement |
| **Tags** | ✅ | Ajustement pertinence |
| **Image couverture** | ✅ | Personnalisation |
| **Audio** | ❌ | Intégrité contenu |
| **Zone diffusion** | ❌ | Évite manipulation algo |
| **Type géo** | ❌ | Évite manipulation algo |
| **Classification âge** | ❌ | Sécurité mineurs |
**Raisons restrictions** :
**Audio non modifiable** :
- Évite fraude : uploader contenu validé → remplacer par spam
- Intégrité : auditeurs doivent écouter ce qui a été validé
**Zone/Type non modifiables** :
- Évite manipulation : créer "Local Paris" → changer en "National" pour boost visibilité
- Évite abus : créer "Neutre" (faible pondération géo) → changer en "Ancré" (forte pondération)
**Classification non modifiable** :
- Évite contournement : uploader "Tout public" → passer en "18+" sans revalidation
- Sécurité : garantit que classification a été vérifiée
**Si besoin de changer audio/zone/classification** :
- Action : **Supprimer contenu + republier**
- Si créateur <3 contenus validés : retourne en file validation
- Si créateur ≥3 contenus validés : publication immédiate
**Suppression de contenu** :
| Aspect | Comportement |
|--------|--------------|
| **Délai** | Immédiat | Suppression BDD + cache sous 5 min |
| **Réversibilité** | Non | Suppression définitive |
| **Historique auditeurs** | Marqué "Contenu supprimé par créateur" | Conserve écoute dans historique |
| **Analytics plateforme** | Anonymisé et conservé | Métriques globales (RGPD compliant) |
| **Fichiers cache** | Supprimés sous 24h | Purge NGINX Cache (OVH VPS) et OVH Object Storage |
**Exemple scénario suppression** :
```
Créateur supprime podcast écouté par 1000 personnes
→ Cache/Storage : fichiers purgés sous 24h (NGINX Cache + OVH Object Storage)
→ BDD : entrée marquée "deleted", auteur anonymisé
→ Historique auditeurs : "Contenu supprimé" (conserve durée écoute pour stats)
→ Analytics : métriques globales conservées (anonymes, RGPD OK)
```
**Notifications suppression** :
- Pas de notification aux auditeurs (pour éviter effet Streisand)
- Historique reste consultable : "Vous avez écouté ce contenu le [date]"
- Si auditeur tente de réécouter : "Ce contenu n'est plus disponible"
**Justification** :
- **Simplicité** : règles claires et non-ambiguës
- **Sécurité** : évite manipulations algorithme et contournements modération
- **Contrôle créateur** : liberté totale de supprimer (RGPD)
- **Traçabilité** : historique conservé pour analytics (anonymisé)
- **Coût 0** : pas de revalidation métadonnées
---
## Récapitulatif Section 4