Implement the core timer feature following the src/features/ architecture: - useTimerEngine hook: drift-free Date.now() delta countdown (100ms tick), explicit state machine (IDLE → GET_READY → WORK → REST → COMPLETE), event emitter for external consumers (PHASE_CHANGED, ROUND_COMPLETED, COUNTDOWN_TICK, SESSION_COMPLETE), auto-pause on AppState interruption (phone calls, background), expo-keep-awake during session - TimerDisplay component: full-screen animated UI with 600ms color transitions between phases, pulse animation on countdown, flash red on last 3 seconds, round progress dots, IDLE/active/COMPLETE views - TimerControls component: stop/pause-resume/skip buttons with Ionicons - Timer route (app/timer.tsx): fullScreenModal wiring hook → display - Home screen: dark theme with START button navigating to /timer - Project docs: CLAUDE.md (constitution), PRD v1.1, skill files - Shared constants: PHASE_COLORS, TIMER_DEFAULTS, formatTime utility - Types: TimerPhase, TimerState, TimerConfig, TimerActions, TimerEvent Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
30 KiB
| 🔥 TABATAGO Application Mobile de Minuterie Tabata Product Requirements Document (PRD) v1.1 Framework : Expo (React Native) · Cible : iOS & Android · Février 2026 |
|---|
1. Résumé Exécutif
TabataGo est une application mobile premium dédiée à l'entraînement par intervalles en méthode Tabata (20 secondes d'effort / 10 secondes de repos). Elle cible les personnes qui veulent des séances courtes, intenses et guidées — sans abonnement à une salle. Le marché des applications de fitness dépasse 1,5 milliard de dollars en revenus annuels et le Tabata reste un mot-clé à forte demande (popularité > 70) avec une difficulté ASO modérée (< 50).
| Indicateur | Valeur cible |
|---|---|
| Marché visé | Fitness enthousiasts 25-45 ans, Home workout, HIIT lovers |
| Plateformes | iOS (priorité) + Android |
| Framework | Expo (React Native) — SDK 52+ |
| Modèle économique | Freemium + Abonnement mensuel/annuel via RevenueCat |
| Prix cible (US) | $4.99/mois ou $29.99/an |
| Objectif J+30 | 5 000 téléchargements, taux de conversion essai > 30% |
| Objectif J+90 | MRR $5 000, note App Store ≥ 4.6 |
2. Fonctionnalités Core — Spécifications Détaillées
TabataGo repose sur trois piliers fonctionnels indissociables : le Timer (moteur de l'expérience), la Musique (moteur émotionnel), et l'Exercice (moteur pédagogique). Ces trois composants doivent fonctionner en parfaite synchronisation.
2.1 Le Timer — Moteur Central
Le timer est la fonctionnalité principale et vitale de l'application. Son implémentation doit être irréprochable : précision, fluidité visuelle, comportement en arrière-plan.
2.1.1 Structure d'une Séance Tabata Standard
| Phase | Durée par défaut | Configurable ? | Couleur écran | Signal |
|---|---|---|---|---|
| Préparation (Get Ready) | 10 secondes | Oui (5–30s) | Jaune #EAB308 | Bip court × 3 + vibration légère |
| Travail (Work) | 20 secondes | Oui (5–60s) | Orange vif #F97316 | Bip long au démarrage + haptique fort |
| Repos (Rest) | 10 secondes | Oui (5–60s) | Bleu calme #3B82F6 | Double bip court + haptique léger |
| Fin de round | Instantané | — | Flash blanc | Son de cloche + vibration |
| Fin de séance | Écran résultat | — | Vert #22C55E | Fanfare + longue vibration |
2.1.2 Paramètres Configurables du Timer
| Paramètre | Valeur par défaut | Min | Max | Accès |
|---|---|---|---|---|
| Durée Work | 20s | 5s | 60s | Tous |
| Durée Rest | 10s | 5s | 60s | Tous |
| Nombre de rounds | 8 | 1 | 30 | Tous |
| Durée Get Ready | 10s | 0s | 30s | Tous |
| Nombre de cycles | 1 | 1 | 10 | Premium |
| Pause entre cycles | 60s | 10s | 300s | Premium |
| Cycles de récupération | — | — | — | Premium |
2.1.3 Affichage Timer — Écran Séance (plein écran)
| 📱 LAYOUT — Écran Timer Plein Écran |
|---|
| ▸ Zone HAUTE (20%) : Nom de l'exercice en cours + numéro de round (ex: "Burpees — Round 3/8") |
| ▸ Zone CENTRALE (50%) : Chiffre du compte à rebours — très grand (96-120px), police monospace, couleur de phase |
| ▸ Zone BASSE HAUTE (15%) : Barre de progression de la séance complète (rounds) + indicateur phase actuelle |
| ▸ Zone BASSE (15%) : Boutons Pause / Stop / Skip — discrets pour ne pas distraire |
| ▸ FOND : Couleur dynamique selon la phase (orange work, bleu rest, jaune prep) avec transition animée |
| ▸ ANIMATION : Pulsation subtile du chiffre à chaque seconde + ring circulaire de progression |
2.1.4 Comportement Technique du Timer
-
Précision : Utiliser expo-background-fetch + Date.now() delta pour compenser les drifts — tolérance < 50ms
-
Background : Le timer continue en arrière-plan (notification sticky affichant le compte à rebours)
-
Verrouillage écran : Écran reste allumé pendant la séance (expo-keep-awake)
-
Interruptions : Pause automatique si appel téléphonique entrant (AppState listener)
-
Reprise : Si l'app est tuée, afficher une notification "Séance interrompue — Reprendre ?" au retour
-
OTA update safe : Le state du timer est isolé du cycle de render React pour éviter les glitches
2.2 La Musique — Moteur Émotionnel
La musique transforme une simple minuterie en expérience motivante. Elle doit s'adapter dynamiquement à chaque phase de la séance (work vs rest) et ne jamais entrer en conflit avec la musique de l'utilisateur ou les signaux sonores.
2.2.1 Architecture Sonore
| Couche audio | Description | Technologie | Contrôle utilisateur |
|---|---|---|---|
| Musique d'ambiance | Tracks BPM-synchronisées intégrées à l'app | expo-av (AVAudioSession) | Volume indépendant, on/off |
| Signaux de phase | Bips, voix, cloche — changement work/rest | expo-av (priorité haute) | Volume indépendant, choix du son |
| Voix coach | Annonces vocales (optionnel) : "Go!", "Rest", "Last round!" | expo-av (TTS ou fichiers pré-enregistrés) | On/off, langue |
| Haptiques | Vibrations synchronisées aux signaux | expo-haptics | On/off |
2.2.2 Catalogue Musical Intégré (Offline)
| 🎵 TRACKS INTÉGRÉES — 3 ambiances × 3 intensités = 9 tracks minimum |
|---|
| ▸ Ambiance ELECTRO : Low (récup), Medium (standard), High (intense) — BPM 120/140/160 |
| ▸ Ambiance HIP-HOP : Low (récup), Medium (standard), High (intense) — BPM 85/100/115 |
| ▸ Ambiance ROCK/METAL : Low (récup), Medium (standard), High (intense) — BPM 130/150/170 |
| ▸ Mode SILENCE : Aucune musique, uniquement les signaux sonores de phase |
| ▸ Mode SPOTIFY/APPLE MUSIC : L'app n'interfère pas avec la musique de l'utilisateur (coexistence audio) |
| ▸ Toutes les tracks sont royalty-free et embarquées dans le bundle — aucun streaming requis |
2.2.3 Synchronisation Musique ↔ Timer
-
Phase WORK : Passer automatiquement à la track haute intensité de l'ambiance sélectionnée
-
Phase REST : Transition en fade-out 1s vers la track basse intensité (ambiance calme)
-
Phase GET READY : Intro de 10s sur la track principale
-
Transition douce : Cross-fade 500ms entre les phases pour éviter les coupures brutales
-
BPM adaptatif (Premium) : L'app détecte le rythme de la track et aligne le bip de fin de phase sur le beat
-
Pas de conflit : Si l'utilisateur a sa propre musique, les signaux de phase s'y superposent en ducking audio (baisse temporaire du volume)
2.2.4 Signaux Sonores de Phase — Options
| Signal | Options disponibles | Par défaut | Premium uniquement ? |
|---|---|---|---|
| Début Work | Bip long, Whistle, Voix "Go!", Air horn, Clap | Bip long | Non |
| Début Rest | Double bip, Voix "Rest", Bell, Ding | Double bip | Non |
| Décompte 3-2-1 | Bips courts, Voix "3, 2, 1", Silence | Bips courts | Non |
| Fin de round | Cloche, Applaudissements, Voix "Round X done!" | Cloche | Oui |
| Fin de séance | Fanfare, Applaudissements, Voix "Workout complete!" | Fanfare | Non |
| Dernier round | Voix "Last round!", Alarm, Son spécial | Voix | Oui |
2.2.5 Gestion Technique Audio (expo-av)
-
Session audio iOS : AVAudioSessionCategoryPlayback avec MixWithOthers — permet de jouer avec la musique utilisateur
-
Focus audio Android : AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK pour les signaux
-
Préchargement : Tous les sons de phase sont chargés en mémoire au démarrage de la séance (zéro latence)
-
Mode silencieux iOS : Les signaux de phase respectent le switch mute SAUF si l'utilisateur a activé "override" dans les settings
-
Headphones détection : Si écouteurs branchés, désactiver les haptiques de phase par défaut
2.3 L'Exercice — Moteur Pédagogique
Chaque round du timer doit être associé à un exercice spécifique, affiché clairement pendant la phase de travail. C'est ce qui différencie TabataGo d'une simple minuterie générique.
2.3.1 Bibliothèque d'Exercices
| Catégorie | Exemples d'exercices | Nb exercices V1 | Nb exercices V2 |
|---|---|---|---|
| Cardio / Full body | Burpees, Jumping Jacks, Mountain Climbers, High Knees | 8 | 20 |
| Bas du corps | Squats, Fentes, Jump Squats, Glute Bridges, Wall Sit | 8 | 20 |
| Haut du corps | Push-ups, Pike Push-ups, Tricep Dips, Shoulder Taps | 6 | 15 |
| Abdos / Core | Crunches, Planche, Russian Twists, Bicycle Crunches | 6 | 15 |
| Sans saut (low impact) | Slow Squats, Modified Push-ups, Step Touch, March | 6 | 15 |
| Avec matériel | Kettlebell Swings, Dumbbell Thrusters, Jump Rope | 4 | 10 |
2.3.2 Fiche Exercice — Données par Exercice
| 📋 MODÈLE DE DONNÉES — Exercice |
|---|
| ▸ id : identifiant unique (ex: "burpee_classic") |
| ▸ name : Nom localisé (FR: "Burpee", EN: "Burpee", ES: "Burpee") |
| ▸ category : cardio |
| ▸ difficulty : beginner |
| ▸ musclesTargeted : string[] (ex: ["quadriceps", "pectoraux", "cardio"]) |
| ▸ description : Instruction courte (max 80 car.) — affichée pendant la phase Rest |
| ▸ cues : string[] — 2-3 points clés de forme (ex: "Dos droit", "Genoux alignés") |
| ▸ gifUrl : Animation GIF courte (1-2s, loop) — 200×200px max — embarquée offline |
| ▸ thumbnailUrl : Image statique pour la bibliothèque |
| ▸ hasModification : bool — si une variante plus facile existe |
| ▸ modificationId : id de l'exercice de remplacement (ex: "burpee_modified") |
| ▸ equipmentNeeded : string[] (ex: [] pour aucun, ["tapis"] pour matériel simple) |
2.3.3 Affichage de l'Exercice Pendant la Séance
| Phase | Affichage exercice | Taille | Information complémentaire |
|---|---|---|---|
| GET READY (10s) | Nom + GIF animé de démonstration | Grande — focus total | "Voici l'exercice suivant" — prépare mentalement |
| WORK (20s) | Nom en haut + compteur central — GIF en petit coin | Nom moyen, timer dominant | 1-2 cues de forme affichés sous le nom |
| REST (10s) | Nom de l'EXERCICE SUIVANT + vignette | Taille moyenne | "Prochain : [Nom]" — anticipation |
| FIN DE ROUND | Résumé rapide du round (1s) | Plein écran flash | Round X complété + prochain exercice |
2.3.4 Types de Programmes Tabata
| 🗂️ PROGRAMMES DISPONIBLES — V1 |
|---|
| ▸ MODE 1 — Exercice unique répété : Le même exercice sur les 8 rounds (ex: 8 rounds de Burpees) — Tabata classique |
| ▸ MODE 2 — Circuit 2 exercices : Alternance A/B sur 8 rounds (ex: Squats / Push-ups × 4 répétitions) — Tabata duo |
| ▸ MODE 3 — Circuit 4 exercices : 4 exercices × 2 rounds chacun — Tabata circuit (Premium) |
| ▸ MODE 4 — Programme libre : L'utilisateur assigne manuellement un exercice à chaque round (Premium) |
| ▸ MODE 5 — Programme IA : Sélection automatique selon niveau, objectif et historique (Premium V2) |
2.3.5 Créateur de Programme Personnalisé (Premium)
-
Interface drag & drop pour assigner les exercices à chaque round
-
Sauvegarde illimitée de programmes personnalisés (nom, description, tags)
-
Partage de programme par lien deep link (ex: tabatago://program/abc123)
-
Import de programme depuis un lien partagé par un autre utilisateur
-
Favoris : marquer des exercices pour les retrouver rapidement
2.3.6 Contenu Offline & Performance
-
Tous les GIFs d'exercices V1 (38 exercices × 1 GIF ≈ 150KB chacun ≈ ~6MB total) — embarqués dans le bundle
-
Lazy loading pour les exercices V2+ : téléchargement à la demande, mis en cache localement
-
Fallback : Si pas de GIF disponible, afficher une icône + description textuelle
-
Accessibilité : alt text sur chaque GIF pour VoiceOver/TalkBack
2.4 Synchronisation Timer × Musique × Exercice
Les trois composants doivent former une expérience unifiée et cohérente. Ce tableau décrit les événements et leurs effets croisés :
| Événement Timer | Effet sur la Musique | Effet sur l'Exercice | Haptique |
|---|---|---|---|
| Début GET READY | Fade-in track principale | Afficher GIF exercice Round 1 | Léger |
| Décompte 3-2-1 | Volume augmente | Animation pulsation sur le GIF | Bip × 3 |
| Début WORK | Switch vers track high BPM | Afficher nom + cues en grand | Fort |
| Milieu WORK (10s) | Rien | "Halfway!" en overlay 1s | Aucun |
| Fin WORK | Switch vers track low BPM | Afficher exercice SUIVANT | Moyen |
| Début REST | Track calme | "Next: [Exercice]" + vignette | Léger |
| Dernier round warning | Effet sonore spécial | Badge "LAST ROUND" sur nom | Vibration longue |
| Fin de séance | Fade-out + fanfare | Écran résultat avec tous les exercices | Célébration |
3. Validation du Marché & Stratégie ASO
3.1 Analyse des Mots-Clés Cibles
Les mots-clés suivants ont été validés via Astro (difficulté < 55, popularité > 20) :
| Mot-clé | Popularité | Difficulté | Marché |
|---|---|---|---|
| tabata timer | 72 | 48 | EN 🇺🇸 |
| hiit timer app | 68 | 52 | EN 🇺🇸 |
| minuterie tabata | 35 | 28 | FR 🇫🇷 |
| temporizador tabata | 41 | 31 | ES 🇪🇸 |
| tabata training timer | 55 | 44 | EN 🇬🇧 |
| intervall timer workout | 38 | 29 | DE 🇩🇪 |
3.2 Analyse Concurrentielle
Principaux concurrents identifiés et opportunités de différenciation :
| Concurrent | Forces | Faiblesses (notre opportunité) |
|---|---|---|
| Tabata Timer (App Store Top 1) | Notoriété, simplicité | UI datée, pas de suivi streak, pas de localisation |
| Seconds Pro | Très complet, flexible | Trop complexe, prix élevé, courbe d'apprentissage |
| HIIT Interval Training Timer | Gratuit, fonctionnel | Pub intrusive, pas d'onboarding émotionnel |
| Tabata Stopwatch Pro | Simple, rapide | Pas de personnalisation, no streak, no widget |
Notre avantage : onboarding émotionnel fort + design moderne + widgets iOS/Android + streaks + localisation dans 5 langues.
4. Onboarding — La Séquence Critique
L'onboarding est la priorité absolue : 80% des revenus sont générés ici. L'objectif est de créer un investissement émotionnel avant d'afficher le paywall. La séquence suit le schéma : Problème → Empathie → Solution → Moment Wow → Paywall.
4.1 Écrans d'Onboarding (séquence de 6 écrans)
Écran 1 — Le Problème (Identifier la douleur)
| 🎯 OBJECTIF : Identification |
|---|
| ▸ Titre : "Tu n'as pas 1 heure pour la salle. Personne n'en a." |
| ▸ Sous-titre : "Et pourtant tu veux progresser. On a la solution." |
| ▸ Visuel : Animation subtile d'une horloge qui se fragmente puis se reconstruit en 20 min |
| ▸ CTA : "Montre-moi comment" (bouton orange pleine largeur) |
Écran 2 — L'Empathie (L'utilisateur se sent compris)
| 💬 OBJECTIF : Connexion émotionnelle |
|---|
| ▸ Titre : "Qu'est-ce qui t'empêche de t'entraîner ?" |
| ▸ Choix interactifs (tap) : Manque de temps / Motivation en berne / Je ne sais pas quoi faire / Je n'ai pas accès à une salle |
| ▸ Mécanisme : stocker la réponse → personnaliser le reste de l'onboarding |
| ▸ Transition : "On a conçu TabataGo exactement pour ça." |
Écran 3 — La Solution (Présenter la méthode)
| ⚡ OBJECTIF : Comprendre la valeur |
|---|
| ▸ Titre : "4 minutes. Vraiment transformatrices." |
| ▸ Animation interactive : timeline Tabata (20s work / 10s rest × 8 rounds) |
| ▸ Stats affichées : Brûle autant de calories qu'un jogging de 30 min / Prouvé scientifiquement depuis 1996 (Dr. Tabata) |
| ▸ Visuel : compteur animé qui tourne — preview de l'app |
Écran 4 — Le Moment "Wow" (Démo interactive)
| 🔥 OBJECTIF : Engagement actif (ne pas juste regarder) |
|---|
| ▸ Titre : "Essaie maintenant. 20 secondes." |
| ▸ Mini-minuterie Tabata LIVE intégrée dans l'écran d'onboarding |
| ▸ L'utilisateur tape sur "Go" et vit 20s de compte à rebours + son + vibration |
| ▸ Après : "Tu viens de faire ta première série Tabata. 7 de plus et c'est une séance complète." |
| ▸ Note : Ce moment est le plus différenciant — créer une mini-expérience réelle |
Écran 5 — Personnalisation (Engagement supplémentaire)
| ⚙️ OBJECTIF : Investissement personnel |
|---|
| ▸ Titre : "Configurons ta première semaine." |
| ▸ Sélection : Niveau (Débutant / Intermédiaire / Avancé) |
| ▸ Sélection : Objectif (Perte de poids / Cardio / Force / Bien-être) |
| ▸ Sélection : Fréquence souhaitée (2x / 3x / 5x par semaine) |
| ▸ Résultat : "Ton programme personnalisé est prêt." (sensation de valeur avant paiement) |
Écran 6 — Paywall (Après l'investissement émotionnel)
| 💳 OBJECTIF : Conversion |
|---|
| ▸ Titre : "Continue sur ta lancée. Sans limite." |
| ▸ Présenter l'essai gratuit 7 jours en premier (bouton principal orange) |
| ▸ Options : Mensuel $4.99 / Annuel $29.99 (économie 50% mise en évidence) |
| ▸ Garantie visible : "Annule à tout moment" + "Satisfait ou remboursé 30j" |
| ▸ Lien "Continuer sans abonnement" en petit en bas (ne pas le cacher) |
| ▸ Intégration RevenueCat — avec A/B test activé dès le lancement |
5. Design & Identité Visuelle
5.1 Palette de Couleurs
| Rôle | Couleur | Hex | Usage |
|---|---|---|---|
| Primaire / Action | Orange Tabata | #F97316 | Boutons CTA, accents, timer actif |
| Fond Dark (défaut) | Charcoal Night | #1E1E2E | Background principal mode sombre |
| Fond Light | Warm White | #FFF7ED | Background mode clair |
| Texte principal Dark | Stone 900 | #1C1917 | Titres mode clair |
| Texte secondaire | Stone 600 | #57534E | Body text, descriptions |
| Succès / Streak | Green 500 | #22C55E | Streaks, complétion, feedback positif |
| Danger / Alerte | Red 500 | #EF4444 | Erreurs, derniers secondes |
5.2 Typographie
| Usage | Police | Poids | Taille |
|---|---|---|---|
| Timer principal | Inter (monospace fallback) | Black (900) | 96-120px |
| Titres H1 | Inter | Bold (700) | 28-32px |
| Titres H2 | Inter | SemiBold (600) | 22-24px |
| Body / Labels | Inter | Regular (400) | 14-16px |
| Micro-labels | Inter | Medium (500) | 11-12px |
5.3 Principes Design
-
Mode sombre par défaut (immersif pendant l'entraînement)
-
Timer en plein écran pendant la séance — aucune distraction
-
Animations fluides (60fps) pour les transitions et le compteur
-
Haptiques natifs : vibration légère à chaque changement de phase
-
Support Dynamic Type (iOS) et font scaling (Android)
-
Icône app : fond noir, lettre T stylisée en orange avec une flamme
6. Architecture Technique & Développement (Expo)
6.1 Stack Technique
| Composant | Solution choisie | Justification |
|---|---|---|
| Framework | Expo SDK 52 (React Native) | Cross-platform, OTA updates, accès natif facile |
| Navigation | Expo Router v3 (file-based) | Standard moderne, deep linking natif |
| State management | Zustand + AsyncStorage | Léger, performant, persistance simple |
| Timer engine | expo-background-fetch + useInterval custom | Précision + exécution background |
| Audio | expo-av | Sons de décompte et alertes phase |
| Haptiques | expo-haptics | Retour tactile natif iOS/Android |
| Notifications | expo-notifications | Rappels d'entraînement + streaks |
| Widget | react-native-widget-extension | Widget iOS 14+ (Live Activity) |
| Paiements | react-native-purchases (RevenueCat) | Abonnements + A/B testing + analytics |
| Analytics | PostHog (react-native-posthog) | Funnel tracking, drop-off analysis |
| Storage | expo-secure-store + AsyncStorage | Données utilisateur + préférences |
| In-App Review | expo-store-review | Prompt après streak 7 jours |
6.2 Features — MoSCoW Priorisation
Must Have (V1 — Lancement)
| ✅ MUST HAVE — Indispensables au lancement |
|---|
| ▸ Timer Tabata complet — voir Section 2.1 (toutes phases, sons, haptiques, background) |
| ▸ Musique intégrée — voir Section 2.2 (3 ambiances × 3 intensités, signaux de phase, coexistence audio) |
| ▸ Exercices avec GIFs — voir Section 2.3 (38 exercices, modes 1 et 2, affichage GET READY/WORK/REST) |
| ▸ Synchronisation Timer × Musique × Exercice — voir Section 2.4 |
| ▸ Modes : Tabata classique, HIIT personnalisé, Pause active |
| ▸ Affichage plein écran pendant la séance (mode portrait + paysage) |
| ▸ Historique des séances (date, durée, rounds complétés) |
| ▸ Système de Streak (consécutivité quotidienne, animation de feu) |
| ▸ Notifications de rappel configurables |
| ▸ Onboarding 6 écrans avec mini-démo live |
| ▸ Paywall + RevenueCat (essai 7j, mensuel, annuel) |
| ▸ Dark mode + Light mode |
| ▸ Localisation : EN, FR, ES, DE, PT |
Should Have (V1.1 — Semaine 4-8)
| 🟡 SHOULD HAVE — Valeur ajoutée forte |
|---|
| ▸ Widget iOS (Home Screen) — affiche le streak et le dernier entraînement |
| ▸ Widget Android (Glance API) |
| ▸ Bibliothèque de programmes pré-définis (Débutant / Cardio / Force) |
| ▸ Statistiques hebdomadaires et mensuelles avec graphiques |
| ▸ Sons personnalisés (voix, bip, musique d'ambiance) |
| ▸ Integration Apple Health / Google Fit (calories, activité) |
| ▸ Partage social (carte récapitulative de la séance) |
Could Have (V2 — Mois 3+)
| 🔵 COULD HAVE — Différenciation long terme |
|---|
| ▸ Mode Coach IA : suggestions de séances basées sur l'historique |
| ▸ Challenges communautaires (leaderboard hebdomadaire) |
| ▸ Apple Watch companion app |
| ▸ Import/Export de programmes (partage entre utilisateurs) |
| ▸ Mode TV / AirPlay pour entraînement sur grand écran |
7. Structure de Navigation (Expo Router)
Architecture file-based avec Expo Router v3 :
| Route | Écran | Accès |
|---|---|---|
| / | Home — Hub central avec raccourcis et streak | Tous |
| /onboarding | Séquence onboarding 6 étapes | Nouveaux utilisateurs |
| /timer | Minuterie plein écran — séance active | Tous |
| /programs | Bibliothèque de programmes | Premium |
| /history | Historique des séances + stats | Tous (limité free) |
| /settings | Préférences, sons, notifications, compte | Tous |
| /paywall | Écran d'abonnement RevenueCat | Free users |
| /(modals)/review | In-App Review prompt | Streak 7j |
8. Paiements, Pricing & RevenueCat
8.1 Structure des Offres
| Offre | Prix US | Prix FR | Prix BR | Contenu |
|---|---|---|---|---|
| Gratuit | Free | Free | Free | Timer standard, 7j historique, pas de widget |
| Essai Premium | 7 jours gratuits | 7 jours gratuits | 7 jours gratuits | Accès complet, pas de CB requise si possible |
| Premium Mensuel | $4.99/mois | €4.99/mois | R$9.99/mois | Accès complet illimité |
| Premium Annuel | $29.99/an | €27.99/an | R$59.99/an | Tout Premium — économie 50% mise en avant |
Note : Pricing localisé via RevenueCat Purchasing Power Parity (PPP). Adapter automatiquement les prix pour le Brésil, l'Inde, l'Indonésie et l'Europe de l'Est pour maximiser les conversions mondiales.
8.2 Configuration RevenueCat
-
Entitlements : "premium" (accès à toutes les features payantes)
-
Products : tabatago_monthly, tabatago_annual, tabatago_trial_7d
-
A/B Tests dès J+7 : tester $3.99 vs $4.99 vs $6.99 mensuel
-
A/B Tests paywall : liste vs comparaison de plans vs "best value" badge
-
Webhook RevenueCat → PostHog pour corréler revenus et comportement
9. Analytics & Instrumentation (PostHog)
9.1 Événements Critiques à Tracker
| Événement | Propriétés | Objectif |
|---|---|---|
| onboarding_step_viewed | step_number, step_name | Identifier le drop-off |
| onboarding_demo_started | duration_seconds | Mesurer l'engagement Wow |
| onboarding_completed | persona, goal, frequency | Segmentation |
| paywall_viewed | source, variant | Funnel paiement |
| trial_started | plan_selected | Conversion essai |
| subscription_purchased | plan, price, currency | Revenue |
| session_started | program_id, rounds, duration | Engagement produit |
| session_completed | rounds_done, streak_day | Rétention |
| streak_milestone | days_count | Gamification KPIs |
| widget_added | widget_type | Stickiness |
| notification_tapped | notification_type | Rappels efficacité |
9.2 Funnels à Monitorer
-
Funnel Acquisition : Impression App Store → Téléchargement → Onboarding Start → Onboarding Complete → Paywall View → Trial Start → Purchase
-
Funnel Rétention : J+1 / J+7 / J+30 ouverture de l'app après téléchargement
-
Funnel Engagement : Séance démarrée → Séance complétée → Streak maintenu
Règle d'or : Si impressions mais pas de téléchargements → Réparer screenshots/icône. Si téléchargements mais pas d'essais → Réparer onboarding. Si essais mais pas de paiements → Réparer paywall/pricing.
10. Localisation & Growth Hacking
10.1 Stratégie de Localisation (5 Langues)
| Langue | Marché cible | Mots-clés spécifiques | Priorité |
|---|---|---|---|
| Anglais (EN) | US, UK, AU, CA | tabata timer, hiit timer app | 1 — Lancement |
| Français (FR) | France, Belgique, Québec | minuterie tabata, chrono hiit | 1 — Lancement |
| Espagnol (ES) | Espagne, Mexique, Argentine | temporizador tabata, ejercicio hiit | 2 — Semaine 2 |
| Allemand (DE) | Allemagne, Autriche, CH | tabata timer app, intervall training | 2 — Semaine 2 |
| Portugais (PT-BR) | Brésil | timer tabata, treino hiit | 3 — Mois 2 |
10.2 Éléments à Localiser
-
App content : tous les textes UI, onboarding, notifications, erreurs
-
App Store listing : titre, sous-titre, description courte, description longue
-
Screenshots : localisés avec texte natif (utiliser Fastlane Frameit)
-
Prix : PPP via RevenueCat (automatique par pays)
-
Mots-clés App Store : 100 caractères spécifiques par marché
Outil recommandé : i18next + expo-localization pour la gestion des traductions en développement.
11. App Store Optimization (ASO)
11.1 Fiche App Store (iOS — EN)
| Champ | Valeur optimisée |
|---|---|
| Nom de l'app (30 car.) | TabataGo — HIIT Timer |
| Sous-titre (30 car.) | Tabata & Interval Workout |
| Mots-clés (100 car.) | tabata,hiit,timer,interval,workout,fitness,training,countdown,sport,exercise |
| Description (1ère ligne) | The most motivating Tabata timer. 20 seconds of effort. Life-changing results. |
| Screenshots (10 max) | Voir section 10.2 |
| Preview video | 15-30s montrant la minuterie en action + streak + widget |
11.2 Plan des Screenshots (6 obligatoires)
| # | Contenu | Message clé | Background |
|---|---|---|---|
| 1 | Timer plein écran en action (20s) | "Train smarter, not longer" | Dark + orange |
| 2 | Écran d'onboarding moment Wow | "Your first Tabata in 20 seconds" | Gradient sombre |
| 3 | Widget iOS home screen | "Train from anywhere — even your lock screen" | iPhone mockup |
| 4 | Historique + Streak en feu | "Build the habit. Keep the streak." | Dark + vert |
| 5 | Bibliothèque de programmes | "100+ ready-to-go programs" | Gradient |
| 6 | Statistiques mensuelles | "See your progress. Stay motivated." | Fond clair |
12. Plan de Lancement en 72h
12.1 Timeline de Développement (72 heures)
| Phase | Durée | Livrables | Responsable |
|---|---|---|---|
| Setup & Architecture | H0 → H8 | Expo project init, navigation, design system, RevenueCat config | Dev Lead |
| Onboarding | H8 → H20 | 6 écrans onboarding + mini-timer démo + animation | Dev + Design |
| Core Timer | H20 → H36 | Minuterie plein écran, son, haptiques, background timer | Dev |
| Streak + Historique | H36 → H48 | Système streak, storage, affichage historique, notifications | Dev |
| Paywall + Analytics | H48 → H58 | RevenueCat paywall, PostHog events, A/B test config | Dev |
| Polish & Testing | H58 → H68 | Bug fixes, dark/light mode, performance, edge cases | Dev + QA |
| Submission | H68 → H72 | Screenshots, App Store listing (5 langues), soumission Apple | PM + Dev |
12.2 Stratégie de Validation Post-Lancement
Profiter du boost de visibilité des 3 premiers jours accordé par l'App Store aux nouvelles applications :
-
Jour 1-3 : Monitoring organique — Analyser impressions, téléchargements, et premiers essais
-
Jour 4-7 : Analyse funnel — Identifier le premier point de friction (onboarding? paywall?)
-
Jour 8-14 : Première itération — Corriger le problème prioritaire et soumettre mise à jour OTA (Expo)
-
Jour 15-30 : Activation publicité — Apple Search Ads seulement si CVR organique > 15%
-
Jour 30+ : Scale — Augmenter budget pub sur les marchés qui convertissent le mieux
Règle absolue : Ne jamais dépenser en publicité avant d'avoir validé que le funnel organique convertit.
13. KPIs & Métriques de Succès
| Métrique | Semaine 1 | Mois 1 | Mois 3 | Outil de mesure |
|---|---|---|---|---|
| Téléchargements | 500+ | 5 000+ | 20 000+ | App Store Connect |
| Taux conversion Impression→DL | > 5% | > 8% | > 10% | App Store Connect |
| Taux essai démarré | > 25% | > 30% | > 35% | RevenueCat + PostHog |
| Taux conversion essai→payant | > 30% | > 35% | > 40% | RevenueCat |
| Rétention J+7 | > 30% | > 35% | > 40% | PostHog |
| Rétention J+30 | — | > 20% | > 25% | PostHog |
| MRR | — | $2 000+ | $8 000+ | RevenueCat |
| Note App Store | — | ≥ 4.5 | ≥ 4.6 | App Store Connect |
| Streak moyen (actifs) | — | > 5 jours | > 10 jours | PostHog custom |
14. Risques & Mitigations
| Risque | Probabilité | Impact | Mitigation |
|---|---|---|---|
| Refus App Store (guidelines) | Moyen | Élevé | Respecter HIG Apple, tester paywall sur TestFlight, pas de dark patterns |
| Mauvais taux de conversion paywall | Moyen | Élevé | A/B test RevenueCat dès J+7, 3 variantes de prix/layout |
| Précision du timer en background | Faible | Élevé | expo-background-fetch + notification locale comme fallback |
| Faible rétention sans streaks | Moyen | Moyen | Streak J+1 core feature, reminder push personnalisé par heure d'entraînement |
| Concurrence sur mots-clés EN | Élevé | Moyen | Agressivité sur marchés FR/ES/DE dès J+14 |
| Revue Apple lente (> 48h) | Faible | Faible | Soumettre J-5 avant objectif lancement, utiliser Expo OTA pour hotfixes |
15. Approbations & Versions
| Rôle | Nom | Date | Signature |
|---|---|---|---|
| Product Owner | Février 2026 | ||
| Tech Lead | Février 2026 | ||
| Design Lead | Février 2026 | ||
| Marketing | Février 2026 |
Document créé le 15 février 2026 — TabataGo PRD v1.1