A comprehensive, cross-platform fitness app built with React Native and TypeScript. FitUp empowers users to track their workouts, monitor progress, engage with a fitness community, and achieve health goals through a modern, interactive mobile experience.
This is a demo preview of the application interface.
- Features
- App Architecture & Folder Structure
- Core Modules & Screens
- Detailed Features
- Data Models
- Authentication & Onboarding
- Backend/API Integration
- Technologies & Libraries
- Installation
- Development & Contribution
- License
- Contact
- User Authentication: Email/password login, social sign-in (Google, Apple), onboarding flow, terms & privacy acceptance.
- Workouts: Browse, search, and filter workouts by type, difficulty, and equipment. View detailed instructions, stats, and completion tracking.
- Exercise Detail: Detailed breakdown with instructions, sets, reps, muscle groups, tips, and progress.
- Progress Tracking: Charts for steps, calories, workout duration across week/month/year; period selectors; achievement history.
- Social Community: Community feed with workout posts, achievements, likes, comments, and friend activity. Join or view challenges.
- Profile: User stats, achievements, edit profile, account management.
- Gamification: Achievements, badges, level system, active challenges, and leaderboards.
- Modern Design: Responsive UI, dark/light mode, animated transitions, and reusable UI components.
- Data Visualization: Line and bar charts for activity and progress, quick stats, performance highlights.
- Demo Data: Local demo data for bootstrapping and development.
FitUp-ReactNative/
├── app/
│ ├── (auth)/ # Auth stack: login, signup, onboarding
│ ├── (tabs)/ # Main tabbed navigation: Home, Progress, Social, Workouts, Profile
│ ├── exercise/ # Exercise detail screens
│ ├── workout/ # Workout flow & summary
│ └── onboarding.tsx # Onboarding screens
├── components/
│ └── ui/ # Reusable UI components (Card, Button, etc.)
├── data/
│ └── demoData.ts # Strongly-typed demo data for users, workouts, achievements, posts
├── hooks/
│ └── useFrameworkReady.ts
├── utils/ # Utility helpers (formatting, date, etc.)
├── App.tsx # Entry point
└── ...
- Login/Signup: Email/password forms, social login, password visibility toggles, loading states, error handling.
- Onboarding: Multi-step onboarding with progress indicators and 'Get Started' button. Enforces Terms of Service/Privacy Policy acceptance.
- Personalized greeting
- Main daily metric (e.g., steps)
- Quick stats grid (workouts, calories, minutes, etc.)
- Progress to daily goals (animated progress bar)
- Recent activity summaries
- Browse/Filter/Search: Workouts by category, difficulty, equipment
- Detail: Description, stats, exercises, ratings, completions
- Instructions, sets/reps/rest, animated progress, muscle groups
- Period selector: Week, Month, Year
- Metrics: Workouts, calories, duration, heart rate
- Charts: Steps (line), Workout duration (bar)
- Achievements: Recent, all-time, unlock date
- Goals: Current fitness goals, progress
- Feed: Posts with workouts, achievements, likes/comments
- Challenges: Active challenges, progress bars, badges
- Activity: Recent activity, friend/peer highlights
- Stats (workouts, achievements, level, join date)
- Edit profile, account actions
- Workouts: Variety of routines (HIIT, Strength, Cardio, Core, Beginner), each with:
- Title, description, duration, difficulty, calories, equipment, tags, rating, completions
- Embedded list of exercises (each with instructions, sets, reps, rest, muscle groups)
- Exercises: Fundamental movements with detailed steps, tips, and images/videos
- Daily/Weekly/Monthly stats: Steps, active minutes, calories, workouts
- Charts: Visualize trends with
react-native-chart-kit
(line/bar) - Achievements: Milestones (e.g., first workout, 10k steps), progress to next badge
- Goals: Set and track fitness goals
- Posts: Users share updates, workouts, PRs, achievements
- Feed: Chronological, with avatars, verification, time ago, optional image/media
- Engagement: Likes, comments, sharing, join/view challenges
- Challenges: Group or solo, with progress bars and reward icons
- Achievements: Unlocked and in-progress badges (e.g., "Step Master", "First Workout")
- Levels: User level based on activity and streaks
Located in data/demoData.ts
:
- User:
id
,name
,email
,age
,height
,weight
,fitnessLevel
,goals
,joinDate
- Workout:
id
,name
,description
,duration
,difficulty
,category
,exercises[]
,calories
,equipment
,tags
,rating
,completions
- Exercise:
id
,name
,description
,sets
,reps
,duration
,instructions[]
,muscleGroups[]
- DailyStats:
date
,steps
,stepGoal
,calories
,activeMinutes
,heartRate
,sleep
,water
,workoutsCompleted
- SocialPost:
id
,userId
,content
,workoutName?
,achievements?
,likes
,comments
,timestamp
- Achievement:
id
,name
,description
,icon
,category
,unlockedAt|progress|target
-
Signup/Login:
- Email/password input with validation, password show/hide toggle, loading indicators.
- Social login buttons (Google, Apple) with stub handlers.
- Terms of Service and Privacy Policy links required for account creation.
-
Onboarding:
- Progress indicators and animated stepper.
- Personalized data collection for profile setup.
- Demo Data: The repository uses strong TypeScript interfaces and local demo data for rapid prototyping and development.
- API/Backend: (Pluggable) API layer can be added for real backend integration. Replace demo data and service calls in
/data
and/services
as needed. - Navigation: Uses expo-router for navigation stacks and tabs.
- React Native (Expo)
- TypeScript
- expo-router (navigation)
- react-native-chart-kit (charts)
- lucide-react-native (icons)
- expo-linear-gradient (UI gradients)
- react-native-reanimated (animations)
- react-native-safe-area-context
- Jest (testing)
- ESLint, Prettier (linting, formatting)
- Node.js >=16.x
- npm or yarn
- Expo CLI (
npm install -g expo-cli
) - Xcode (iOS, macOS only)
- Android Studio (Android)
git clone https://github.com/NafisRayan/FitUp-ReactNative.git
cd FitUp-ReactNative
npm install # or yarn install
- Copy
.env.example
to.env
if provided, and fill in any required environment variables.
- iOS:
npx expo run:ios
- Android:
npx expo run:android
- Web:
npx expo start --web
See App Architecture & Folder Structure.
- Use strongly-typed interfaces in
/data/demoData.ts
- Add new screens in
app/(tabs)/
or feature folders as needed - Create composable components in
/components/ui/
- Add tests using Jest for utilities, hooks, and business logic.
- Fork the repo
- Create your feature branch (
git checkout -b feature/my-feature
) - Commit your changes
- Push to the branch
- Open a PR
No license specified yet. Add a LICENSE file as needed.
Author: Nafis Rayan
Have questions or want to contribute?
Open an issue or email: [email protected]