10 KiB
PLANS_TARIFAIRES.md — Expria / Coach TCF Canada
Document de référence — Version 1.1 Toute modification des plans tarifaires doit être reflétée dans ce fichier en premier. Tout le code, tout prompt à Claude, tout débat sur une feature part d'ici.
1. Vue d'ensemble
| Feature | Découverte (Free) | Standard | Premium |
|---|---|---|---|
| Mode entraînement | ✅ | ✅ | ✅ |
| Simulations | 5 à vie | Illimitées | Illimitées |
| EE — Tâches 1, 2, 3 | ✅ | ✅ | ✅ |
| EO — Tâche 1 et 3 | ✅ | ✅ | ✅ |
| EO — Tâche 2 live | ❌ | ❌ | ✅ |
| Rapport basique (score + NCLC) | ✅ | ✅ | ✅ |
| Rapport détaillé (critères + erreurs) | 🔒 flouté | ✅ | ✅ |
| Tips (idées, modèle, exercices/production) | 🔒 tronqués | ✅ | ✅ |
| Historique + dashboard | ❌ | ✅ | ✅ |
| Mode examen | ❌ | ❌ | ✅ |
| Analyse patterns (5 dernières prod.) | ❌ | ❌ | ✅ |
| Exercices long terme | ❌ | ❌ | ✅ |
| Indice de préparation | ❌ | ❌ | ✅ |
2. Détail par plan
🟢 PLAN DÉCOUVERTE — Gratuit
Rôle : Acquisition / frustration contrôlée. Laisser l'utilisateur goûter le produit et voir que la correction existe, sans lui permettre de construire un entraînement sérieux sur le plan gratuit.
Accès
- Mode entraînement uniquement
- 5 simulations à vie (toutes tâches confondues, compteur global, ne se remet jamais à zéro)
Expression Écrite
- Tâches 1, 2, 3 disponibles ✅
Expression Orale
- Tâche 1 et Tâche 3 disponibles ✅
- Tâche 2 (interaction live) ❌ — cadenas + mention "Exclusivité Premium"
Correction
- Score global /20 ✅
- Niveau NCLC estimé ✅
- Feedback court (2-3 lignes) ✅
- Détail par critère → flouté + "Disponible en Standard" 🔒
- Explication des erreurs → floutée 🔒
Tips (entraînement)
- Suggestions d'idées/arguments → 1 phrase visible + "Voir plus en Standard" 🔒
- Production modèle → 1 phrase visible + "Voir plus en Standard" 🔒
- Exercices personnalisés → titre visible + "Disponible en Standard" 🔒
Données utilisateur
- Pas d'historique ❌
- Pas de dashboard ❌
- Aperçu flouté du dashboard complet avec mention "Disponible en Standard"
Mode examen
- Non disponible ❌
Logique backend
free: {
simulations_lifetime: 5,
oral_t2_live: false,
detailed_report: false, // visible mais flouté côté frontend
tips: false, // visible mais tronqué côté frontend
dashboard: false,
exam_mode: false,
pattern_analysis: false,
preparation_index: false,
}
🔵 PLAN STANDARD — 19,90€ / 4 semaines
Rôle : Progression sérieuse. Débloquer l'entraînement complet avec correction détaillée et suivi des productions.
Accès
- Mode entraînement illimité ✅
- Simulations illimitées ✅
Expression Écrite
- Tâches 1, 2, 3 disponibles ✅
Expression Orale
- Tâche 1 et Tâche 3 disponibles ✅
- Tâche 2 (interaction live) ❌ — cadenas + mention "Exclusivité Premium"
Correction
- Score global /20 ✅
- Niveau NCLC estimé ✅
- Détail par critère ✅
- Explication des erreurs détectées ✅
Tips (entraînement)
- Suggestions d'idées/arguments ✅ (activables via toggle avant la simulation)
- Production modèle basée sur la copie ✅
- Exercices personnalisés liés à CETTE production ✅
- Mode focus disponible (masquer les tips pour simuler les conditions réelles) ✅
Données utilisateur
- Historique complet des productions ✅
- Dashboard (consultation des copies et rapports passés) ✅
- Indice de préparation ✅ (activé après 5 productions)
Mode examen
- Non disponible ❌ — cadenas + mention "Exclusivité Premium"
Analyse avancée
- Analyse des patterns multi-productions ❌
- Exercices long terme ❌
Logique backend
standard: {
simulations_lifetime: null, // illimité
oral_t2_live: false,
detailed_report: true,
tips: true,
dashboard: true,
exam_mode: false,
pattern_analysis: false,
preparation_index: false,
}
🟣 PLAN PREMIUM — 39,90€ / 4 semaines
Rôle : Réussite — viser NCLC 9+. Tout Standard, plus les outils de simulation réelle et d'intelligence long terme.
Accès
- Tout le plan Standard ✅
- Mode examen ✅
- EO Tâche 2 live ✅
- Analyse avancée multi-productions ✅
🔥 Mode Examen (feature majeure)
Expression Écrite :
- 3 tâches affichées simultanément
- Timer 60 minutes — inarrêtable ⛔
- Zone de saisie figée (readOnly) à T=0 ⛔
- Envoi automatique déclenché à T=0 ✅
Expression Orale :
- 3 tâches enchaînées
- Timer global 12 minutes — inarrêtable ⛔
- Enregistrement stoppé et envoi automatique à T=0 ✅
Productions enregistrées dans le dashboard avec tag "Mode Examen".
🔥 EO Tâche 2 — Simulation live (différenciateur clé)
- Interaction dynamique en temps réel avec l'examinateur IA
- Le candidat répond en audio
- L'IA adapte ses relances selon les réponses du candidat
- Rapport complet généré à la fin du dialogue
- Productions enregistrées avec tag "T2 Live"
❗ Exclusivité Premium — aucun concurrent ne propose cette feature.
🔥 Analyse des patterns (intelligence long terme)
- Analyse automatique des 5 dernières productions
- Détection des erreurs récurrentes classées par type :
- Structurelles (organisation, cohérence)
- Lexicales (répétitions, registre, richesse)
- Morphosyntaxiques (accords, conjugaison, syntaxe)
- Distinction : erreur ponctuelle vs pattern répété (3+ occurrences sur 5 productions)
- Exercices long terme générés sur la base des patterns détectés
- Distinction clé : ces exercices sont différents des exercices du rapport individuel (qui sont spécifiques à une seule production)
🔥 Indice de préparation
- Score dynamique 0 → 100
- Basé sur : moyenne des scores récents + régularité des sessions + courbe de progression
- Messages interprétatifs :
- < 40 : "Continuez à vous entraîner régulièrement"
- 40–70 : "Bonne progression — visez NCLC 7-8"
- > 70 : "Vous êtes en bonne voie pour NCLC 9+"
Logique backend
premium: {
simulations_lifetime: null,
oral_t2_live: true,
detailed_report: true,
tips: true,
dashboard: true,
exam_mode: true,
pattern_analysis: true,
preparation_index: true,
}
3. Source de vérité unique (lib/access.ts)
export const PLANS = {
free: {
simulations_lifetime: 5,
oral_t2_live: false,
detailed_report: false,
tips: false,
dashboard: false,
exam_mode: false,
pattern_analysis: false,
preparation_index: false,
},
standard: {
simulations_lifetime: null,
oral_t2_live: false,
detailed_report: true,
tips: true,
dashboard: true,
exam_mode: false,
pattern_analysis: false,
preparation_index: false,
},
premium: {
simulations_lifetime: null,
oral_t2_live: true,
detailed_report: true,
tips: true,
dashboard: true,
exam_mode: true,
pattern_analysis: true,
preparation_index: true,
},
}
Tout le code lit depuis cet objet. Aucune condition de plan n'est écrite en dur ailleurs dans le code.
4. Règles transversales
Upgrades possibles
- Découverte → Standard
- Découverte → Premium (accès direct, sans passer par Standard)
- Standard → Premium
Dans tous les cas : immédiat après confirmation du webhook Stripe, sans délai, sans reconnexion requise.
Upgrade en cours d'abonnement — Prorata automatique (Stripe)
Quand un utilisateur Standard souhaite passer en Premium avant la fin de sa période, il ne paie pas le plein tarif Premium. Stripe calcule automatiquement le prorata :
- Les jours restants du plan Standard sont crédités
- Les jours restants sont refacturés au tarif Premium
- L'utilisateur paie uniquement la différence de valeur pour le temps restant
Exemple : Un utilisateur a payé 19,90€ pour 4 semaines. Il upgrade après 2 semaines. Stripe crédite ~10€ (2 semaines non consommées de Standard) et facture ~20€ (2 semaines au tarif Premium). → Il paie ~10€, pas 39,90€.
Ce que cela implique côté implémentation :
- Utiliser
subscription.update()dans l'API Stripe avecproration_behavior: 'always_invoice' - Stripe génère automatiquement une facture de prorata et débite le montant exact
- Le webhook
invoice.paidconfirme le paiement → mettre à jour le plan à"premium"dans Supabase
Ce que l'utilisateur voit dans l'interface : Avant de confirmer l'upgrade, afficher le montant exact calculé par Stripe :
"Vous paierez [montant calculé]€ aujourd'hui pour accéder au plan Premium jusqu'au [date de fin]." [Confirmer] [Annuler]
Pas de surprise, pas de frustration.
Downgrades / Résiliations
- Premium → Standard
- Premium → Découverte (résiliation sans remplacement)
- Standard → Découverte (résiliation sans remplacement)
Conservation des données
Les productions sont toujours conservées en base, quel que soit le changement de plan. Seul l'accès aux features change. L'utilisateur ne perd jamais ses données.
Compteur de simulations Free
- Global (EE + EO confondus)
- Ne se remet jamais à zéro
- Une simulation = un envoi pour correction
- Si l'utilisateur a consommé 3/5 simulations avant de s'abonner, puis résilie, il lui reste 2 simulations gratuites
Expiration d'abonnement
- Déclenchée par le webhook Stripe :
customer.subscription.deleted - Rôle remis à
"free"dans Supabase - Productions conservées, accès features coupé immédiatement
- Message affiché à la prochaine connexion : "Votre abonnement a expiré. Vos productions sont conservées. Renouvelez pour retrouver l'accès complet."
Stripe — Produits à créer (mode Test d'abord)
| Plan | Produit Stripe | Prix |
|---|---|---|
| Standard | "Expria Standard" | 19,90€ / 4 semaines |
| Premium | "Expria Premium" | 39,90€ / 4 semaines |
Webhooks à écouter :
checkout.session.completed→ mettre à jour le plan dans Supabase (nouveau abonnement)invoice.paid→ mettre à jour le plan dans Supabase (upgrade avec prorata)customer.subscription.deleted→ remettre le plan à "free"