Skip to content

A comprehensive mobile fitness tracking app built with React Native & Expo. Track workouts, monitor progress, set goals, and achieve your fitness objectives with an intuitive, cross-platform experience.

Notifications You must be signed in to change notification settings

JanSzewczyk/workout-tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

72 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’ͺπŸ“± Workout Tracker

GitHub Stars License: MIT React Native Expo TypeScript

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


πŸ‘‹ Welcome to Workout Tracker!

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!

🎯 What is Workout Tracker?

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.

πŸ’‘ The Problem It Solves

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

βœ… The Solution

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

🌟 What Makes It Special?

  • 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

✨ Features

πŸ’ͺ Workout Management

  • 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

πŸ“Š Progress Tracking

  • 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

🎯 Goal Setting

  • 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

πŸš€ Core Technologies

  • 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

🎨 User Experience

  • 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

🧹 Code Quality

  • 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

πŸ“± Platform Support

  • βœ… iOS β€” Native iOS app experience
  • βœ… Android β€” Native Android app experience
  • βœ… Expo Go β€” Quick testing with Expo Go app

πŸ“– Table of Contents


🎯 Getting Started

πŸ“‹ Prerequisites

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

Platform-Specific Requirements

🍎 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

Installation

Follow these steps to get your development environment running:

1️⃣ Clone the Repository

git clone https://github.com/JanSzewczyk/workout-tracker.git
cd workout-tracker

2️⃣ Install Dependencies

npm install

Or use your preferred package manager:

# Using yarn
yarn install

# Using pnpm
pnpm install

3️⃣ Configure Environment Variables (Optional)

If the project uses environment variables, create a .env.local file:

cp .env.example .env.local

See Environment Variables section for details.

Running the App

Start the Development Server

npx expo start

This will start the Expo development server and show a QR code with options.

Run on iOS Simulator (macOS only)

# Using Expo CLI
npx expo start --ios

# Or press 'i' in the terminal after starting the dev server

Run on Android Emulator

# Using Expo CLI
npx expo start --android

# Or press 'a' in the terminal after starting the dev server

Run on Physical Device

  1. Install Expo Go app on your device:

  2. Scan the QR code shown in the terminal with:

    • iOS: Camera app
    • Android: Expo Go app
  3. The app will open in Expo Go

Reset Project (Optional)

To start with a clean slate:

npm run reset-project

This moves the starter code to app-example directory and creates a blank app directory.


πŸ” Environment Variables

This project may use environment variables for configuration.

Configuration Template

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=true

Important Notes

⚠️ Expo requires public environment variables to be prefixed with EXPO_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.

Using Environment Variables

// Access environment variables in your code
const apiUrl = process.env.EXPO_PUBLIC_API_URL;
const appName = process.env.EXPO_PUBLIC_APP_NAME;

πŸ“ƒ Available Scripts

πŸš€ Development

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

🧹 Code Quality

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

πŸ“¦ Build & Deployment

Command Description
npx expo build Build for production
npx eas build Build with EAS (Expo Application Services)

πŸ“ Project Structure

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

πŸ“‚ Directory Descriptions

  • app/ β€” File-based routing with Expo Router. Each file becomes a screen
  • components/ β€” Reusable React Native components organized by feature
  • hooks/ β€” Custom React hooks for state and logic management
  • lib/ β€” Utility functions, constants, and helper modules
  • types/ β€” TypeScript type definitions and interfaces
  • assets/ β€” Images, fonts, icons, and other static resources

πŸ› οΈ Tech Stack

🎯 Core Framework

πŸ“¦ Data Management

🎨 UI & Styling

πŸ“Š Data Visualization

  • React Native Charts β€” Progress charts and graphs
  • Custom Components β€” Tailored data visualization

πŸ”” Notifications

🧹 Code Quality

πŸ“¦ Additional Libraries

  • expo-font β€” Custom font loading
  • expo-haptics β€” Haptic feedback
  • expo-image-picker β€” Progress photo capture
  • expo-file-system β€” Data export functionality

πŸ§ͺ Testing

Testing Strategy

This project can be extended with comprehensive testing:

Unit Tests

  • Test utility functions and hooks
  • Validate data transformations
  • Exercise calculations and statistics

Integration Tests

  • Workout flow testing
  • Data persistence verification
  • Navigation testing

E2E Tests

  • Complete user journeys
  • Workout creation and logging
  • Progress tracking workflows

Adding Tests

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:coverage

🎨 Styling

Styling Approach

This 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',
  },
});

Design System

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

πŸ“± Screenshots

App Preview

[TODO: Add screenshots of your application]

Planned Screens:

  • Dashboard with workout statistics
  • Workout logging interface
  • Exercise library
  • Progress tracking charts
  • User profile and settings

πŸ”§ Troubleshooting

Common Issues and Solutions

❌ Expo CLI not found

Solution: Install Expo CLI globally:

npm install -g expo-cli

Or 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

Getting Help


🀝 Contributing

Contributions are welcome! Help make Workout Tracker even better! πŸŽ‰

How to Contribute

1️⃣ Fork the repository

2️⃣ Create a feature branch

git checkout -b feature/new-exercise-feature

3️⃣ 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-feature

6️⃣ Open a Pull Request

  • Provide clear description of changes
  • Add screenshots for UI changes
  • Reference any related issues
  • Ensure code follows project standards

Contribution Guidelines

  • βœ… 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

Code of Conduct

  • Be welcoming and inclusive
  • Respect differing viewpoints
  • Accept constructive criticism
  • Focus on what's best for the community

πŸ“œ License

This project is licensed under the MIT License. You are free to use, modify, and distribute this software with proper attribution.


πŸ™ Acknowledgments

Built with amazing tools from the React Native ecosystem:

πŸ› οΈ Core Technologies

🎨 Design & Inspiration

  • Fitness tracking best practices
  • Modern mobile UI patterns
  • Community feedback and suggestions

🌟 Community

  • All fitness app developers for inspiration
  • Open-source contributors
  • Beta testers and early adopters
  • The React Native community

πŸ“§ Contact

This project is created and maintained by Jan Szewczyk, a passionate React Native developer building practical mobile applications.

Support

Found a bug or have a feature request? Please open an issue on GitHub:

πŸ› Report an Issue

Feedback

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!

⬆ Back to Top

About

A comprehensive mobile fitness tracking app built with React Native & Expo. Track workouts, monitor progress, set goals, and achieve your fitness objectives with an intuitive, cross-platform experience.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages