Commit Graph

8 Commits

Author SHA1 Message Date
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
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