PrepAI is a local-first health and fitness app built with Expo and React Native.
It tracks meals, workouts, hydration, sleep, body metrics, goals, supplement logs, and Apple Health imports in local SQLite storage on the device. Core tracking works without AI. Optional local AI features are wired through react-native-executorch and should enhance the app without becoming a dependency for the main experience.
The current v1 release is a free iPhone app on the iOS App Store with no subscriptions or in-app purchases.
- Local-first health tracking with on-device persistence
- Apple Health import for activity, workouts, sleep, hydration, and body measurements
- Meal logging, workout logging, progress tracking, and goal tracking
- Supplement and peptide-oriented protocol/log support
- Explicit JSON export/import for user-controlled backups
- Optional on-device AI features through ExecuTorch
- Expo/EAS release pipeline for App Store delivery
- Expo SDK
53.0.27 - React Native
0.79.6 - React
19 - Expo Router
- Zustand
- SQLite via
expo-sqlite - Hermes
- React Native New Architecture
PrepAI stores user data locally in SQLite. The live app is not built around Prisma, PostgreSQL, or a required cloud sync backend.
Local records currently include:
- local device profile
- health profile
- meals and meal items
- workouts and exercises
- progress logs
- weight entries
- water intake
- sleep entries
- goals
- supplement protocols and supplement logs
- food catalog items, custom foods, recipe templates, and local reminder metadata
HealthKit imports write Apple Health samples into local records so the app can use them for dashboards, trends, and local insights.
Local SQLite data survives normal app updates.
Deleting the app from iOS removes the app container, so local data should not be promised as reinstall-safe unless the user exported a backup first. For v1, the supported recovery path is explicit JSON export/import from Settings.
PrepAI should ship as a strong health tracker even when AI is unavailable.
AI must never block meal logging, workout logging, HealthKit sync, settings, export/import, or progress tracking.
- Preferred runtime:
react-native-executorch - Installed package:
react-native-executorch@0.8.4 - Local AI is intended for signed native builds, not Expo Go
- Local AI initialization is deferred so it does not slow first render
- Local AI should use local app records and avoid sending health data to a backend in the MVP
Do not make the first App Store submission depend on ExecuTorch output until a signed iPhone build has passed physical-device validation.
For App Store copy, describe AI conservatively:
- supported AI features run on device when the local model is available
- the core tracking experience works without AI
PrepAI requests Apple Health access only after the user chooses to sync Health data.
PrepAI can import useful Apple Health data into local daily records:
- activity
- workouts
- sleep
- hydration
- nutrition
- heart and recovery metrics
- body and body-measurement data
PrepAI can also save user-created records back to Apple Health when permission is granted:
- hydration logs
- meal nutrition totals
- workout logs
- body weight entries
HealthKit sync is best-effort and optional. Core local tracking still works without Apple Health permission. The app should not present itself as writing medical recommendations, diagnosing conditions, prescribing dosage, or replacing clinician guidance.
PrepAI v1 is intentionally no-login.
The app creates one local device profile on first launch and stores all SQLite records against that local profile ID. Core tracking, Apple Health sync, reminders, export/import, and optional AI features should work without account setup or a required network connection.
- App name:
PrepAI - Bundle identifier:
com.jongan69.prepai - EAS project:
@jongan69/prepai - Platform scope for v1: iPhone only
- Price: Free
- Category:
Health & Fitness
The app is configured in app.json and eas.json for a production iOS release with:
- Hermes enabled
- New Architecture enabled
- iOS deployment target
16.4 - Android release shrinking enabled
mainandproductionEAS profiles- App Store Connect app ID
6782733134
The app is being tightened around a local-first iPhone MVP with these shipping pillars:
- no required login
- Apple Health import into local daily records
- local meal logging with seeded foods, custom foods, and saved recipes
- workout logging and reusable workout templates
- supplement and peptide protocol tracking, reminders, adherence summaries, and notes
- optional on-device AI for meal plans, local health insights, and protocol organization
The remaining blockers for a true App Store-ready MVP are functional validation and native-device proof, not cloud account setup:
- finish signed iPhone validation for HealthKit, reminders, export/import, and local AI failure states
- complete a clean
bun run typecheck,bun run lint, andbun run test:readiness - confirm App Review contact phone through
APP_REVIEW_PHONE - finalize App Store Connect pricing, privacy answers, review notes, and screenshots
Settings includes explicit JSON export/import for local backups.
This is the supported v1 portability story:
- Export a JSON backup from Settings.
- Reinstall or move devices.
- Import the JSON backup from Settings.
Future iCloud or document-provider backup can be added later, but it is not the v1 guarantee.
PrepAI/
├── src/ # app code, routes, components, hooks, services, stores
├── scripts/ # release, verification, asset, and maintenance scripts
├── store/ # App Store screenshot assets
├── config/ # performance budgets and release config
├── plugins/ # local Expo config plugins
├── app.json # Expo app config
├── eas.json # EAS build/submit profiles
└── store.config.json # App Store metadata package config
- Node.js
18+ - Bun
- Xcode for iOS development
- a physical iPhone for full HealthKit and local-AI validation
bun installAt minimum, configure:
EXPO_PUBLIC_LOCAL_AI_ENABLED=true
EXPO_PUBLIC_LOCAL_AI_PROVIDER=executorch
EXPO_PUBLIC_CLOUD_AI_FALLBACK=falseThen start the app:
bun run devUseful variants:
bun run dev:tunnel
bun run dev:ios
bun run dev:android
bun run dev:webbun run dev
bun run dev:web
bun run dev:tunnel
bun run prebuildbun run typecheck
bun run lint
bun run test -- --runInBandbun run verify:production
bun run verify:release-env
bun run verify:appstore-urls
bun run test:readinessbun run perf:baseline
bun run analyze:atlas
bun run report:atlas
bun run guard:startup
bun run report:module-workAPP_REVIEW_PHONE="+15551234567" bun run verify:appstore
APP_REVIEW_PHONE="+15551234567" bun run submit:appstorebun run test:readiness is the main release gate. It currently covers:
- TypeScript
- ESLint
- startup guard scan
- import-time module work report
knipdead-code audit- Jest
- Expo Doctor
- iOS export
- web export
- production readiness verification
- performance baseline reporting
- cleanup of generated release artifacts
Additional production guardrails in the repo enforce:
- no blocked mock/demo terms in mobile code
- no oversized critical assets or screenshot package regressions
- Hermes and New Architecture staying enabled
- release config drift detection for native build settings
- Atlas-based module graph budgets
A real iPhone is required for final v1 validation because Expo Go is not the authority for:
- HealthKit permissions
- local notification scheduling
- ExecuTorch/local AI
- release startup performance
- App Store readiness
- fresh install opens onboarding
- onboarding creates a local profile without login
- dashboard loads
- add meal works
- add workout works
- add water works
- add weight works
- supplement protocol and log flows save locally
- progress screens reflect real local data or empty states
- JSON export works
- JSON import works
- HealthKit permission flow works
- local AI features either run on device or show a clear local-runtime/model error
Use this positioning for review:
PrepAI requests Apple Health access only after the user chooses to sync Health data. The app imports activity, workouts, sleep, hydration, nutrition, heart and recovery metrics, and body measurements to personalize nutrition, hydration, and workout planning. When the user logs hydration, meals, workouts, or body weight in PrepAI, the app can save those records to Apple Health if the user grants write permission. Users can continue using the app without granting Health access.
Keep peptide or supplement language framed as personal logging and wellness tracking. Do not position the app as prescribing, diagnosing, or recommending medical dosage.
Health, nutrition, recovery & on-device AI
Track meals, workouts, hydration, sleep, supplements, body metrics, and Apple Health data in one local-first wellness app with optional on-device AI.
PrepAI helps users track nutrition, workouts, hydration, sleep, supplements, body metrics, and Apple Health data in one local-first wellness app. Core records stay on device, with explicit JSON export/import when the user wants a portable backup. Optional on-device AI features deliver health insights and meal planning through ExecuTorch models, while the core tracking experience works fully without AI.
- marketing:
https://prepaihq.com - privacy:
https://prepaihq.com/#privacy - support:
https://prepaihq.com/#support
- This repository now uses
README.mdas the single markdown source of truth. - Older standalone markdown docs were consolidated here to reduce drift.
- If release or testing expectations change, update this file alongside the code/config change that caused it.