A gamified fitness tracking mobile app built with React Native and Expo, featuring an RPG-style character progression system that motivates users to maintain consistent workout routines.
For a full architecture and implementation guide, see docs/ARCHITECTURE.md.
For server-side contracts, see docs/BACKEND_API.md.
- Character Avatar: Visual representation that evolves with your fitness level
- Level Progression: Gain XP through workouts and level up your character
- Streak System: Build workout streaks with visual flame effects
- Daily/Weekly/Special Quests: Complete challenges for XP rewards
- Achievement Badges: Unlock accomplishments as you progress
- Exercise Library: Browse and track various exercises
- Workout History: View your recent workout sessions
- Progress Tracking: Monitor sets, reps, and weights
- Personalized Stats: Track total XP, quest completions, and level ups
- Dark/Light Mode: Automatic theme switching based on system preferences
- Responsive Design: Optimized for all screen sizes
- Smooth Animations: Engaging visual feedback and transitions
- Persistent Data: Local storage with AsyncStorage
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI
- iOS Simulator or Android Emulator (for testing)
-
Clone the repository
git clone <repository-url> cd musclediav1-main
-
Install dependencies
npm install
-
Start the development server
npm run dev
Note for Windows users: The project now uses
cross-envfor cross-platform environment variable support. -
Run on device/emulator
- Install Expo Go app on your mobile device
- Scan the QR code displayed in terminal
- Or press
ifor iOS simulator /afor Android emulator
- Home: Dashboard with character status, stats, and recent workouts
- Exercises: Browse exercise library and track workouts
- Quests: View and complete daily, weekly, and special challenges
- Achievements: Display unlocked badges and progress
- Profile: Character customization and personal stats
CharacterAvatar: Animated avatar with level progressionProgressBar: Visual XP and progress indicatorsStatsCard: Reusable stat display components
- Framework: React Native with Expo
- Navigation: Expo Router with typed routes
- State Management: React Context API with custom hooks
- Storage: AsyncStorage for data persistence
- Styling: StyleSheet with dynamic theming
- Icons: Lucide React Native icons
- Animations: React Native Animated API
- Start at Level 1 with 100 XP needed for Level 2
- XP requirements increase by 20% each level
- Complete workouts and quests to gain XP
- Track consecutive workout days
- Visual flame effects for 3+ day streaks
- Streak resets if a day is missed
- Character appearance changes based on level:
- Beginner (Levels 1-4)
- Intermediate (Levels 5-14)
- Advanced (Levels 15-29)
- Master (Level 30+)
- Morning Warm-Up (50 XP)
- Lunch Break Stretching (30 XP)
- Evening Strength Session (80 XP)
- Cardio Challenge (100 XP)
- Core Crusher (70 XP)
- Hydration Hero (40 XP)
- Distance Runner (200 XP)
- Strength Master (250 XP)
- Consistency King (300 XP)
- Mountain Climber (350 XP)
- Marathon Milestone (500 XP)
musclediav1/
โโโ app/
โ โโโ (tabs)/
โ โ โโโ index.tsx # Home screen
โ โ โโโ exercises/ # Exercise screens
โ โ โโโ quests.tsx # Quest screen
โ โ โโโ achievements.tsx # Achievements screen
โ โ โโโ profile.tsx # Profile screen
โ โโโ _layout.tsx
โโโ components/
โ โโโ CharacterAvatar.tsx # Animated character component
โ โโโ ProgressBar.tsx # XP progress visualization
โ โโโ StatsCard.tsx # Stat display component
โโโ hooks/
โ โโโ useCharacter.tsx # Character state management
โ โโโ useWorkouts.tsx # Workout tracking
โ โโโ useFrameworkReady.ts # App initialization
โโโ data/
โ โโโ quests.ts # Quest definitions
โ โโโ badges.ts # Achievement badges
โโโ utils/
โโโ helpers.ts # Utility functions
- Expo SDK 53+
- React Native 0.79+
- TypeScript support enabled
- Metro bundler configuration
- Modify quest definitions in
data/quests.ts - Add new achievements in
data/badges.ts - Customize character avatars in
components/CharacterAvatar.tsx - Adjust XP calculations in
hooks/useCharacter.tsx
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- This project was updated from Ivan Andrau's fork with improvements and cross-platform compatibility fixes
- Expo team for the excellent development platform
- Lucide for the beautiful icon library
- React Native community for the robust ecosystem