- Ajouter ADR-018 (librairies Go) dans TECHNICAL.md - Transformer Shared en menu dépliable dans mkdocs (cohérence avec autres domaines) - Corriger listes markdown (ajout lignes vides avant listes) - Corriger line breaks dans génération BDD (étapes "Et" sur nouvelles lignes) - Ajouter script fix-markdown-lists.sh pour corrections futures Impacte 86 fichiers de documentation et 164 fichiers BDD générés.
9.8 KiB
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 :
- Créateur upload ses 3 premiers contenus
- Contenus passent en file d'attente modération
- Modérateur junior RoadWave :
- Écoute 30 secondes (ou 15s à 2x)
- Vérifie métadonnées
- Valide ou rejette avec raison
- Si accepté : contenu publié + notification créateur
- Si refusé : notification avec raison détaillée + lien vers règles
- 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 |
| Réversibilité | Non |
| Historique auditeurs | Marqué "Contenu supprimé par créateur" |
| Analytics plateforme | Anonymisé et conservé |
| Fichiers cache | Supprimés sous 24h |
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