Why fitness is a good first AI app
Fitness apps are the easiest category to ship with AI help. The user flow is simple. Sign in, log a workout, see progress, keep a streak. Everything else is polish.
The category also forgives MVP quality. Your competitors on the App Store are not all polished. If yours logs workouts, shows streaks, and pushes a notification when the streak is about to break, you are already ahead of half of them.
I shipped one myself. Took around 3 weekends with the same system I sell here.
What you actually need to build
A fitness app is four moving parts.
- Auth: Apple Sign In (required by App Store review) plus a Supabase email fallback.
- Data: Workout entries, exercise library, user streaks. A single
workouts table with a JSON body carries you a long way at this stage.
- Health data: iOS HealthKit read access for steps and heart rate. Android Health Connect on the other side.
- Retention loop: Push notifications when a streak is about to break. This single feature carries most of your D7 retention.
No social feed. No chat. Not in v1.
The stack I use
- React Native + Expo — native iOS and Android from one codebase.
- Supabase — auth, Postgres, row-level security, storage.
- NestJS — REST API in front of Supabase so the mobile app never holds service keys.
- EAS Build — binary builds and OTA updates.
- Claude Code + 11 AI agents — automates the repetitive parts: scaffolding screens, wiring the Supabase schema, generating App Store metadata.
All of this comes pre-wired in Shippen. Auth, Supabase schema, push, EAS config. The AI agents scaffold the rest.
Real build time
I logged my hours on my own fitness app.
- Weekend 1: Auth, workout logging screen, Supabase schema. About 14 hours.
- Weekend 2: HealthKit read, streaks, push notifications. About 12 hours.
- Weekend 3: App Store screenshots, metadata, review fixes, submission. About 9 hours.
Total: ~35 hours across 3 weekends, not counting one review rejection I had to fix. That includes design decisions and AI prompting time, not just typing.
If you reuse the boilerplate, realistically expect ~20 hours instead of 35. Most of my time went into setup I already had.
Where people get stuck
- Apple review for HealthKit: Apple rejects fitness apps that use HealthKit without a clear reason string in
Info.plist. Keep it honest and specific.
- Streak timezone bugs: Streaks must be timezone-aware or you lose streak counts when users travel. Store streak dates in the user local day, not UTC.
- Push permissions at the wrong time: Do not ask for push on first launch. Ask after the first workout is logged. Opt-in rate roughly doubles.
I learned all three the hard way. You do not have to.
Skip the setup
The whole stack above is pre-configured in Shippen. Auth, Supabase schema, push notifications, HealthKit scaffolds, EAS Build config, App Store submission automation.
See pricing