A comprehensive, unified fitness tracking mobile app that combines gym workouts, calorie tracking, step counting, personal records, and workout templates in one cohesive solution.
This app provides an all-in-one fitness tracking experience with:
- Gym Tracking: Log workouts with exercise database, sets, reps, and weight
- Exercise Library: Browse 54+ exercises and create custom exercises with full CRUD
- Personal Records: Automatically track your strength gains and PRs
- Workout Templates: Save and reuse your favorite workout routines
- Analytics Dashboard: Visualize your progress with interactive charts and insights
- 1RM Calculator: Calculate your one rep max and compare to strength standards
- Calorie & Nutrition: Track daily meals with calories and macros
- Steps & Activity: Monitor daily step count toward your goal
- Weekly Statistics: Track progress with week-over-week comparisons
- Rest Timer: Built-in countdown timer between sets
- Unified Daily View: See your complete fitness snapshot in one place
Regular gym-goer trying to lose fat and/or gain muscle who:
- Tracks workouts 3-5x per week
- Wants to track strength gains and personal bests
- Prefers simplicity over complex features
- Values seeing progress over time
- React Native with Expo SDK 54 (TypeScript)
- React Navigation (bottom tabs + stack navigation)
- Zustand for state management with centralized stores
- SQLite (expo-sqlite) for local-first data persistence
- Expo Vector Icons for UI
- Compiled for iOS, Android, and Web
src/
βββ types/ # TypeScript type definitions
β βββ index.ts
βββ stores/ # Zustand state management
β βββ index.ts # Store exports
β βββ userStore.ts # User profile and preferences
β βββ workoutStore.ts # Workouts, templates, PRs (with caching)
β βββ nutritionStore.ts # Daily nutrition and meals
β βββ dailyTrackingStore.ts # Steps, weight, weekly stats
β βββ uiStore.ts # Modal state and UI
βββ services/ # Data storage and business logic
β βββ database.ts # SQLite database management
β βββ storage.ts # Data access layer
βββ screens/ # Main app screens
β βββ TodayScreen.tsx
β βββ WorkoutsScreen.tsx
β βββ WorkoutDetailScreen.tsx
β βββ ExerciseLibraryScreen.tsx
β βββ ExerciseDetailScreen.tsx
β βββ AnalyticsScreen.tsx
β βββ NutritionScreen.tsx
β βββ AchievementsScreen.tsx
β βββ ProfileScreen.tsx
βββ components/ # Reusable UI components
β βββ Card.tsx
β βββ ProgressBar.tsx
β βββ GlobalModals.tsx # Centralized modal rendering
β βββ ExercisePicker.tsx
β βββ ExerciseCard.tsx
β βββ SwipeableRow.tsx
β βββ ExpandableFAB.tsx
β βββ TemplatePicker.tsx
β βββ RestTimer.tsx
β βββ WorkoutTimer.tsx
β βββ AddWorkoutModal.tsx
β βββ EditWorkoutModal.tsx
β βββ analytics/ # Analytics and strength components
β β βββ StrengthCalculator.tsx
β βββ ...
βββ navigation/ # Navigation setup
β βββ AppNavigator.tsx
β βββ WorkoutsStack.tsx
βββ hooks/ # Custom React hooks
β βββ useTimer.ts
β βββ useResponsive.ts
β βββ useAnalyticsData.ts
βββ data/ # Static data and databases
β βββ exercises.ts # Exercise database (54 exercises)
βββ utils/ # Utilities and helpers
βββ dateUtils.ts # Week calculation utilities
βββ sampleData.ts # Sample data generator
βββ exerciseHelpers.ts # Exercise management utilities
βββ analyticsCalculations.ts # Analytics data processing
βββ analyticsChartConfig.ts # Chart configurations
βββ oneRepMax.ts # 1RM calculation formulas
βββ strengthStandards.ts # Strength level standards
βββ haptics.ts # Haptic feedback utilities
βββ theme.ts # Color theme
- Node.js (v16 or higher)
- npm or yarn
- Expo Go app on your mobile device (for testing)
- Install dependencies:
npm install- Start the development server:
npm start- Scan the QR code with:
- iOS: Camera app
- Android: Expo Go app
# iOS (requires macOS)
npm run ios
# Android
npm run android
# Web
npm run web# Web build
npm run build:web- Log workouts with exercise name, sets, reps, and weight
- Exercise database with 54 common exercises organized by muscle group:
- Chest (8 exercises)
- Back (10 exercises)
- Shoulders (7 exercises)
- Arms (8 exercises)
- Legs (10 exercises)
- Core (6 exercises)
- Cardio (5 exercises)
- Custom exercises - Add exercises not in the database
- Edit workouts - Modify past workouts
- Delete workouts - Remove workouts with confirmation
- Workout history - View all past workouts sorted by date
- Workout detail view - See full exercise breakdown with sets and reps
- Automatic PR tracking - Detects new personal bests when logging workouts
- PR notifications - Congratulatory alerts when you set new PRs
- PR screen - Dedicated tab showing all personal records
- Categorized display - PRs grouped by muscle group with color coding
- PR management - View and delete personal records
- Shows exercise name, weight, reps, and date achieved
- Save workouts as templates - Convert any workout into a reusable template
- Template library - Browse all saved templates in Profile screen
- Quick workout creation - Load templates to instantly populate exercises
- Template management - Delete templates with confirmation
- Customizable - Modify template before saving as workout
- Browse exercise database - 54 built-in exercises organized by muscle group
- Custom exercises - Create your own exercises with full CRUD operations
- Exercise details - View exercise information, default sets/reps, usage statistics
- Workout history - See all workouts that include a specific exercise
- Search and filter - Find exercises by name or filter by category
- View toggles - Filter by All, Built-in, or Custom exercises
- Swipeable actions - Quick edit/delete for custom exercises
- Custom badges - Visual indicators for user-created exercises
- Edit with workout updates - Option to rename exercise across all workouts
- Workout frequency chart - Visualize workouts per week over time
- Volume progression - Track total weight lifted with trend analysis
- Exercise distribution - Pie chart showing muscle group balance
- Weight progression - Line chart tracking strength gains per exercise
- Personal records timeline - Chronological view of PRs achieved
- Summary statistics - Total workouts, volume, PRs, and active days
- Interactive charts - Touch to see detailed data points
- Time period filters - View 1, 3, or 6 month analytics
- Trend indicators - See if metrics are improving or declining
- One Rep Max calculator - Estimate your 1RM from any weight/rep combination
- Multiple formulas - Uses Epley, Brzycki, Lander, and Lombardi formulas with averaged result
- Strength standards - Compare your lifts to population benchmarks (Beginner to Elite)
- Supported lifts - Bench Press, Squat, Deadlift, Overhead Press, Barbell Row
- Body weight ratios - Standards based on your logged body weight
- Gender-specific - Toggle between male and female strength standards
- Progress tracking - See your progress percentage toward the next strength level
- Training weights table - Shows recommended weights for different rep ranges based on your 1RM
- Built-in countdown timer - Time your rest periods between sets
- Quick presets - 30s, 60s, 90s, 120s, 180s buttons
- Visual progress - Large circular timer with progress ring
- Vibration feedback - Phone vibrates when timer completes
- Alert notification - Pop-up when rest period is over
- Start/pause/reset controls - Full timer management
- Weekly overview - See current week's progress at a glance
- Week-over-week comparison - Compare to previous week with arrows and percentages
- Metrics tracked:
- Total workouts completed
- Total/average calories vs target
- Total/average steps vs goal
- Days active
- Color-coded indicators - Green for improvements, red for decreases
- Progress bars - Visual completion percentage
- Log meals with calories and macros (protein, carbs, fats)
- Daily calorie target with progress bar
- Macro breakdown - Visual distribution of protein, carbs, and fats
- Meal history - View all meals for the day
- Nutrition screen - Dedicated tab for detailed nutrition view
- Manual step entry - Update your daily step count
- Daily step goal tracking with progress bar
- Quick update from Today screen
- Step history - Track steps over time
- Modern dark theme - Rich blue-gray backgrounds with vibrant accents
- Responsive design - Works on iOS, Android, and Web
- Smooth animations - Modal transitions and screen changes
- Consistent styling - Rounded corners and cohesive design language
- Color coding:
- π’ Green for Today/Steps
- π΅ Blue for Workouts
- π£ Purple for Exercises
- π‘ Gold for Personal Records
- π Orange for Analytics
- π΄ Red for Nutrition
- π£ Purple for Profile
- Edit profile - Name, calorie target, step goal
- Weight units - Toggle between lbs and kg
- Template management - View and delete workout templates
- Sample data - Load test data for exploring the app
- Data management:
- Delete workouts
- Delete nutrition data
- Delete steps
- Reset all data
Seven-tab bottom navigation:
- Today - Daily overview dashboard
- Workouts - Exercise tracking and history
- Exercises - Exercise library and custom exercise management
- PRs - Personal records
- Analytics - Charts and progress visualization
- Nutrition - Calorie & macro tracking
- Profile - Settings and preferences
- User: Profile with daily calorie target and step goal
- WorkoutLog: Individual workout session with exercises
- ExerciseLog: Exercise within a workout (sets, reps, weight)
- PersonalRecord: Best performance for each exercise
- WorkoutTemplate: Saved workout routine for reuse
- DailyNutrition: Daily meal tracking with calorie target
- Meal: Individual meal entry with macros
- DailySteps: Daily step count and goal
- WeeklyStats: Aggregated weekly statistics
- Exercise: Exercise from the database
All data is stored locally using SQLite for a fast, offline-first experience with efficient indexed queries.
The main dashboard showing:
- Weekly statistics card - Current week progress vs previous week
- Current date
- Today's workout (or option to log)
- Calorie progress with visual bar
- Step progress with visual bar
Pull down to refresh data.
- Tap "Log Workout" from Today screen
- (Optional) Tap "Use Template" to load a saved routine
- Enter workout name
- Add exercises:
- Tap "Select from exercise database" to browse 54+ exercises
- Or enter a custom exercise name
- Set number of sets, reps, and weight
- Tap "Add Exercise"
- Repeat for all exercises
- (Optional) Tap timer icon to start rest timer between sets
- (Optional) Tap "Save as Template" to reuse this workout
- Tap "Save" to log the workout
- If you set any PRs, you'll see a congratulatory alert!
- Navigate to PRs tab
- Browse records grouped by muscle group
- See your best weight and reps for each exercise
- Tap trash icon to delete a record
- While logging a workout, tap the timer icon in the header
- Select a preset time (30s, 60s, 90s, 120s, 180s)
- Tap "Start" to begin countdown
- Timer will vibrate and alert when complete
- Use "Pause" or "Reset" as needed
- Log a workout as usual
- After adding exercises, tap "Save as Template"
- Enter a template name
- Template is saved to your library
- When logging a workout, tap "Use Template"
- Select from your saved templates
- Exercises auto-populate with sets, reps, and weights
- Modify as needed before saving
- View workout history (sorted by newest first)
- Tap any workout to see full details
- Edit or delete workouts from detail screen
- Daily calorie summary with progress
- Macro breakdown (protein, carbs, fats)
- List of logged meals with totals
- Add meals with "+" button
- Edit your profile information
- View workout templates
- View app information
- Load sample data for testing
- Manage and delete your data
To test the app with sample data:
- Go to Profile tab
- Scroll to "Testing" section
- Tap "Load Sample Data"
This creates:
- 7 sample workouts (past week)
- Nutrition data with meals
- Step count data
- Some personal records
- Add a new screen: Create in
src/screens/and add to navigation - Add data models: Update
src/types/index.ts - Add storage functions: Update
src/services/storage.ts - Add reusable components: Create in
src/components/ - Add exercises: Update
src/data/exercises.ts
npm start # Start Expo dev server
npm run ios # Run on iOS simulator
npm run android # Run on Android emulator
npm run web # Run in web browser
npm run build:web # Build for web production
npm test # Run tests (if configured)The app uses SQLite (expo-sqlite) for local data persistence without requiring a backend. This provides:
- Fast performance: Indexed queries with no network latency
- Offline-first: Works without internet
- Simple setup: No backend required
- Privacy: All data stays on device
- Relational data: Proper foreign keys and data integrity
- Easy to extend: Cloud sync can be added later
The app uses Zustand for centralized state management with 5 domain-specific stores:
- userStore: User profile and preferences
- workoutStore: Workouts, templates, personal records (with 5-minute caching)
- nutritionStore: Daily nutrition and meals with computed totals
- dailyTrackingStore: Steps, weight, and weekly statistics
- uiStore: Modal visibility and UI state
Benefits:
- Selective subscriptions: Components only re-render when their specific data changes
- Centralized modals: All modals rendered at root level via GlobalModals
- Built-in caching: Prevents redundant database queries
- Simple API: No boilerplate, just
useStore((s) => s.value)
PRs are detected automatically using this logic:
- When a workout is saved, check each exercise
- Find the best set (highest weight, then highest reps)
- Compare to existing PR for that exercise
- If better, save new PR and show notification
Weeks run Monday-Sunday (standard fitness week):
- Current week stats calculated on-demand
- Previous week comparison shown in weekly stats card
- Week boundaries handled automatically
Exercises are categorized by muscle group for easy browsing and PR organization. Custom exercises default to "Other" category.
To reset the app:
- Go to Profile tab
- Scroll to "Delete Data" section
- Choose what to delete:
- Delete All Workouts
- Delete All Nutrition
- Delete All Steps
- Reset All Data (deletes everything including templates and PRs)
- App won't load: Run
npm installand restart - Data not persisting: Check AsyncStorage permissions
- TypeScript errors: Run
npx tsc --noEmitto check - Build fails: Clear cache with
expo start -c
Potential features for future development:
- Body weight tracking - Track weight changes over time with charts
- Exercise progression charts - Visual graphs showing weight/rep progress
- Monthly statistics - Extended time period analysis
- Goal setting - Custom fitness goals with tracking
- HealthKit/Google Fit integration - Automatic step syncing
- Photo progress - Before/after photos with timeline
- Workout notes - Add notes to individual workouts
- Streak tracking - Consecutive workout days
- Export data - CSV/JSON export for backup
- Cloud sync - Multi-device support with authentication
Features:
- β Workout logging with exercise database
- β Exercise library with custom exercise CRUD
- β Personal records tracking
- β Workout templates
- β Analytics dashboard with interactive charts
- β 1RM calculator with multiple formulas
- β Strength standards comparison (Beginner to Elite)
- β Rest timer
- β Weekly statistics
- β Nutrition tracking
- β Step tracking
- β Edit/delete workouts
- β Dark mode UI
- β Web, iOS, and Android support
This is a personal project for demonstration purposes.
Built with React Native + Expo
Live Demo: https://fit-app-smoky.vercel.app/