A comprehensive mobile fitness tracking application built with React Native and Expo β track your workouts, monitor progress, and achieve your fitness goals! ποΈββοΈπ―
β¨ Features β’ π― Getting Started β’ π Table of Contents β’ π± Screenshots β’ π€ Contributing
Hey there, fitness enthusiast! π Welcome to Workout Tracker β your ultimate companion for tracking workouts, monitoring fitness progress, and achieving your health goals through a beautifully designed mobile experience!
Workout Tracker is a powerful, user-friendly mobile application designed to help you log exercises, track your fitness journey, and stay motivated. Built with React Native and Expo, it provides a seamless cross-platform experience for iOS and Android users who want to take control of their fitness routine.
Staying consistent with fitness goals requires:
- Easy Workout Logging β Quick and intuitive exercise tracking
- Progress Monitoring β Visual insights into your fitness journey
- Motivation β Clear goals and achievement tracking
- Accessibility β Track workouts anytime, anywhere on your phone
- Data Organization β Structured workout history and statistics
- Personalization β Customizable routines and exercises
Workout Tracker provides:
- π Comprehensive Tracking β Log exercises, sets, reps, and weights
- π Progress Analytics β Visualize your fitness improvements over time
- π― Goal Setting β Set and track personal fitness objectives
- ποΈ Exercise Library β Pre-built exercises with instructions
- π Workout Calendar β Plan and schedule your training sessions
- πͺ Custom Routines β Create and save your favorite workouts
- π± Offline Support β Track workouts without internet connection
- Native Performance β Built with React Native for smooth, responsive experience
- Cross-Platform β Works seamlessly on iOS and Android
- Modern UI β Clean, intuitive interface designed for fitness enthusiasts
- Expo Powered β Fast development and easy updates
- Type-Safe β Full TypeScript support for reliability
- Offline First β Track workouts even without internet
- Privacy Focused β Your fitness data stays on your device
- Exercise Logging β Quick entry for exercises, sets, reps, and weight
- Workout Templates β Save and reuse favorite workout routines
- Rest Timers β Built-in rest timer between sets
- Exercise Library β Comprehensive database of exercises with instructions
- Custom Exercises β Add your own exercises with descriptions
- Workout History β Complete log of all past workouts
- Statistics Dashboard β Visual overview of your fitness progress
- Exercise Analytics β Track personal records and improvements
- Body Metrics β Log weight, body measurements, and more
- Progress Photos β Track visual changes over time
- Achievement System β Unlock milestones and stay motivated
- Export Data β Download your workout history
- Fitness Goals β Set weight, strength, or endurance targets
- Goal Tracking β Monitor progress toward your objectives
- Reminders β Get notifications for scheduled workouts
- Streak Counter β Track workout consistency
- Motivational Insights β Personalized encouragement
- React Native β Cross-platform mobile framework
- Expo SDK 54 β Managed workflow with modern features
- TypeScript β Full type safety across the codebase
- Expo Router β File-based navigation system
- AsyncStorage β Local data persistence
- Expo Notifications β Workout reminders
- Intuitive UI β Clean, easy-to-navigate interface
- Dark Mode β Eye-friendly theme for gym environments
- Responsive Design β Optimized for all screen sizes
- Smooth Animations β Polished transitions and feedback
- Accessibility β Designed for all users
- Fast Performance β Optimized for quick workout logging
- TypeScript β Static type checking for reliability
- ESLint β Code quality enforcement
- Prettier β Consistent code formatting
- Modular Architecture β Clean, maintainable codebase
- Best Practices β Following React Native conventions
- β iOS β Native iOS app experience
- β Android β Native Android app experience
- β Expo Go β Quick testing with Expo Go app
- Features
- Getting Started
- Environment Variables
- Available Scripts
- Project Structure
- Tech Stack
- Testing
- Styling
- Screenshots
- Troubleshooting
- Contributing
- License
- Acknowledgments
- Contact
Before you begin, ensure you have the following installed:
| Requirement | Version | Description |
|---|---|---|
| Node.js | 18.x or higher | JavaScript runtime environment |
| npm/yarn/pnpm | Latest | Package manager of your choice |
| Git | Latest | Version control system |
| Expo CLI | Latest | Expo command-line tools |
π iOS Development (macOS only)
- Xcode 14+ β Download from App Store
- iOS Simulator β Included with Xcode
- CocoaPods β Installed automatically by Expo
π€ Android Development
- Android Studio β Download
- Android SDK β API 33+ required
- Android Emulator β Or physical device with USB debugging
Follow these steps to get your development environment running:
git clone https://github.com/JanSzewczyk/workout-tracker.git
cd workout-trackernpm installOr use your preferred package manager:
# Using yarn
yarn install
# Using pnpm
pnpm installIf the project uses environment variables, create a .env.local file:
cp .env.example .env.localSee Environment Variables section for details.
npx expo startThis will start the Expo development server and show a QR code with options.
# Using Expo CLI
npx expo start --ios
# Or press 'i' in the terminal after starting the dev server# Using Expo CLI
npx expo start --android
# Or press 'a' in the terminal after starting the dev server-
Install Expo Go app on your device:
-
Scan the QR code shown in the terminal with:
- iOS: Camera app
- Android: Expo Go app
-
The app will open in Expo Go
To start with a clean slate:
npm run reset-projectThis moves the starter code to app-example directory and creates a blank app directory.
This project may use environment variables for configuration.
Create a .env.local file in the root directory:
# ==============================================
# APP CONFIGURATION
# ==============================================
EXPO_PUBLIC_APP_NAME=Workout Tracker
EXPO_PUBLIC_APP_VERSION=1.0.0
# ==============================================
# API CONFIGURATION (if applicable)
# ==============================================
# EXPO_PUBLIC_API_URL=https://api.example.com
# EXPO_PUBLIC_API_KEY=your_api_key_here
# ==============================================
# ANALYTICS (optional)
# ==============================================
# EXPO_PUBLIC_ANALYTICS_ID=your_analytics_id
# ==============================================
# FEATURE FLAGS
# ==============================================
# EXPO_PUBLIC_ENABLE_ANALYTICS=false
# EXPO_PUBLIC_ENABLE_PUSH_NOTIFICATIONS=trueEXPO_PUBLIC_
- β
EXPO_PUBLIC_API_URLβ Will be available in the app - β
API_URLβ Will NOT be available in the app
π Never commit .env.local or files containing secrets!
Only commit .env.example with placeholder values.
// Access environment variables in your code
const apiUrl = process.env.EXPO_PUBLIC_API_URL;
const appName = process.env.EXPO_PUBLIC_APP_NAME;| Command | Description |
|---|---|
npx expo start |
Start Expo development server |
npx expo start --ios |
Run on iOS simulator |
npx expo start --android |
Run on Android emulator |
npx expo start --web |
Run in web browser |
npm run reset-project |
Reset to clean project structure |
| Command | Description |
|---|---|
npm run lint |
Run ESLint to check code quality |
npm run format |
Format code with Prettier |
npm run type-check |
Run TypeScript type checking |
| Command | Description |
|---|---|
npx expo build |
Build for production |
npx eas build |
Build with EAS (Expo Application Services) |
workout-tracker/
β
βββ π app/ # Expo Router file-based routes
β βββ (tabs)/ # Tab navigation group
β β βββ index.tsx # Home/Dashboard screen
β β βββ workouts.tsx # Workouts list screen
β β βββ progress.tsx # Progress tracking screen
β β βββ profile.tsx # User profile screen
β βββ workout/ # Workout related screens
β β βββ [id].tsx # Workout detail screen
β β βββ new.tsx # Create new workout
β βββ _layout.tsx # Root layout
β βββ +not-found.tsx # 404 screen
β
βββ π components/ # Reusable React components
β βββ π ui/ # UI components
β β βββ Button.tsx
β β βββ Card.tsx
β β βββ Input.tsx
β βββ π workout/ # Workout components
β β βββ ExerciseCard.tsx
β β βββ SetLogger.tsx
β β βββ WorkoutList.tsx
β βββ π layout/ # Layout components
β βββ Header.tsx
β βββ TabBar.tsx
β
βββ π hooks/ # Custom React hooks
β βββ useWorkouts.ts
β βββ useExercises.ts
β βββ useProgress.ts
β
βββ π lib/ # Utilities & helpers
β βββ storage.ts # AsyncStorage helpers
β βββ utils.ts # General utilities
β βββ constants.ts # App constants
β
βββ π types/ # TypeScript types
β βββ workout.ts
β βββ exercise.ts
β βββ user.ts
β
βββ π assets/ # Static assets
β βββ images/
β βββ fonts/
β βββ icons/
β
βββ π .env.example # Environment variables template
βββ π app.json # Expo app configuration
βββ π babel.config.js # Babel configuration
βββ π package.json # Dependencies and scripts
βββ π tsconfig.json # TypeScript configuration
βββ π README.md # Documentation
app/β File-based routing with Expo Router. Each file becomes a screencomponents/β Reusable React Native components organized by featurehooks/β Custom React hooks for state and logic managementlib/β Utility functions, constants, and helper modulestypes/β TypeScript type definitions and interfacesassets/β Images, fonts, icons, and other static resources
- React Native β Cross-platform mobile framework
- Expo SDK 54 β Development platform with managed workflow
- TypeScript β Type-safe JavaScript
- Expo Router β File-based navigation
- AsyncStorage β Local data persistence
- React Context β State management (or alternatives like Zustand)
- React Native StyleSheet β Native styling
- Expo Vector Icons β Icon library
- React Native Gesture Handler β Native gestures
- React Native Charts β Progress charts and graphs
- Custom Components β Tailored data visualization
- Expo Notifications β Workout reminders and alerts
- ESLint β Code linting
- Prettier β Code formatting
- TypeScript β Static type checking
- expo-font β Custom font loading
- expo-haptics β Haptic feedback
- expo-image-picker β Progress photo capture
- expo-file-system β Data export functionality
This project can be extended with comprehensive testing:
- Test utility functions and hooks
- Validate data transformations
- Exercise calculations and statistics
- Workout flow testing
- Data persistence verification
- Navigation testing
- Complete user journeys
- Workout creation and logging
- Progress tracking workflows
To add testing to this project:
# Install Jest and React Native Testing Library
npm install --save-dev jest @testing-library/react-native @testing-library/jest-native
# Run tests
npm test
# Run tests with coverage
npm run test:coverageThis project uses React Native's built-in StyleSheet API for styling:
import { StyleSheet, View, Text } from 'react-native';
export default function WorkoutCard() {
return (
<View style={styles.container}>
<Text style={styles.title}>Workout Title</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
padding: 16,
backgroundColor: '#fff',
borderRadius: 8,
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.1,
shadowRadius: 4,
},
title: {
fontSize: 18,
fontWeight: 'bold',
color: '#333',
},
});The app follows a consistent design system with:
- Color Palette β Primary, secondary, and accent colors
- Typography β Consistent font sizes and weights
- Spacing β Standardized margins and padding
- Components β Reusable UI elements
[TODO: Add screenshots of your application]
Planned Screens:
- Dashboard with workout statistics
- Workout logging interface
- Exercise library
- Progress tracking charts
- User profile and settings
β Expo CLI not found
Solution: Install Expo CLI globally:
npm install -g expo-cliOr use npx to run commands without installing:
npx expo startβ Metro bundler issues
Solution: Clear the cache and restart:
npx expo start --clearβ iOS Simulator not launching
Solution: Ensure Xcode is installed and configured:
# Open Xcode and install additional components
xcode-select --install
# Reset iOS simulator
xcrun simctl erase allβ Android build fails
Solution: Clean and rebuild:
cd android
./gradlew clean
cd ..
npx expo start --androidβ Dependencies installation fails
Solution: Clear cache and reinstall:
# Remove node_modules and lock file
rm -rf node_modules package-lock.json
# Clear npm cache
npm cache clean --force
# Reinstall
npm install- π Check Expo Documentation
- π¬ Visit Expo Forums
- π Open an issue on GitHub
- π React Native Documentation
Contributions are welcome! Help make Workout Tracker even better! π
1οΈβ£ Fork the repository
2οΈβ£ Create a feature branch
git checkout -b feature/new-exercise-feature3οΈβ£ Make your changes
- Add new features or improvements
- Fix bugs
- Improve documentation
- Enhance UI/UX
4οΈβ£ Commit your changes
git commit -m "feat: add exercise search functionality"
git commit -m "fix: resolve workout save bug"
git commit -m "docs: update installation guide"5οΈβ£ Push to your branch
git push origin feature/new-exercise-feature6οΈβ£ Open a Pull Request
- Provide clear description of changes
- Add screenshots for UI changes
- Reference any related issues
- Ensure code follows project standards
- β Follow TypeScript and React Native best practices
- β Write clean, readable code
- β Test your changes on both iOS and Android
- β Update documentation as needed
- β Follow existing code style
- β Be respectful and constructive
- Be welcoming and inclusive
- Respect differing viewpoints
- Accept constructive criticism
- Focus on what's best for the community
This project is licensed under the MIT License. You are free to use, modify, and distribute this software with proper attribution.
Built with amazing tools from the React Native ecosystem:
- Expo Team β For the incredible development platform
- React Native Community β For the powerful framework
- TypeScript β For type safety
- Fitness tracking best practices
- Modern mobile UI patterns
- Community feedback and suggestions
- All fitness app developers for inspiration
- Open-source contributors
- Beta testers and early adopters
- The React Native community
This project is created and maintained by Jan Szewczyk, a passionate React Native developer building practical mobile applications.
- GitHub: @JanSzewczyk
- Project Repository: github.com/JanSzewczyk/workout-tracker
Found a bug or have a feature request? Please open an issue on GitHub:
We'd love to hear your thoughts! Share your experience and suggestions to help improve Workout Tracker for everyone.
Made with β€οΈ by Jan Szewczyk
If this app helped you achieve your fitness goals, please consider giving it a β on GitHub!