- Phase 0: Rename all Kine references to Tabata (types, files, imports, i18n, analytics events) - Phase 1: Add test coverage for tabataProgramStore, workoutProgramStore, and color utils (47 tests) - Phase 2: Remove all `any` types from production code with proper typed replacements - Phase 3: Replace ~60 raw console.* calls with __DEV__-gated logger utility - Phase 4: Verify .DS_Store housekeeping (already clean) 0 TypeScript errors, 583/583 tests passing.
318 lines
10 KiB
Markdown
318 lines
10 KiB
Markdown
# TabataFit — CLAUDE.md
|
|
> "Apple Fitness+ for Tabata" — Lis ce fichier EN ENTIER avant chaque session.
|
|
|
|
---
|
|
|
|
## 🎯 Vision
|
|
|
|
**TabataFit est l'Apple Fitness+ du Tabata.**
|
|
|
|
Une expérience premium, video-first, guidée par des coachs, qui transforme 4 minutes d'exercice en une expérience de fitness immersive.
|
|
|
|
*"Workouts that work. Beautifully."*
|
|
|
|
---
|
|
|
|
## 📱 Produit
|
|
|
|
### Positionnement
|
|
- **Analogy** : "If Apple made a Tabata app"
|
|
- **Focus** : Tabata/HIIT uniquement (pas multi-activité)
|
|
- **Durée** : 4-20 min (format Tabata)
|
|
- **Différenciateur** : Video-led + Coaching audio + Timer intelligent
|
|
|
|
### Stack Technique
|
|
| Domaine | Solution |
|
|
|---------|----------|
|
|
| Framework | Expo SDK 52 (managed) |
|
|
| Navigation | Expo Router v3 |
|
|
| State | Zustand + AsyncStorage |
|
|
| Video | expo-av → HLS streaming |
|
|
| Audio | expo-av (coaching + music) |
|
|
| Animations | React Native Animated |
|
|
| Payments | RevenueCat |
|
|
| Analytics | PostHog |
|
|
|
|
---
|
|
|
|
## 📚 Documentation
|
|
|
|
| Document | Description |
|
|
|----------|-------------|
|
|
| `TabataFit_PRD_v2.0.md` | Product Requirements — features, roadmap |
|
|
| `TabataFit_PDD_v2.0.md` | Product Design — screens, UX, flows |
|
|
| `TabataFit_BDSD_v2.0.md` | Brand Design — colors, typography, style |
|
|
|
|
**TOUJOURS lire ces documents avant de développer.**
|
|
|
|
---
|
|
|
|
## 🏗️ Architecture
|
|
|
|
```
|
|
src/
|
|
features/
|
|
home/ # Home tab - For You, Continue, Collections
|
|
workouts/ # Workouts tab - Categories, workout list
|
|
player/ # Active workout - Video, timer, stats
|
|
activity/ # Activity tab - Stats, trends, calendar
|
|
browse/ # Browse tab - Filters, trainers
|
|
profile/ # Profile tab - Settings, achievements
|
|
shared/
|
|
components/ # Button, Card, VideoPlayer, etc.
|
|
hooks/ # useTimer, useVideo, useHaptics
|
|
utils/ # formatTime, etc.
|
|
constants/ # colors, typography, spacing
|
|
app/ # Expo Router routes
|
|
(tabs)/
|
|
index.tsx # Home
|
|
workouts.tsx # Workouts
|
|
activity.tsx # Activity
|
|
browse.tsx # Browse
|
|
profile.tsx # Profile
|
|
player/
|
|
[id].tsx # Workout player
|
|
```
|
|
|
|
---
|
|
|
|
## 🎨 Design System
|
|
|
|
### Couleurs Principales
|
|
```typescript
|
|
BACKGROUND: '#000000' // Pure black
|
|
SURFACE: '#1C1C1E' // Charcoal
|
|
BRAND: '#FF6B35' // Flame orange
|
|
REST: '#5AC8FA' // Ice blue
|
|
SUCCESS: '#30D158' // Energy green
|
|
```
|
|
|
|
### Phase Colors (Critique)
|
|
```typescript
|
|
PREP: '#FF9500' // Orange-yellow
|
|
WORK: '#FF6B35' // Flame orange
|
|
REST: '#5AC8FA' // Ice blue
|
|
COMPLETE: '#30D158' // Green
|
|
```
|
|
|
|
### Typography
|
|
- **Font**: Inter (Google Fonts)
|
|
- **Timer**: 96px, Black weight
|
|
- **Titles**: 34px/28px/22px
|
|
- **Body**: 17px
|
|
|
|
---
|
|
|
|
## 📋 Priorités Développement
|
|
|
|
### Phase 1 — MVP (Semaines 1-4)
|
|
1. ✅ Design system setup
|
|
2. 🔲 Home tab (Featured, Continue Watching)
|
|
3. 🔲 Workouts tab (Categories)
|
|
4. 🔲 Pre-workout detail screen
|
|
5. 🔲 Video player avec timer overlay
|
|
6. 🔲 Workout complete screen
|
|
7. 🔲 20 workouts (mock data)
|
|
|
|
### Phase 2 — Core (Semaines 5-8)
|
|
1. 🔲 Activity tab (Stats, Calendar)
|
|
2. 🔲 Browse tab (Filters, Trainers)
|
|
3. 🔲 Profile tab (Settings)
|
|
4. 🔲 Apple Watch integration
|
|
5. 🔲 50 workouts total
|
|
|
|
### Phase 3 — Premium (Semaines 9-12)
|
|
1. 🔲 Offline downloads
|
|
2. 🔲 Burn Bar
|
|
3. 🔲 Subscription system
|
|
4. 🔲 Achievements
|
|
5. 🔲 100+ workouts
|
|
|
|
---
|
|
|
|
## 🧪 Test Environment
|
|
|
|
**Expo Go sur device physique** — pas de simulateur.
|
|
|
|
1. `npx expo start`
|
|
2. Scanner le QR code avec Expo Go
|
|
3. Même réseau Wi-Fi requis
|
|
|
|
---
|
|
|
|
## 📝 Règles de Code
|
|
|
|
1. **Un fichier = une responsabilité**
|
|
2. **Toute logique métier dans les hooks**
|
|
3. **Components = JSX uniquement**
|
|
4. **TypeScript strict** — pas de `any`
|
|
5. **Styles avec StyleSheet.create()**
|
|
6. **Dark mode only** — pas de light mode
|
|
|
|
---
|
|
|
|
## 🎬 Contenu Video
|
|
|
|
### Format Workout Video
|
|
- **Resolution**: 1080p minimum
|
|
- **Duration**: Match workout duration
|
|
- **Structure**:
|
|
- Intro (5s): Trainer greeting
|
|
- Prep (3s): 3-2-1 countdown
|
|
- Work (20s): Exercise demonstration
|
|
- Rest (10s): Recovery, next exercise preview
|
|
- Repeat for each round
|
|
- Outro (5s): Celebration, trainer sign-off
|
|
|
|
### Trainers (5 au launch)
|
|
1. **Emma** — Energy queen, beginner-friendly
|
|
2. **Jake** — Strength focus
|
|
3. **Mia** — Form perfectionist
|
|
4. **Alex** — Cardio beast
|
|
5. **Sofia** — Chill but effective
|
|
|
|
---
|
|
|
|
## 💰 Monetization
|
|
|
|
### Free Tier
|
|
- 3 workouts free forever
|
|
- Basic stats
|
|
- Ads between workouts
|
|
|
|
### Premium ($6.99/mo or $49.99/yr)
|
|
- Unlimited workouts
|
|
- Offline downloads
|
|
- Apple Watch integration
|
|
- Advanced stats
|
|
- No ads
|
|
- Family Sharing
|
|
|
|
---
|
|
|
|
## 🚀 Commands
|
|
|
|
Use `rtk` (token-optimized CLI proxy) for all non-interactive commands.
|
|
|
|
```bash
|
|
npx expo start # Development (interactive, no rtk)
|
|
npx expo start --tunnel # If network issues
|
|
npx expo start --clear # Clear cache
|
|
rtk tsc --noEmit # Type check (grouped errors)
|
|
eas build --profile dev # Dev build
|
|
```
|
|
|
|
---
|
|
|
|
## 📖 Comment Utiliser les Skills
|
|
|
|
Voir `.claude/skills/` pour les guides spécialisés.
|
|
|
|
---
|
|
|
|
*Document updated: February 18, 2026*
|
|
*Version: 2.0*
|
|
*Project: TabataFit — Apple Fitness+ for Tabata*
|
|
|
|
<!-- gitnexus:start -->
|
|
# GitNexus — Code Intelligence
|
|
|
|
This project is indexed by GitNexus as **tabatago** (1839 symbols, 3401 relationships, 52 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
|
|
|
|
> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first.
|
|
|
|
## Always Do
|
|
|
|
- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
|
|
- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows.
|
|
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
|
|
- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
|
|
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`.
|
|
|
|
## When Debugging
|
|
|
|
1. `gitnexus_query({query: "<error or symptom>"})` — find execution flows related to the issue
|
|
2. `gitnexus_context({name: "<suspect function>"})` — see all callers, callees, and process participation
|
|
3. `READ gitnexus://repo/tabatago/process/{processName}` — trace the full execution flow step by step
|
|
4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed
|
|
|
|
## When Refactoring
|
|
|
|
- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`.
|
|
- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code.
|
|
- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed.
|
|
|
|
## Never Do
|
|
|
|
- NEVER edit a function, class, or method without first running `gitnexus_impact` on it.
|
|
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
|
|
- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph.
|
|
- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope.
|
|
|
|
## Tools Quick Reference
|
|
|
|
| Tool | When to use | Command |
|
|
|------|-------------|---------|
|
|
| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` |
|
|
| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` |
|
|
| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` |
|
|
| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` |
|
|
| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` |
|
|
| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` |
|
|
|
|
## Impact Risk Levels
|
|
|
|
| Depth | Meaning | Action |
|
|
|-------|---------|--------|
|
|
| d=1 | WILL BREAK — direct callers/importers | MUST update these |
|
|
| d=2 | LIKELY AFFECTED — indirect deps | Should test |
|
|
| d=3 | MAY NEED TESTING — transitive | Test if critical path |
|
|
|
|
## Resources
|
|
|
|
| Resource | Use for |
|
|
|----------|---------|
|
|
| `gitnexus://repo/tabatago/context` | Codebase overview, check index freshness |
|
|
| `gitnexus://repo/tabatago/clusters` | All functional areas |
|
|
| `gitnexus://repo/tabatago/processes` | All execution flows |
|
|
| `gitnexus://repo/tabatago/process/{name}` | Step-by-step execution trace |
|
|
|
|
## Self-Check Before Finishing
|
|
|
|
Before completing any code modification task, verify:
|
|
1. `gitnexus_impact` was run for all modified symbols
|
|
2. No HIGH/CRITICAL risk warnings were ignored
|
|
3. `gitnexus_detect_changes()` confirms changes match expected scope
|
|
4. All d=1 (WILL BREAK) dependents were updated
|
|
|
|
## Keeping the Index Fresh
|
|
|
|
After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it:
|
|
|
|
```bash
|
|
npx gitnexus analyze
|
|
```
|
|
|
|
If the index previously included embeddings, preserve them by adding `--embeddings`:
|
|
|
|
```bash
|
|
npx gitnexus analyze --embeddings
|
|
```
|
|
|
|
To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.**
|
|
|
|
> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`.
|
|
|
|
## CLI
|
|
|
|
| Task | Read this skill file |
|
|
|------|---------------------|
|
|
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
|
|
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
|
|
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
|
|
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
|
|
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
|
|
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |
|
|
|
|
<!-- gitnexus:end -->
|