chore: archive v1 docs and update project documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Millian Lamiaux
2026-02-21 00:04:22 +01:00
parent e59c87fd1b
commit 0bcd8185f0
17 changed files with 4519 additions and 27 deletions

11
.archive/CLAUDE.md Normal file
View File

@@ -0,0 +1,11 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5236 | 1:28 PM | 🔵 | Archived TabataGo PRD v1.1 discovered - comprehensive product requirements document | ~462 |
</claude-mem-context>

View File

@@ -0,0 +1,599 @@
# TabataGo — Brand Design Specification Document (BDSD) v1.0
> Ce document définit l'identité visuelle, le positionnement premium, et les principes esthétiques de TabataGo. Il guide toutes les décisions de design UI.
---
## 1. Vision de Marque
### 1.1 Essence
**TabataGo = Énergie pure, designé pour performer.**
Si TabataGo était une marque existante, ce serait **Gymshark** : jeune, audacieux, communauté, et visuellement impactant. Mais avec une touche **premium exclusive** qui élève l'expérience.
### 1.2 Positionnement
| Attribut | Définition |
|-----------|------------|
| **Émotion primaire** | Énergie / Vitalité — l'utilisateur doit se sentir vivant et motivé au premier regard |
| **Positionnement** | Premium exclusif — haut de gamme, design soigné, pas une app "gratuite générique" |
| **Adjectifs clés** | Dynamic • Vibrant • Energetic |
| **Mood global** | Action Sports — comme être dans une salle de sport high-end, la nuit, avec des néons |
### 1.3 Personnalité de Marque
TabataGo est :
- **Audacieux** — pas peur d'être vibrant et lumineux
- **Énergique** — chaque élément respire le mouvement
- **Premium** — jamais cheap, toujours soigné
- **Motivant** — l'UI pousse l'utilisateur à se dépasser
---
## 2. Direction Visuelle
### 2.1 Palette de Couleurs
#### Couleur Primaire : Orange Energy
L'orange est le cœur de l'identité — il représente l'énergie, la chaleur, l'action.
| Token | Hex | Usage |
|-------|-----|-------|
| `ENERGY_500` | `#F97316` | Brand primary, CTA, accents principaux |
| `ENERGY_400` | `#FB923C` | Glow effects, hover states |
| `ENERGY_600` | `#EA580C` | Phase WORK, intensity |
#### Fond : Soft Dark
Un dark mode doux et riche, pas un noir pur agressif.
| Token | Hex | Usage |
|-------|-----|-------|
| `DARK_BASE` | `#1A1A1E` | Background principal |
| `DARK_RAISED` | `#222226` | Cards level 1 |
| `DARK_ELEVATED` | `#2A2A2E` | Cards level 2, modals |
| `DARK_SURFACE` | `#0A0A0E` | Zones de focus, timer |
#### Accents & Phases
| Token | Hex | Usage |
|-------|-----|-------|
| `GLOW_NEON` | `#F97316` + glow | Flamme streak, highlights |
| `PHASE_WORK` | `#F97316` | Gradient work |
| `PHASE_REST` | `#3B82F6` | Gradient rest (bleu calme) |
| `PHASE_READY` | `#EAB308` | Gradient préparation |
| `SUCCESS` | `#22C55E` | Complétion, streak maintenu |
#### Textes
| Token | Valeur | Usage |
|-------|--------|-------|
| `TEXT_PRIMARY` | `#FFFFFF` | Titres, éléments principaux |
| `TEXT_SECONDARY` | `rgba(255,255,255,0.85)` | Body text |
| `TEXT_MUTED` | `rgba(255,255,255,0.60)` | Labels secondaires |
| `TEXT_HINT` | `rgba(255,255,255,0.45)` | Placeholders, hints |
### 2.2 Gradients
**Philosophie : Subtils mais présents.** Les gradients ajoutent de la profondeur sans être agressifs.
#### Gradients de Phase
```css
/* GET_READY - Ambre chaleureux */
--gradient-ready: linear-gradient(135deg, #451A03, #92400E, #D97706);
/* WORK - Orange intense avec touche rouge */
--gradient-work: linear-gradient(135deg, #450A0A, #991B1B, #EA580C);
/* REST - Bleu calme, récupération */
--gradient-rest: linear-gradient(135deg, #0C1929, #1E3A5F, #2563EB);
/* COMPLETE - Vert succès */
--gradient-complete: linear-gradient(135deg, #052E16, #166534, #16A34A);
```
#### Gradients UI
```css
/* Hero backgrounds - subtle */
--gradient-dark: linear-gradient(135deg, #0A0A14, #1A0E28, #2D1810);
/* Card hover - très subtil */
--gradient-card-hover: linear-gradient(135deg, rgba(249,115,22,0.08), rgba(249,115,22,0.02));
/* Button CTA - dimension */
--gradient-cta: linear-gradient(135deg, #F97316, #FB923C);
```
### 2.3 Glow & Neon Effects
L'identité TabataGo repose sur des **effets lumineux** qui donnent vie à l'interface.
#### Glow Colors
```css
/* Glow orange - principal */
--glow-energy: 0 0 40px rgba(249, 115, 22, 0.5);
--glow-energy-intense: 0 0 80px rgba(249, 115, 22, 0.7);
/* Glow blanc - éléments actifs */
--glow-white: 0 0 20px rgba(255, 255, 255, 0.3);
/* Neon flame effect */
--neon-flame:
0 0 10px rgba(249, 115, 22, 0.8),
0 0 20px rgba(249, 115, 22, 0.6),
0 0 40px rgba(249, 115, 22, 0.4);
```
#### Applications du Glow
| Élément | Effet |
|---------|-------|
| Bouton START | Glow breathing animé (pulse) |
| Flamme streak | Neon flame effect |
| Card sélectionnée | Subtle glow border |
| Phase WORK active | Ambient glow en fond |
| Countdown ≤3s | Glow rouge qui pulse |
---
## 3. Typographie
### 3.1 Police : Inter
**Pourquoi Inter ?**
- Excellent rendu sur écran
- Large gamme de weights pour le contrast mix
- Tabular nums pour le timer (pas de jitter)
- Google Fonts — gratuit et performant
### 3.2 Contrast Mix Philosophy
**Heavy pour les titres, light pour le body.** Ce contraste crée de l'impact et de l'élégance.
| Usage | Weight | Size | Exemple |
|-------|--------|------|---------|
| Timer countdown | 900 (Black) | 140px | **20** |
| Brand title | 900 (Black) | 56px | **TABATA** |
| Headlines | 800 (ExtraBold) | 32px | **Terminé !** |
| Body text | 400 (Regular) | 16px | Description du programme |
| Captions | 500 (Medium) | 14px | Labels, hints |
### 3.3 Scale Typographique
```css
/* Display - Impact maximal */
--font-countdown: 900 140px/1 Inter;
--font-display: 900 42px/1.1 Inter;
--font-headline: 800 28px/1.2 Inter;
/* Interactive */
--font-button-hero: 900 30px/1 Inter;
--font-button: 700 18px/1 Inter;
/* Body */
--font-body: 400 16px/1.5 Inter;
--font-caption: 500 14px/1.4 Inter;
--font-overline: 600 11px/1.2 Inter;
```
### 3.4 Règles Typographiques
1. **Toujours tabular-nums** pour les chiffres du timer
2. **Letter-spacing généreux** sur les all-caps (+2px minimum)
3. **Jamais de italic** sauf pour les citations
4. **Line-height serré** sur les grands titres (1.1)
---
## 4. Iconographie
### 4.1 Style : iOS Native
Utiliser des icônes qui s'intègrent naturellement à l'écosystème iOS, avec le style SF Symbols.
**Caractéristiques :**
- Lignes medium (ni trop fines ni trop épaisses)
- Coins arrondis
- Consistance visuelle
- Reconnaissance instantanée
### 4.2 Icônes Système
| Action | Icône | Style |
|--------|-------|-------|
| Play | ▶️ | SF Symbol `play.fill` |
| Pause | ⏸️ | SF Symbol `pause.fill` |
| Stop | ⏹️ | SF Symbol `stop.fill` |
| Skip | ⏭️ | SF Symbol `forward.fill` |
| Settings | ⚙️ | SF Symbol `gearshape.fill` |
| Home | 🏠 | SF Symbol `house.fill` |
| History | 📊 | SF Symbol `clock.fill` |
### 4.3 Tailles d'Icônes
| Contexte | Taille |
|----------|--------|
| Navigation tabs | 24×24px |
| Boutons controls | 28×28px |
| Cards (badges) | 16×16px |
| Headers | 20×20px |
---
## 5. Imagerie & Illustrations
### 5.1 Style : Realistic Photos
**Pas de cartoon, pas d'abstrait.** Des vraies personnes qui font du sport.
**Caractéristiques des photos :**
- Athlètes en action, pas poses statiques
- Éclairage dynamique, contrasté
- Background flou/sombre
- Diversité de corps et d'origines
- Qualité haute résolution
### 5.2 Traitement des Photos
```css
/* Overlay pour intégration dark mode */
.photo-overlay {
background: linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.6) 100%);
}
/* Warm tint pour cohérence brand */
.photo-tint {
filter: saturate(1.1) sepia(0.1);
}
```
### 5.3 GIFs d'Exercices
- Durée : 1-2 secondes, loop seamless
- Format : 200×200px minimum
- Fond transparent ou sombre
- Modèle en tenue fitness neutre
---
## 6. Composants UI
### 6.1 Boutons
#### Primary CTA (Pill Filled)
```css
.cta-primary {
background: linear-gradient(135deg, #F97316, #FB923C);
border-radius: 9999px; /* Full pill */
padding: 16px 40px;
box-shadow: 0 0 40px rgba(249, 115, 22, 0.4);
}
.cta-primary:active {
transform: scale(0.95);
box-shadow: 0 0 20px rgba(249, 115, 22, 0.6);
}
```
#### Secondary Button
```css
.cta-secondary {
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 16px;
padding: 12px 24px;
}
```
### 6.2 Cards
#### Soft Elevated Cards
```css
.card {
background: rgba(34, 34, 38, 0.8); /* DARK_RAISED */
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.06);
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
}
.card-selected {
border-color: rgba(249, 115, 22, 0.3);
background: linear-gradient(135deg, rgba(249,115,22,0.08), rgba(249,115,22,0.02));
box-shadow: 0 0 30px rgba(249, 115, 22, 0.2);
}
```
### 6.3 Progress Indicators
#### Progress Bar
```css
.progress-bar {
height: 6px;
background: rgba(255, 255, 255, 0.08);
border-radius: 9999px;
overflow: hidden;
}
.progress-fill {
background: linear-gradient(90deg, #F97316, #FB923C);
border-radius: 9999px;
transition: width 0.3s ease-out;
}
```
#### Creative Loading
Style : barre de progression stylisée avec glow.
```css
.loading-bar {
height: 4px;
background: rgba(255, 255, 255, 0.1);
border-radius: 9999px;
overflow: hidden;
}
.loading-fill {
width: 30%;
height: 100%;
background: linear-gradient(90deg, #F97316, #FB923C);
box-shadow: 0 0 10px rgba(249, 115, 22, 0.8);
animation: loading-slide 1.5s ease-in-out infinite;
}
```
---
## 7. Motion & Animation
### 7.1 Philosophie : Bouncy & Playful
**Les animations doivent sentir vivantes, pas robotiques.**
| Type | Durée | Easing |
|------|-------|--------|
| Micro-interactions | 100-200ms | Ease-out |
| Transitions standard | 300-400ms | Ease-in-out |
| Animations bouncy | 400-600ms | Spring (damping: 12, stiffness: 180) |
| Breathing loops | 2000-4000ms | Ease-in-out (loop) |
### 7.2 Animations Clés
#### Glow Breathing (Bouton START)
```css
@keyframes glow-breathe {
0%, 100% {
box-shadow: 0 0 30px rgba(249, 115, 22, 0.3);
transform: scale(1);
}
50% {
box-shadow: 0 0 60px rgba(249, 115, 22, 0.5);
transform: scale(1.02);
}
}
```
#### Pulse (Countdown)
```css
@keyframes countdown-pulse {
0% { transform: scale(1); }
50% { transform: scale(1.03); }
100% { transform: scale(1); }
}
/* 200ms per tick */
```
#### Bouncy Pop (Victory)
```css
@keyframes victory-pop {
0% { transform: scale(0.5); opacity: 0; }
60% { transform: scale(1.1); }
100% { transform: scale(1); opacity: 1; }
}
/* 500ms total */
```
#### Pulsing Circles (Hero)
```css
@keyframes hero-pulse {
0% {
transform: scale(0.8);
opacity: 0.8;
}
100% {
transform: scale(2);
opacity: 0;
}
}
/* 2000ms, staggered */
```
### 7.3 Micro-interactions Premium
| Interaction | Feedback |
|-------------|----------|
| Tap bouton | `scale(0.95)` + haptic light |
| Tap card | `scale(0.98)` + border glow fade |
| Focus input | Border glow animation |
| Swipe | Resistance elastique |
| Phase change | Cross-fade 400ms + haptic medium |
---
## 8. Effets Décoratifs
### 8.1 Flamme Neon (Streak)
La flamme représente le streak — elle doit être **lumineuse, dynamic, motivante**.
**Spécifications :**
- Style : Neon glow flame
- Animation : Scale pulse + opacity flicker
- Couleurs : Orange avec halo lumineux
- Taille : 48-80px selon contexte
```css
.neon-flame {
filter: drop-shadow(0 0 10px rgba(249, 115, 22, 0.8))
drop-shadow(0 0 20px rgba(249, 115, 22, 0.6))
drop-shadow(0 0 40px rgba(249, 115, 22, 0.4));
animation: flame-flicker 800ms ease-in-out infinite;
}
@keyframes flame-flicker {
0%, 100% { opacity: 0.9; transform: scale(1); }
50% { opacity: 1; transform: scale(1.05); }
}
```
### 8.2 Pulsing Circles (Background Hero)
Utilisés pour les moments de victoire et les écrans hero.
```css
.hero-circles::before,
.hero-circles::after {
content: '';
position: absolute;
border-radius: 50%;
background: radial-gradient(circle, rgba(249,115,22,0.3), transparent 70%);
animation: hero-pulse 2000ms ease-out infinite;
}
.hero-circles::after {
animation-delay: 1000ms;
}
```
### 8.3 Floating Particles
Particules subtiles qui flottent en arrière-plan pour ajouter de la vie.
**Spécifications :**
- Nombre : 20-50 particules
- Taille : 2-6px
- Couleur : `rgba(255,255,255,0.1)` à `rgba(249,115,22,0.2)`
- Mouvement : Slow drift, random
- Opacité : 0.1-0.3
---
## 9. Spacing & Layout
### 9.1 Whitespace Généreux
Le premium respire. **Plus d'espace = plus d'impact.**
| Token | Valeur | Usage |
|-------|--------|-------|
| `space-xs` | 4px | Inline gaps |
| `space-sm` | 8px | Between related items |
| `space-md` | 16px | Section padding |
| `space-lg` | 24px | Between sections |
| `space-xl` | 40px | Major sections |
| `space-2xl` | 64px | Hero spacing |
### 9.2 Rounded Corners
| Token | Valeur | Usage |
|-------|--------|-------|
| `radius-sm` | 8px | Tags, small elements |
| `radius-md` | 12px | Buttons medium |
| `radius-lg` | 16px | Cards |
| `radius-xl` | 20px | Large cards, bottom sheets |
| `radius-full` | 9999px | Pills, circles |
---
## 10. Son Design
### 10.1 Philosophie
Les sons doivent être **subtils mais mémorables**. Ils renforcent le feedback sans être intrusifs.
### 10.2 Sons Clés
| Événement | Son | Caractéristiques |
|-----------|-----|------------------|
| Bip phase start | Court, percutant | 200ms, fréquence montante |
| Countdown tick | Click subtil | 100ms, tone medium |
| Phase WORK start | "Go!" ou bip fort | 300ms, énergique |
| Victoire complète | Fanfare courte | 1000ms, célébration |
| Haptic sync | Synchronisé au son | Feedback tactile |
### 10.3 Intégration
- Volume par défaut : 80% pour sons, 60% pour musique
- Ducking : Sons de phase prioritaire sur musique
- Respect silent mode (option override)
---
## 11. Inspirations & Références
### 11.1 Apple Fitness+
**Ce qu'on en reprend :**
- Dark mode élégant avec accents colorés
- Gradients subtils de phase
- Typography bold et impactante
- Animations fluides et premium
- Rings de progression stylisés
### 11.2 Gymshark
**Ce qu'on en reprend :**
- Énergie et dynamisme
- Communauté et motivation
- Photography realistic fitness
- Brand bold et young
### 11.3 Gaming UI (référence secondaire)
**Ce qu'on en reprend :**
- Effets neon/glow
- Animations bouncy
- Feedback immédiat et satisfaisant
- Progress bars créatives
---
## 12. Checklist Brand Consistency
Avant chaque release, vérifier :
- [ ] **Orange utilisé comme accent dominant** (pas dilué)
- [ ] **Glow effects présents** sur les éléments interactifs clés
- [ ] **Animations bouncy** et non robotiques
- [ ] **Whitespace généreux** — pas de surcharge visuelle
- [ ] **Rounded corners** partout (pas de corners carrés)
- [ ] **Photos realistic** et non illustrées
- [ ] **Haptics synchronisés** avec les interactions
- [ ] **Dark mode soft grey** et non true black
- [ ] **Contrast typo** (heavy titles, light body)
- [ ] **Feedback sonore subtil** mais présent
---
## 13. Versions
| Version | Date | Changements |
|---------|------|-------------|
| 1.0 | 18 février 2026 | Création initiale |
---
*Document créé le 18 février 2026 — TabataGo BDSD v1.0*

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,597 @@
| 🔥 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 (530s) | Jaune \#EAB308 | Bip court × 3 \+ vibration légère |
| Travail (Work) | 20 secondes | Oui (560s) | Orange vif \#F97316 | Bip long au démarrage \+ haptique fort |
| Repos (Rest) | 10 secondes | Oui (560s) | 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 | lower\_body | upper\_body | core | low\_impact | equipment |
| ▸ difficulty : beginner | intermediate | advanced |
| ▸ 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 :
1. Jour 1-3 : Monitoring organique — Analyser impressions, téléchargements, et premiers essais
2. Jour 4-7 : Analyse funnel — Identifier le premier point de friction (onboarding? paywall?)
3. Jour 8-14 : Première itération — Corriger le problème prioritaire et soumettre mise à jour OTA (Expo)
4. Jour 15-30 : Activation publicité — Apple Search Ads seulement si CVR organique \> 15%
5. 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*

