Skip to content

A self-hosted fitness web app that tracks workouts

Notifications You must be signed in to change notification settings

brianwalborn/rep-mate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

49 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Rep Mate

A modern, full-stack workout tracking application built with Vue 3 and FastAPI. Designed to be self-hosted, Rep Mate gives you complete control over your fitness data while providing an intuitive, mobile-first interface to track workouts, monitor progress, and achieve your fitness goals.

Features

πŸ”’ Self-Hostable

  • Complete data ownership - your workout data stays on your infrastructure
  • Privacy-first design - no third-party tracking or data sharing
  • Docker-ready with single-command deployment
  • Full control over backups, updates, and data retention

πŸ‹οΈ Workout Tracking

  • Real-time workout logging with live timer and progress tracking
  • Exercise library with customizable exercises and equipment types
  • Set management with weight, reps, and completion tracking
  • Collapsible exercise cards for better screen space management
  • Progress rings showing exercises completed and sets done

Workout Tracking

πŸ“Š Progress History

  • Comprehensive workout history with detailed exercise breakdowns
  • Volume tracking with automatic calculations
  • Date-based organization with visual workout summaries
  • Muscle group tags for quick reference
  • Exercise notes for tracking form cues and observations

Progress History

βš–οΈ Flexible Unit System

  • Global weight unit preference (lbs or kg) configurable in profile
  • Per-exercise unit selection for mixed training styles
  • Automatic conversions between lbs and kg
  • Consistent storage (all weights stored in lbs, converted for display)
  • Smart volume formatting with decimal precision for kg

πŸƒ Cardio Support

  • Dedicated cardio mode for treadmill and bike exercises
  • Notes-based tracking instead of reps/weight
  • Time and intensity logging via exercise notes

πŸ“š Exercise Library

  • Pre-loaded equipment types (Barbell, Dumbbell, Cable, Kettlebell, Bodyweight, Treadmill, Bike)
  • Custom exercise creation with muscle group selection
  • Equipment-based organization
  • Archived exercise management

Exercise Library

πŸ‘€ User Profile

  • Personal settings management
  • Weight unit preferences
  • Secure authentication with JWT tokens

Profile Settings

Tech Stack

Frontend

  • Vue 3 with Composition API
  • Tailwind CSS for styling
  • Vue Router for navigation
  • Vite for fast development and building
  • Heroicons for UI icons

Backend

  • FastAPI for high-performance REST API
  • SQLAlchemy for ORM
  • Alembic for database migrations
  • PostgreSQL for data persistence
  • JWT for authentication
  • Pydantic for data validation

DevOps

  • Docker & Docker Compose for containerization
  • GitHub Actions for CI/CD
  • Multi-platform builds (amd64, arm64)
  • Kubernetes-ready deployment

Getting Started

Prerequisites

  • Docker and Docker Compose
  • Node.js 20+ (for local frontend development)
  • Python 3.11+ (for local backend development)

Quick Start with Docker

  1. Clone the repository:
git clone https://github.com/brianwalborn/rep-mate.git
cd rep-mate
  1. Start the application:
docker compose up --build
  1. Access the application:

Local Development

See SETUP.md for detailed local development setup instructions.

Project Structure

rep-mate/
β”œβ”€β”€ frontend/           # Vue 3 frontend application
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/ # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ views/      # Page components
β”‚   β”‚   β”œβ”€β”€ composables/# Vue composables
β”‚   β”‚   β”œβ”€β”€ services/   # API service layer
β”‚   β”‚   └── utils/      # Utility functions
β”‚   └── Dockerfile
β”œβ”€β”€ backend/            # FastAPI backend application
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ models/     # SQLAlchemy models
β”‚   β”‚   β”œβ”€β”€ schemas/    # Pydantic schemas
β”‚   β”‚   β”œβ”€β”€ routers/    # API route handlers
β”‚   β”‚   β”œβ”€β”€ crud/       # Database operations
β”‚   β”‚   └── auth/       # Authentication logic
β”‚   β”œβ”€β”€ alembic/        # Database migrations
β”‚   └── Dockerfile
β”œβ”€β”€ docs/               # Documentation
β”œβ”€β”€ screenshots/        # Application screenshots
└── docker-compose.yml  # Multi-container setup

Key Features in Detail

Smart Weight Unit System

Rep Mate features a sophisticated weight unit system that allows you to:

  • Set a global preference for lbs or kg in your profile
  • Override the unit per-exercise during workouts
  • Automatically converts kg to lbs for consistent database storage
  • Displays weights in their original logged unit in history
  • Calculates total volume in your preferred unit

Exercise Notes

Add contextual notes to any exercise in your workout:

  • Track form cues and technique reminders
  • Log intensity or difficulty
  • Record cardio metrics (speed, incline, resistance)
  • Notes persist with workout history

Collapsible Workout Cards

Keep your workout view clean and organized:

  • Collapse exercises you're not currently working on
  • State persists across tab switches
  • Quick expand/collapse with a single tap

Database Schema

The application uses PostgreSQL with the following main tables:

  • users - User accounts and preferences
  • exercises - Exercise library
  • equipment - Equipment types
  • workouts - Workout sessions
  • workout_exercises - Exercises in a workout
  • sets - Individual sets with weight, reps, and unit

API Documentation

Once the backend is running, visit http://localhost:8000/docs for interactive API documentation powered by Swagger UI.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is open source and available under the MIT License.

About

A self-hosted fitness web app that tracks workouts

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published