Millian Lamiaux
4c5bcc41c5
fix: support both EXPO_PUBLIC and NEXT_PUBLIC env vars
...
- Update Supabase client to check for both naming conventions
- Fixes connection issue when using Expo env vars in Next.js app
2026-03-17 10:14:32 +01:00
Millian Lamiaux
66a211ce8b
debug: add detailed error logging for trainers fetch
...
- Add console logs to debug Supabase connection
- Improve error message handling for non-Error objects
- Add client-side logging for Supabase configuration
2026-03-17 10:08:56 +01:00
Millian Lamiaux
42d9b2671b
fix: resolve trainers page issues and add seed data
...
- Add SQL seed data for trainers and collections
- Fix React hydration warning with suppressHydrationWarning
- Add empty state UI with friendly messaging
- Add error state UI with retry functionality
- Link Add Trainer buttons to /trainers/new page
2026-03-17 09:37:00 +01:00
Millian Lamiaux
b397f1fb17
chore: add supabase schema
...
- Add database schema definitions
- Include workouts, trainers, and related tables
2026-03-14 20:44:32 +01:00
Millian Lamiaux
79ead1404d
chore: update i18n translations
...
- Add new translation keys for de, en, es, fr locales
- Update screens.json files with new content
2026-03-14 20:44:25 +01:00
Millian Lamiaux
001b376fc0
feat: add shared card components
...
- Add CollectionCard component for collection displays
- Add WorkoutCard component for workout previews
- Reusable across mobile and admin-web
2026-03-14 20:44:19 +01:00
Millian Lamiaux
8c8dbebd17
feat: update mobile app screens
...
- Enhance browse tab with improved navigation
- Update home tab with new features
- Refactor profile tab
- Update paywall screen styling
2026-03-14 20:44:10 +01:00
Millian Lamiaux
64cdb75b39
chore: add testing dependencies
...
- Add vitest and @vitest/coverage-v8
- Add @testing-library/react and user-event
- Add jsdom for browser environment simulation
2026-03-14 20:43:47 +01:00
Millian Lamiaux
06af2ec10c
refactor: update workouts listing page
...
- Enhance workouts page with improved layout
- Add navigation to new workout pages
- Prepare for integration with new components
2026-03-14 20:43:26 +01:00
Millian Lamiaux
bd14922efa
feat: add workout management pages
...
- Add workout detail page at /workouts/[id]
- Add workout creation page at /workouts/new
- Integrate WorkoutForm component
2026-03-14 20:43:20 +01:00
Millian Lamiaux
9dd1a4fe7c
feat: add workout form component with advanced test mocking
...
- Add WorkoutForm component for creating/editing workouts
- Implement tabbed interface (Basics, Timing, Content, Media)
- Add form validation and error handling
- Add sophisticated mock infrastructure for Supabase
- Include 32 test cases covering rendering, validation, and submission
- Setup dynamic mock functions for testing different scenarios
2026-03-14 20:42:59 +01:00
Millian Lamiaux
6adf709dce
feat: add media upload component with comprehensive tests
...
- Add MediaUpload component for thumbnails and videos
- Implement drag-and-drop file upload
- Add upload progress tracking
- Include 42 test cases covering all scenarios
- Achieve 90%+ test coverage
2026-03-14 20:42:51 +01:00
Millian Lamiaux
e2e99887ac
feat: add storage utilities for file management
...
- Add storage.ts with Supabase storage helpers
- Add moveFilesFromTempToWorkout function
- Add UPLOAD_CONFIGS for file validation
- Comprehensive test suite with 95%+ coverage
2026-03-14 20:42:43 +01:00
Millian Lamiaux
3df7dd4a47
feat: add form input components with tests
...
- Add TagInput component for equipment tags
- Add ExerciseList component for workout exercises
- Both components include comprehensive test suites
- Add data-testid attributes for testability
2026-03-14 20:42:36 +01:00
Millian Lamiaux
71e9a9bdb5
feat: add reusable UI components with tests
...
- Add Select component with test coverage
- Add Switch component with test coverage
- Add Textarea component
- All components follow design system conventions
2026-03-14 20:42:30 +01:00
Millian Lamiaux
592d04e170
test: add vitest test infrastructure and configuration
...
- Add vitest.config.ts with coverage thresholds
- Add test/setup.ts with testing-library setup
- Add test/helpers.ts with test utilities
2026-03-14 20:42:22 +01:00
Millian Lamiaux
52429d957f
docs: add AGENTS.md with project best practices and workflows
2026-03-14 20:42:15 +01:00
Millian Lamiaux
2ad7ae3a34
feat: Apple Watch app + Paywall + Privacy Policy + rebranding
...
## Major Features
- Apple Watch companion app (6 phases complete)
- WatchConnectivity iPhone ↔ Watch
- HealthKit integration (HR, calories)
- SwiftUI premium UI
- 9 complication types
- Always-On Display support
- Paywall screen with RevenueCat integration
- Privacy Policy screen
- App rebranding: tabatago → TabataFit
- Bundle ID: com.millianlmx.tabatafit
## Changes
- New: ios/TabataFit Watch App/ (complete Watch app)
- New: app/paywall.tsx (subscription UI)
- New: app/privacy.tsx (privacy policy)
- New: src/features/watch/ (Watch sync hooks)
- New: admin-web/ (admin dashboard)
- Updated: app.json, package.json (branding)
- Updated: profile.tsx (paywall + privacy links)
- Updated: i18n translations (EN/FR/DE/ES)
- New: app icon 1024x1024
## Watch App Files
- TabataFitWatchApp.swift (entry point)
- ContentView.swift (premium UI)
- HealthKitManager.swift (HR + calories)
- WatchSessionManager.swift (communication)
- Complications/ (WidgetKit)
- UserDefaults+Shared.swift (data sharing)
2026-03-11 09:43:53 +01:00
Millian Lamiaux
f80798069b
feat: integrate theme and i18n across all screens
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-21 00:05:14 +01:00
Millian Lamiaux
f17125e231
feat: system light/dark theme infrastructure
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-21 00:04:59 +01:00
Millian Lamiaux
b60083341e
feat: extend user profile with onboarding data model
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-21 00:04:53 +01:00
Millian Lamiaux
540bb015c7
feat: notification, purchase, and analytics services
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-21 00:04:47 +01:00
Millian Lamiaux
d6bc7f5a4c
feat: i18n infrastructure with 4-locale support (en, fr, es, de)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-21 00:04:40 +01:00
Millian Lamiaux
6a94d545f2
feat: add dependencies for i18n, notifications, purchases, and analytics
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-21 00:04:29 +01:00
Millian Lamiaux
0bcd8185f0
chore: archive v1 docs and update project documentation
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-21 00:04:22 +01:00
Millian Lamiaux
e59c87fd1b
feat: i18n locale files for all screens (en, fr, es, de)
...
Adds translated strings for tabs, home, workouts, activity, browse, profile,
player, complete, collection, category, workout detail, and onboarding screens.
Unused voiceCoaching/hapticCues keys removed from onboarding.wow section.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 18:52:11 +01:00
Millian Lamiaux
aa75afb1b7
feat: onboarding flow with staggered-reveal wow screen
...
6-screen conversion funnel: Problem → Empathy → Solution → Wow → Personalization → Paywall.
Screen 4 uses a staggered-reveal feature list where all 4 features animate in
sequentially (150ms apart), replacing a carousel pattern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 18:52:05 +01:00
Millian Lamiaux
2d24831f8e
feat: category/collection detail screens + Inter font loading
...
New screens:
- Category detail (workout/category/[id]): filtered workout list
with SwiftUI segmented Picker for level sub-filter
- Collection detail (collection/[id]): hero header with gradient,
stats (workouts/minutes/calories), numbered workout list
Root layout:
- Inter font loading (400-900 weights) via @expo-google-fonts
- SplashScreen integration for font loading gate
- Route config for all screens with appropriate animations
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 13:24:35 +01:00
Millian Lamiaux
b0521ded5a
feat: workout flow — detail, player, and complete screens
...
Workout detail (workout/[id]):
- Dynamic data via useLocalSearchParams + getWorkoutById
- VideoPlayer hero with trainer color gradient fallback
- Exercise list, equipment, music vibe, "Start Workout" CTA
Player (player/[id]):
- useTimer hook drives phase transitions (PREP/WORK/REST/COMPLETE)
- useHaptics for phase changes and countdown ticks
- useAudio for sound effects (beeps, dings, completion chime)
- Real calorie tracking, progress ring, exercise display
- Saves WorkoutResult to activityStore on completion
Complete (complete/[id]):
- Reads real stats from activityStore history
- Burn bar, streak counter, calories/duration/completion stats
- Recommended workouts, share via expo-sharing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 13:24:21 +01:00
Millian Lamiaux
99d8fba852
feat: 5 tab screens wired to centralized data layer
...
All tabs use shared data, stores, and SwiftUI islands:
- Home: greeting from userStore, featured/popular workouts,
recent activity from activityStore, tappable collections
- Workouts: 50 workouts with SwiftUI Picker category filter,
trainer avatars, workout grid, "See All" links to categories
- Activity: streak banner, SwiftUI Gauges (workouts/minutes/
calories/best streak), weekly Chart, achievements grid
- Browse: featured collection hero, collection grid with emoji
icons, programs carousel, new releases list
- Profile: user card, subscription banner, SwiftUI List with
workout/notification settings (Switches persist via Zustand)
Tab layout uses NativeTabs with SF Symbols and haptic feedback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 13:24:06 +01:00
Millian Lamiaux
13faf21b8d
feat: shared components, hooks, and audio engine
...
Components:
- StyledText: unified text component replacing 5 local copies
- GlassCard: reusable glassmorphic card with blur background
- VideoPlayer: expo-video wrapper with preview/background modes
and gradient fallback when no video URL
Hooks:
- useTimer: extracted timer engine with phase transitions
(PREP → WORK → REST → repeat → COMPLETE), calorie tracking,
and actions (start, pause, resume, skip, stop)
- useHaptics: centralized haptic feedback respecting user settings
- useAudio: expo-av sound effects (countdown beep, phase ding,
completion chime) respecting soundEffects setting
Audio assets: 3 generated WAV files for timer events.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 13:23:50 +01:00
Millian Lamiaux
5477ecb852
feat: data layer with types, 50 workouts, and Zustand stores
...
Types: Workout, Exercise, Trainer, UserProfile, UserSettings,
WorkoutResult, Achievement, Collection, Program.
Mock data: 50 workouts across 5 categories (full-body, core,
upper-body, lower-body, cardio), 4 durations (4/8/12/20 min),
3 levels, 5 trainers. Plus 6 collections, 3 programs, and
8 achievements.
Zustand stores with AsyncStorage persistence:
- userStore: profile, settings (haptics, sound, voice, reminders)
- activityStore: workout history, streak tracking
- playerStore: ephemeral timer state (not persisted)
Helper lookups: getWorkoutById, getWorkoutsByCategory,
getTrainerById, getPopularWorkouts, getCollectionWorkouts, etc.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 13:23:32 +01:00
Millian Lamiaux
511e207762
feat: design system v2 with liquid glass aesthetic
...
Overhaul design constants for OLED-first dark mode:
- Colors: brand palette, phase colors, glass/shadow tokens, gradients
- Typography: Inter font scale matching iOS type system
- Spacing: 4px base unit with layout constants
- Border radius: liquid glass card radii
- Animations: spring/timing presets for UI transitions
Add v2 product docs (PRD, PDD, BDSD) and update CLAUDE.md.
Install expo-video, expo-sharing, @expo-google-fonts/inter.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 13:23:18 +01:00
Millian Lamiaux
54ac8326fa
chore: remove v1 features and old scaffolding
...
Remove onboarding flow (6 screens), timer engine, audio engine,
old components (themed-text/view, parallax-scroll, hello-wave),
old constants (theme, shadows, timer), and utility files that
were replaced by the v2 architecture.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-20 13:23:04 +01:00
Millian Lamiaux
fa189fe72e
feat: onboarding flow (6 screens) + audio engine + design system
...
Onboarding:
- 6-screen flow: Problem → Empathy → Solution → Wow → Personalization → Paywall
- useOnboarding hook with Zustand + AsyncStorage persistence
- MiniTimerDemo with live 20s timer + haptics
- Auto-redirect for first-time users
- Mock RevenueCat for dev testing
Audio:
- useAudioEngine hook with expo-av
- Phase sounds (count_3/2/1, beep, bell, fanfare)
- Placeholder music tracks
Design System:
- Typography component + constants
- GlassView component
- Spacing, shadows, animations, borderRadius constants
- Extended color palette (phase gradients, glass, surfaces)
Timer:
- Fix: handle 0-duration phases (immediate advance)
- Enhanced TimerDisplay with phase gradients
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-17 21:52:23 +01:00
Millian Lamiaux
31bdb1586f
feat: timer engine + full-screen timer UI
...
Implement the core timer feature following the src/features/ architecture:
- useTimerEngine hook: drift-free Date.now() delta countdown (100ms tick),
explicit state machine (IDLE → GET_READY → WORK → REST → COMPLETE),
event emitter for external consumers (PHASE_CHANGED, ROUND_COMPLETED,
COUNTDOWN_TICK, SESSION_COMPLETE), auto-pause on AppState interruption
(phone calls, background), expo-keep-awake during session
- TimerDisplay component: full-screen animated UI with 600ms color
transitions between phases, pulse animation on countdown, flash red
on last 3 seconds, round progress dots, IDLE/active/COMPLETE views
- TimerControls component: stop/pause-resume/skip buttons with Ionicons
- Timer route (app/timer.tsx): fullScreenModal wiring hook → display
- Home screen: dark theme with START button navigating to /timer
- Project docs: CLAUDE.md (constitution), PRD v1.1, skill files
- Shared constants: PHASE_COLORS, TIMER_DEFAULTS, formatTime utility
- Types: TimerPhase, TimerState, TimerConfig, TimerActions, TimerEvent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-17 19:05:25 +01:00
Millian Lamiaux
5cefe864ec
Initial commit
...
Generated by create-expo-app 3.5.3.
2026-02-17 17:34:06 +01:00