File diff suppressed because it is too large Load Diff

View File

@@ -12,21 +12,4 @@
| #5054 | " | ✅ | Re-added Host import to home screen | ~184 |
| #5043 | 8:22 AM | ✅ | Removed closing Host tag from profile screen | ~210 |
| #5042 | " | ✅ | Removed opening Host tag from profile screen | ~164 |
| #5041 | " | ✅ | Removed closing Host tag from browse screen | ~187 |
| #5040 | " | ✅ | Removed opening Host tag from browse screen | ~159 |
| #5039 | 8:21 AM | ✅ | Removed closing Host tag from activity screen | ~193 |
| #5038 | " | ✅ | Removed opening Host tag from activity screen | ~154 |
| #5037 | " | ✅ | Removed closing Host tag from workouts screen | ~195 |
| #5036 | " | ✅ | Removed opening Host tag from workouts screen | ~164 |
| #5035 | " | ✅ | Removed closing Host tag from home screen JSX | ~197 |
| #5034 | " | ✅ | Removed Host wrapper from home screen JSX | ~139 |
| #5031 | 8:19 AM | ✅ | Removed Host import from profile screen | ~184 |
| #5030 | " | ✅ | Removed Host import from browse screen | ~190 |
| #5029 | 8:18 AM | ✅ | Removed Host import from activity screen | ~183 |
| #5028 | " | ✅ | Removed Host import from workouts screen | ~189 |
| #5027 | " | ✅ | Removed Host import from home screen index.tsx | ~180 |
| #5024 | " | 🔵 | Activity screen properly wraps content with Host component | ~237 |
| #5023 | " | 🔵 | Profile screen properly wraps content with Host component | ~246 |
| #5022 | 8:14 AM | 🔵 | Browse screen properly wraps content with Host component | ~217 |
| #5021 | " | 🔵 | Workouts screen properly wraps content with Host component | ~228 |
</claude-mem-context>

