Expo + HealthKit Fitness Stack
The fitness-ready stack: Expo, Supabase, HealthKit on iOS, Health Connect on Android, push for streaks. Ships a real fitness app in 3 weekends.
The fitness-ready stack: Expo, Supabase, HealthKit on iOS, Health Connect on Android, push for streaks. Ships a real fitness app in 3 weekends.
Starter Kit
Expo + Supabase + HealthKit ships a real fitness app in 3 weekends. What it covers, timezone-aware streak logic, and the Apple review rules.
Fitness, wellness, habit tracking, anything that wants to read health data from the phone and keep a retention loop alive with pushes. Native iOS and Android. Supabase holds the non-health data (user state, workout sessions, streaks).
expo-dev-client because HealthKit needs a native module and Expo Go will not work.react-native-health for HealthKit read.Fitness app with workout logging, HealthKit step/energy read, streak logic, and streak-save push:
About 32 hours total. Shipped one myself, 3 weekends.
Three reads cover almost every fitness v1:
Everything else is computed from those three. Do not start with 20 data types.
Streaks are harder than they look. The edge case that breaks every naive implementation is timezones. A user in Tokyo logs a workout at 11pm local. Your server sees 2pm UTC. If you store the date in UTC the streak breaks when they cross midnight local.
Fix: store streak dates in the user local day. The Postgres function takes the user timezone (tracked in their profile) and computes current_date AT TIME ZONE user_tz.
Streak save push fires at N minutes before the end of the user local day if they have not logged today. Batched nightly, filtered by user timezone. Not a cron per user — one cron per hour that handles everyone whose local day is about to end.
profiles with timezone, workouts, streaks.recompute_streak that is timezone-aware.One-time purchase. Full-stack boilerplate + 11 AI agents. No subscription.