- Rename workouts.tsx to explore.tsx with new functionality
- Add horizontal scrolling collections section with gradient cards
- Add featured workouts section
- Implement filtering by category (All, Full Body, Upper Body, Lower Body, Core, Cardio)
- Implement filtering by level (All Levels, Beginner, Intermediate, Advanced)
- Implement filtering by equipment (All, No Equipment, Band, Dumbbells, Mat)
- Add clear filters button when filters are active
- Add loading states with ActivityIndicator
- Add empty state for no results
- Update tab label from "Workouts" to "Explore"
- Add explore translations for en, fr, de, es
- Replace static data with React Query hooks
- Add loading skeletons for all data sections
- Show shimmer effect while data is loading
- Handle empty and error states gracefully
- Install @tanstack/react-query and async-storage-persister
- Wrap app with QueryClientProvider in root layout
- Migrate useSupabaseData hooks to React Query
- Add loading skeleton components for better UX
- Configure 5-minute stale time and 24-hour cache
- Add query keys for proper cache management
- Remove duplicate files and clean up structure
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>
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>
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>
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>
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>