View File

@@ -10,17 +10,35 @@
| #5001 | 9:35 AM | 🔵 | Host Wrapper Located at Root Layout Level | ~153 |
| #4964 | 9:23 AM | 🔴 | Added Host Wrapper to Root Layout | ~228 |
| #4963 | 9:22 AM | ✅ | Root layout wraps Stack in View with pure black background | ~279 |
| #4910 | 8:16 AM | 🟣 | Added Workout Detail and Complete Screen Routes | ~348 |
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5224 | 1:24 PM | | Stage v1.1 files prepared for git commit - SwiftUI Button refactoring complete | ~434 |
| #5391 | 10:20 PM | 🟣 | RevenueCat subscription system fully integrated and tested | ~656 |
| #5384 | 9:28 PM | 🟣 | Implemented RevenueCat subscription system | ~190 |
| #5360 | 7:49 PM | 🟣 | Restore Button Style Added to Paywall | ~143 |
| #5359 | " | 🟣 | RevenueCat Purchase Flow Integrated in Paywall | ~273 |
| #5358 | " | 🟣 | usePurchases Hook Imported in Onboarding | ~134 |
| #5357 | " | 🟣 | RevenueCat Initialization Triggered After Store Hydration | ~176 |
| #5356 | 7:48 PM | 🟣 | RevenueCat Initialization Added to Root Layout | ~157 |
| #5313 | 2:58 PM | 🔵 | Onboarding flow architecture examined | ~482 |
| #5279 | 2:43 PM | 🔵 | Reviewed onboarding.tsx structure for notification permission integration | ~289 |
| #5268 | 2:27 PM | ✅ | Onboarding Feature Text Simplified | ~151 |
| #5230 | 1:25 PM | 🟣 | Implemented category and collection detail screens with Inter font loading | ~481 |
| #5228 | " | 🔄 | Removed v1 features and old scaffolding from TabataFit codebase | ~591 |
| #5227 | 1:24 PM | ✅ | Category and Collection screens staged for git commit | ~345 |
| #5224 | " | ✅ | Stage v1.1 files prepared for git commit - SwiftUI Button refactoring complete | ~434 |
| #5206 | 1:03 PM | ⚖️ | SwiftUI component usage mandated for TabataFit app | ~349 |
| #5115 | 8:57 AM | 🔵 | Root Layout Stack Configuration with Screen Animations | ~256 |
| #5061 | 8:47 AM | 🔵 | Expo Router Tab Navigation Structure Found | ~196 |
| #5053 | 8:23 AM | ✅ | Completed removal of all Host wrappers from application | ~255 |
| #5052 | " | ✅ | Removed Host wrapper from root layout entirely | ~224 |
| #5019 | 8:13 AM | 🔵 | Root layout properly wraps Stack with Host component | ~198 |
### Feb 21, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5551 | 12:02 AM | 🔄 | Converted onboarding and player screens to theme system | ~261 |
</claude-mem-context>

