Millian Lamiaux f11eb6b9ae fix: add missing Workout fields to program workouts and guard against undefined level
Program workouts built by buildProgramWorkouts() were missing level,
rounds, calories, and other Workout-interface fields, causing
workout.level.toLowerCase() to crash on the detail, collection, and
category screens. Added derived defaults (level from week number,
category from program id, standard Tabata timings) and defensive
fallbacks with ?? 'Beginner' at all call sites. Also fixed a potential
division-by-zero when exercises array is empty.
2026-03-25 23:28:47 +01:00
2026-02-17 17:34:06 +01:00
2026-02-17 17:34:06 +01:00

TabataFit

Apple Fitness+ for Tabata — The Premium HIIT Experience

Expo TypeScript License Tests Coverage

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.

Features

  • 🎬 Video-led workouts — HD video demonstrations by professional trainers
  • ⏱️ Smart timer — Tabata timer with work/rest phases
  • 🔥 Burn Bar — Compare your calories with the community
  • 📊 Activity tracking — Streaks, stats, and trends
  • 🎵 Music sync — Curated playlists for each workout
  • Apple Watch — Heart rate and activity rings

Tech Stack

  • Framework: Expo SDK 52
  • Navigation: Expo Router v3
  • State: Zustand
  • Video: expo-av (HLS streaming)
  • Payments: RevenueCat
  • Analytics: PostHog

Getting Started

# Install dependencies
npm install

# Start development server
npx expo start

# Run on device (scan QR with Expo Go)

Documentation

Document Description
PRD v2.0 Product Requirements
PDD v2.0 Product Design
BDSD v2.0 Brand Design

Project Structure

src/
  features/
    home/        # Home tab
    workouts/    # Workouts browser
    player/      # Video player + timer
    activity/    # Stats & history
    browse/      # Filters & trainers
    profile/     # User settings
  shared/
    components/  # Reusable UI
    hooks/       # Custom hooks
    constants/   # Design tokens
app/             # Expo Router routes

Testing

# Unit tests with coverage
npm run test:coverage

# Component render tests
npm run test:render

# All unit + render tests
npm test && npm run test:render

# Maestro E2E (requires Expo dev server + simulator)
npm run test:maestro

# Admin-web tests
cd admin-web && npm test           # Unit tests
cd admin-web && npm run test:e2e   # Playwright E2E

Test Coverage

Layer Target Tests
Stores 80%+ playerStore, activityStore, userStore, programStore
Services 80%+ analytics, music, purchases, sync
Hooks 70%+ useTimer, useHaptics, useAudio, usePurchases, useMusicPlayer, useNotifications, useSupabaseData
Components 50%+ StyledText, VideoPlayer, WorkoutCard, GlassCard, CollectionCard, modals, Skeleton
Data 80%+ achievements, collections, programs, trainers, workouts

E2E Tests

  • Mobile (Maestro): Onboarding, tab navigation, program browse, workout player, activity, profile/settings
  • Admin Web (Playwright): Auth, navigation, workouts CRUD, trainers, collections

License

Proprietary — All rights reserved.


Built with ❤️ for HIIT lovers

Description
No description provided
Readme 1.8 MiB
Languages
TypeScript 94.5%
JavaScript 3.3%
PLpgSQL 1.7%
CSS 0.3%
Shell 0.2%