Your all-in-one fitness companion for tracking workouts, nutrition, and health β powered by AI.
Musclog is a cross-platform mobile fitness application built with React Native and Expo. It combines workout logging, nutrition tracking, menstrual cycle awareness, and AI-powered coaching into a single, cohesive experience β all stored locally with WatermelonDB.
Note: Currently only dark theme is available.
Read the blog post about how this app came to be.
- Log workouts with sets, reps, and weights
- Create and manage custom workout templates and exercises
- Schedule workouts on a weekly basis with reminders
- View lifting volume stats and progression over time
- Comprehensive exercise library with muscle group categorization
- Plan workouts on a weekly basis to ensure consistency
- Receive reminders to stay on track with your goals
- Daily Food Logging: Track meals (breakfast, lunch, dinner, snack) with detailed macro and calorie info
- Barcode Scanning: Add foods instantly by scanning product barcodes with your camera
- Food Search: Search the Open Food Facts database for nutritional information
- Custom Foods & Meals: Create your own food entries and save meal templates for quick access
- Micronutrient Tracking: Track 40+ vitamins and minerals beyond basic macros
- AI Macro Estimation: Use AI vision to estimate nutrition from food photos or nutrition label images
- Retrospective Logging: Log meals for past dates
- Empirical TDEE: Calorie needs estimated from actual activity logs
- Track cycle phases: menstrual, follicular, ovulation, and luteal
- Predict next period and fertile window
- Adjust workout intensity automatically based on current cycle phase
- Support for hormonal and non-hormonal birth control types
- Toggle cycle tracking on or off at any time
- Visualize fitness progress with charts and graphs
- Track body metrics: weight, body fat %, and custom measurements
- Daily and weekly AI-generated insights on workouts and nutrition
- Dual AI Support: Google Gemini (2.0/2.5, via OAuth or API key) or OpenAI (GPT-4, GPT-4o, O1, O3)
- In-App Chat: Conversational AI coach for workout and nutrition advice
- Photo Analysis: AI-powered food photo and nutrition label analysis
- Workout Generation: AI-generated workout plans tailored to your goals
- Flexible Config: Choose model, configure API keys, set insight frequency
- Sync with Google Health Connect (Android) for weight, nutrition, and exercise data
- 7-day lookback on health data import
- Export your full database as an encrypted JSON file
- Import data across devices or as a backup
- Support for JSON and CSV formats
- All data stored locally on-device via WatermelonDB
- Sensitive fields (nutrition logs, user metrics) encrypted at rest with AES
- AI features are fully optional β app works offline without them
| Layer | Technology |
|---|---|
| Framework | React Native 0.81 + Expo Router 6 |
| Language | TypeScript 5.9 |
| Database | WatermelonDB 0.28 (SQLite-backed, reactive) |
| Styling | NativeWind 4.2 (Tailwind CSS for React Native) |
| Icons | Lucide React Native |
| Charts | Victory Native |
| AI | Google Generative AI + OpenAI SDK |
| Camera | expo-camera, Quagga2, ZXing, ML Kit OCR |
| Health | expo-health-connect / react-native-health-connect |
| Localization | i18next + react-i18next |
| Animations | React Native Reanimated 4 |
| Error Tracking | Sentry |
| Testing | Jest + React Testing Library |
| Build | EAS (Expo Application Services) |
musclog/
βββ app/ # Expo Router screens
β βββ _layout.tsx # Root layout
β βββ index.tsx # Dashboard / home
β βββ onboarding/ # Onboarding flow
β βββ workout/ # Workout screens
β βββ nutrition/ # Nutrition/food screens
β βββ cycle.tsx # Menstrual cycle tracking
β βββ progress.tsx # Analytics & charts
β βββ profile.tsx # User profile & metrics
β βββ settings.tsx # App settings
β βββ chat.tsx # AI coach chat
β βββ aiSettings.tsx # AI configuration
βββ components/ # Reusable UI components
β βββ NavigationMenu.tsx # Custom bottom nav bar
β βββ MasterLayout.tsx # Root layout wrapper
β βββ CoachModal.tsx # AI coach chat modal
β βββ SmartCameraModal.tsx # AI photo analysis modal
β βββ PhaseWheel.tsx # Cycle phase visualization
β βββ ...
βββ database/ # WatermelonDB models & services
β βββ models/ # Database models
β βββ services/ # Service layer (CRUD + business logic)
β βββ migrations/ # DB schema migrations
β βββ seeders/ # Initial data seeding
βββ hooks/ # Custom React hooks
βββ lang/locales/en-us/ # Localization strings
βββ assets/ # Images, icons, exercise photos
βββ constants/ # App-wide constants
βββ utils/ # Utility functions
- Node.js (LTS)
- npm or yarn
- Expo CLI
- For Android: Android Studio + emulator or physical device
- For iOS: macOS with Xcode
# 1. Clone the repository
git clone <repo-url>
cd musclog
# 2. Install dependencies
npm install
# 3. Configure environment variables
cp .env.example .env
# Edit .env to add optional API keys (see below)
# 4. Start the development server
npm startnpm run android # Android emulator or device
npm run ios # iOS simulator (macOS only)
npm run web # Web browserAI features are optional. To enable them, add your keys to .env:
# USDA api key
EXPO_PUBLIC_USDA_API_KEY=your_gemini_key
# Sentry error tracking (optional)
EXPO_PUBLIC_SENTRY_DSN=your_sentry_dsn
SENTRY_AUTH_TOKEN=your_sentry_tokenFor production builds, use EAS Secrets instead of committing keys to version control.
npm testnpm run lint # Lint code
npm run format # Format with Prettier
npm run typecheck # TypeScript type checking
npm run check-translations # Validate i18n keys
npm run start-clear # Start with cleared cacheMusclog uses EAS Build for production builds.
# Android
npm run build-android # Production APK/AAB
npm run build-android-preview # Preview/internal testing build
# Submit to Google Play
npm run submit-androidContributions are welcome! Please open an issue or pull request. For larger changes, open an issue first to discuss the approach.
This project is open source. See the LICENSE file for details.







