5.9 KiB
5.9 KiB
10. Premium
10.1 Offre et tarification
Décision : Deux formules sans essai gratuit
| Formule | Prix | Économie | Prix effectif |
|---|---|---|---|
| Mensuel | 4.99€/mois | - | 4.99€/mois |
| Annuel | 49.99€/an | 2 mois offerts | 4.16€/mois |
❌ Pas d'essai gratuit
Raisons :
- Anti-abus vacances : évite inscriptions opportunistes (essai 14j avant road trip vacances, puis annulation)
- Protection revenus créateurs : les écoutes Premium rémunèrent créateurs dès jour 1
- Simplicité : pas de gestion période trial + conversion
- Engagement : utilisateur qui paie dès début = plus engagé
❌ Pas de partage familial (MVP)
Raisons :
- Complexité technique (gestion invitations, validation liens, limite devices)
- Risque abus ("familles" de 6 inconnus)
- Coût dev/support élevé pour ROI incertain
- La plupart des users RoadWave sont individuels (conducteurs)
- Post-MVP : Si forte demande, offre "Famille" à 9.99€/mois pour 5 comptes
Justification tarif :
- Aligné marché bas : Spotify = 10.99€, YouTube Premium = 11.99€, Apple Music = 10.99€
- Prix accessible : cible conducteurs quotidiens (budget raisonnable)
- Incitation annuel : 2 mois offerts = engagement long terme + réduction churn
10.2 Multi-devices et détection simultanée
Décision : 1 seul stream actif par compte à tout moment
Détection connexion simultanée :
User A écoute sur iPhone
→ User A lance sur iPad
→ Détection : session active iPhone existe
→ Action : Arrêt lecture iPhone (WebSocket close)
→ Message iPhone : "Lecture interrompue : votre compte est utilisé sur un autre appareil"
→ Lecture démarre iPad
Implémentation technique :
Redis : active_streams:{user_id} → {device_id, started_at}
TTL : 5 minutes (refresh à chaque heartbeat)
Heartbeat toutes les 30s depuis app :
→ Si autre device détecté : kill session actuelle
→ Si pas de heartbeat pendant 5 min : considérer session morte
Exceptions :
- Contenus téléchargés (offline) ne comptent pas comme stream actif
- Transition rapide device (<10s) tolérée (changement voiture → maison)
Justification :
- Anti-partage compte : empêche 2 personnes d'utiliser même compte Premium
- Protection revenus créateurs : 1 abonnement = 1 personne = 1 écoute
- UX claire : message explicite, pas de coupure brutale
10.3 Contenus exclusifs Premium
Décision : Créateur décide (déjà couvert section 9.6)
Rappel règles :
- Toggle "Réservé Premium" par contenu
- Aucune limite de ratio gratuit/premium
- Badge 👑 visible
- Users gratuits : lecture bloquée avec CTA "Passez Premium"
Impact algorithme :
- Contenus premium inclus dans recommandations
- Si user gratuit → skip automatique (ne consomme pas slot)
- Si user premium → diffusé normalement selon score
10.4 Avantages Premium
Inclus dans l'abonnement :
| Avantage | Gratuit | Premium |
|---|---|---|
| Publicités | 1/5 contenus | 0 (aucune) |
| Contenus exclusifs | ❌ Bloqués | ✅ Accès complet |
| Qualité audio | 48 kbps Opus | 64 kbps Opus |
| Mode offline | 50 contenus max | Illimité |
| Historique écoute | 100 derniers | Illimité |
Qualité audio :
- Gratuit : 48 kbps Opus (~20 MB/h) = très correct pour voix
- Premium : 64 kbps Opus (~30 MB/h) = excellente qualité
Justification différences :
- 0 pub = argument principal (confort écoute)
- Qualité audio = avantage tangible audiophiles
- Offline illimité = use case road trips longs
- Pas d'over-engineering : pas de badges cosmétiques, fonctionnalités sociales, etc. (focus essentiel)
10.5 Gestion abonnement
Souscription :
| Canal | Prestataire | Prix | Commission |
|---|---|---|---|
| Web (desktop/mobile) | Mangopay | 4.99€ | 1.8% + 0.18€ = 0.27€ |
| iOS App | Apple In-App Purchase | 5.99€ | 30% (Apple) |
| Android App | Google Play Billing | 5.99€ | 30% (Google) |
Majoration mobile (5.99€) :
- Apple/Google prennent 30% de commission
- RoadWave majore prix de 20% pour compenser
- Incitation web : Email aux users "Abonnez-vous sur roadwave.com pour 4.99€/mois" (38% moins cher en frais !)
Renouvellement automatique :
- Email rappel 7 jours avant renouvellement
- Email confirmation après renouvellement réussi
- Retry automatique si échec paiement (3 tentatives sur 7 jours)
- Annulation automatique après 3 échecs
Annulation :
- Self-service dans Settings app : "Abonnement > Annuler"
- Accès Premium maintenu jusqu'à fin période payée
- Pas de remboursement prorata (standard industrie)
- Email confirmation annulation avec date fin d'accès
Réabonnement :
- Possibilité immédiate
- ❌ Pas de nouvelle période d'essai (pas d'essai du tout)
Architecture données :
CREATE TABLE subscriptions (
id UUID PRIMARY KEY,
user_id UUID NOT NULL REFERENCES users(id) UNIQUE,
mangopay_recurring_payin_id VARCHAR(255), -- Null si IAP
mangopay_user_id VARCHAR(255), -- Null si IAP
apple_transaction_id VARCHAR(255), -- Null si Mangopay
google_purchase_token VARCHAR(255), -- Null si Mangopay
status VARCHAR(50) NOT NULL, -- 'active', 'cancelled', 'expired', 'past_due'
plan VARCHAR(50) NOT NULL, -- 'monthly', 'yearly'
current_period_start TIMESTAMP NOT NULL,
current_period_end TIMESTAMP NOT NULL,
cancelled_at TIMESTAMP,
created_at TIMESTAMP NOT NULL DEFAULT NOW()
);
Vérification Premium en temps réel :
Cache Redis : premium:{user_id} → boolean (TTL 1h)
Refresh via webhooks :
- Mangopay : PAYIN_NORMAL_SUCCEEDED, PAYIN_NORMAL_FAILED
- Apple : App Store Server Notifications
- Google : Real-time Developer Notifications