12
app/collection/CLAUDE.md Normal file
View File

@@ -0,0 +1,12 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5541 | 11:52 PM | 🔄 | Converted 4 detail screens to use theme system | ~264 |
| #5230 | 1:25 PM | 🟣 | Implemented category and collection detail screens with Inter font loading | ~481 |
</claude-mem-context>

View File

@@ -9,4 +9,10 @@
|----|------|---|-------|------|
| #5000 | 9:35 AM | 🔵 | Reviewed Player Screen Implementation | ~522 |
| #4912 | 8:16 AM | 🔵 | Found doneButton component in player screen | ~104 |
### Feb 21, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5551 | 12:02 AM | 🔄 | Converted onboarding and player screens to theme system | ~261 |
</claude-mem-context>

View File

@@ -0,0 +1,13 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5541 | 11:52 PM | 🔄 | Converted 4 detail screens to use theme system | ~264 |
| #5291 | 2:56 PM | 🔵 | Category detail screen implementation examined | ~305 |
| #5230 | 1:25 PM | 🟣 | Implemented category and collection detail screens with Inter font loading | ~481 |
</claude-mem-context>

View File

@@ -8,4 +8,12 @@
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #4889 | 4:46 PM | 🟣 | Created GlassCard component with iOS 18.4 inspired glassmorphism | ~174 |
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5300 | 2:56 PM | 🔵 | GlassCard component architecture examined | ~317 |
| #5248 | 1:29 PM | 🔵 | StyledText component provides unified text styling | ~126 |
| #5228 | 1:25 PM | 🔄 | Removed v1 features and old scaffolding from TabataFit codebase | ~591 |
</claude-mem-context>

