# StreakFit — Thèse produit : rétention & différenciation

## Le problème
Les apps fitness meurent de la **spirale de culpabilité** : rater un jour casse le streak → sentiment d'échec → abandon.
La majorité des apps à streak *amplifient* le churn. StreakFit inverse ça : **le streak est indulgent et social.**

## Les 5 différenciateurs (ordre d'impact rétention)

### 1. 🔥 Moteur de streak indulgent — LE cœur (couche `functional/streaks`)
- **Freezes** : jetons gagnés par régularité (ex : +1 tous les 7 jours), consommés automatiquement pour couvrir un trou d'1 jour.
- **Jours de repos qui comptent** : un `streak_day` source='rest' entretient la flamme (objectif = régularité, pas surentraînement).
- **Objectif hebdo** : atteindre X séances/semaine garde le streak "vivant" même sans séance quotidienne (`goals`).
- **Streak repair** : logger rétroactivement la veille (fenêtre 24-48h) pour réparer une série.
- Anti-churn *by design* : la flamme ne meurt pas à cause de la vraie vie.

### 2. 👥 Streaks de crew — redevabilité sociale (couche `functional/crews` à venir)
- Rejoindre un **crew/box** ; flamme **collective** (le crew maintient une série commune).
- Voir les flammes des membres, un mini-classement bienveillant, nudge quand un membre va casser sa série.
- Le cross-training est communautaire → la pression sociale positive = rétention.

### 3. ⚡ Log sans friction (couche `tracking` + front PWA)
- Sets en un tap, timer de repos auto, "répéter la dernière séance", pré-remplissage du dernier poids/reps.
- **Offline-first** (PWA + background sync) : logger au gym sans réseau, sync au retour.

### 4. 📈 Célébrer le progrès (couche `tracking` : `personal_records`, volume)
- Confettis/anim sur nouveau PR, courbes force/volume, milestones fun ("12 t déplacées cette semaine"), mensurations.
- Progrès visible = motivation. Tout est calculé côté back, renvoyé prêt-à-afficher.

### 5. 🔗 Tout compte — intégrations (couche `technical/integrations` + futures `strava`/`garmin`)
- Une activité Strava/Garmin entretient le streak (un run compte). Mobilité d'un jour off compte.
- Le contrat `ActivityProvider` rend l'ajout d'une source trivial (nouvelle couche, zéro modif du noyau).

## Boucle d'engagement (rappels ntfy — couche `technical/notifications` à venir)
- Cron quotidien : détecte les streaks "à risque" (pas d'activité aujourd'hui, freeze insuffisant) → push ntfy bienveillant.
- "🔥 ta série de N jours a besoin d'une séance aujourd'hui" / "😌 tu as gagné un jour de repos" / "🏆 nouveau PR débloqué".
- Jamais spam : 1 rappel/jour max, désactivable, respect du fuseau (`users.timezone`).

## Identité visuelle
Thème **moderne, accent flamme** : base claire (off-white) + dark mode, dégradé flamme orange→rouge (#F97316 → #EF4444),
ember/amber (#FBBF24) en highlight. La **flamme du streak est le héros visuel** (taille/intensité ∝ au streak).
Typo sans moderne, chiffres en display bold (le compteur de streak). Cartes arrondies, chaleur subtile.

## Priorisation build
V1 (MVP sticky) : streaks indulgents + tracking sans friction + exercices + progrès/PR + PWA installable.
V1.1 : rappels ntfy + intégrations (1 provider, ex Strava).
V1.2 : crews / social.
