# 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.