View File

@@ -12,8 +12,13 @@
| #4829 | " | 🔵 | Existing Animation Constants Reviewed | ~331 |
| #4828 | " | 🔵 | Color System Constants Review for BDSD Planning | ~412 |
| #4827 | " | 🔵 | Spacing Constants Implementation Review | ~254 |
| #4826 | " | 🔵 | Shadow System Constants Reviewed | ~296 |
| #4825 | " | 🔵 | Typography Constants Implementation Verification | ~264 |
| #4779 | 1:21 PM | 🔵 | Typography System Constants Analysis | ~354 |
| #4778 | 1:20 PM | 🔵 | Design System Color Constants Analysis | ~392 |
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5242 | 1:29 PM | 🔵 | Design system constants barrel export reviewed | ~370 |
</claude-mem-context>

14
src/shared/data/CLAUDE.md Normal file
View File

@@ -0,0 +1,14 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5319 | 2:59 PM | 🔵 | Workout data structure details examined | ~355 |
| #5315 | " | 🔵 | Data layer architecture examined | ~366 |
| #5314 | " | 🔵 | Workout data structure examined | ~321 |
| #5298 | 2:56 PM | 🔵 | Achievement system data structure examined | ~333 |
</claude-mem-context>

View File

@@ -0,0 +1,16 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5391 | 10:20 PM | 🟣 | RevenueCat subscription system fully integrated and tested | ~656 |
| #5384 | 9:28 PM | 🟣 | Implemented RevenueCat subscription system | ~190 |
| #5375 | 8:38 PM | 🟣 | RevenueCat Entitlement Check Fixed with Proper API Usage | ~261 |
| #5355 | 7:48 PM | 🟣 | usePurchases Hook Exported from Shared Hooks | ~121 |
| #5354 | 7:47 PM | 🟣 | RevenueCat Hook for Subscription Management | ~281 |
| #5317 | 2:59 PM | 🔵 | Notification hook implementation examined | ~362 |
</claude-mem-context>

View File

@@ -3,11 +3,5 @@
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5177 | 11:54 AM | ✅ | Exported getWeeklyActivity from stores index | ~158 |
| #5171 | 11:53 AM | 🔄 | Refactored activityStore to remove computed helpers from state | ~256 |
| #5170 | " | 🔵 | Activity store implementation with persistence | ~220 |
*No recent activity*
</claude-mem-context>

View File

@@ -0,0 +1,12 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5391 | 10:20 PM | 🟣 | RevenueCat subscription system fully integrated and tested | ~656 |
| #5384 | 9:28 PM | 🟣 | Implemented RevenueCat subscription system | ~190 |
</claude-mem-context>

View File

@@ -0,0 +1,12 @@
<claude-mem-context>
# Recent Activity
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
### Feb 20, 2026
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #5228 | 1:25 PM | 🔄 | Removed v1 features and old scaffolding from TabataFit codebase | ~591 |
| #5224 | 1:24 PM | ✅ | Stage v1.1 files prepared for git commit - SwiftUI Button refactoring complete | ~434 |
</claude-mem-context>