{"id":40194844,"url":"https://github.com/brianwalborn/rep-mate","last_synced_at":"2026-05-05T04:07:55.162Z","repository":{"id":277639411,"uuid":"933063999","full_name":"brianwalborn/rep-mate","owner":"brianwalborn","description":"A self-hosted fitness web app that tracks workouts","archived":false,"fork":false,"pushed_at":"2026-05-04T11:13:30.000Z","size":598,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-04T13:18:40.731Z","etag":null,"topics":["fastapi","python","self-hostable","tailwindcss","vuejs"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brianwalborn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-15T04:07:21.000Z","updated_at":"2026-05-04T11:12:57.000Z","dependencies_parsed_at":"2026-01-01T04:10:34.697Z","dependency_job_id":null,"html_url":"https://github.com/brianwalborn/rep-mate","commit_stats":null,"previous_names":["brianwalborn/rep-mate"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/brianwalborn/rep-mate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianwalborn%2Frep-mate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianwalborn%2Frep-mate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianwalborn%2Frep-mate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianwalborn%2Frep-mate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brianwalborn","download_url":"https://codeload.github.com/brianwalborn/rep-mate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianwalborn%2Frep-mate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32634754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"online","status_checked_at":"2026-05-05T02:00:06.033Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastapi","python","self-hostable","tailwindcss","vuejs"],"created_at":"2026-01-19T20:02:40.035Z","updated_at":"2026-05-05T04:07:55.130Z","avatar_url":"https://github.com/brianwalborn.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rep Mate\n\nA 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.\n\n## Features\n\n### 🔒 Self-Hostable\n\n- **Complete data ownership** - your workout data stays on your infrastructure\n- **Privacy-first design** - no third-party tracking or data sharing\n- **Docker-ready** with single-command deployment\n- **Full control** over backups, updates, and data retention\n\n### 🏋️ Workout Tracking\n\n- **Real-time workout logging** with live timer and progress tracking\n- **Exercise library** with customizable exercises and equipment types\n- **Set management** with weight, reps, and completion tracking\n- **Collapsible exercise cards** for better screen space management\n- **Progress rings** showing exercises completed and sets done\n\n\u003cimg src=\"screenshots/workout-tracking.png\" alt=\"Workout Tracking\" width=\"300\"\u003e\n\n### 📊 Progress History\n\n- **Comprehensive workout history** with detailed exercise breakdowns\n- **Volume tracking** with automatic calculations\n- **Date-based organization** with visual workout summaries\n- **Muscle group tags** for quick reference\n- **Exercise notes** for tracking form cues and observations\n\n\u003cimg src=\"screenshots/progress.png\" alt=\"Progress History\" width=\"300\"\u003e\n\n### ⚖️ Flexible Unit System\n\n- **Global weight unit preference** (lbs or kg) configurable in profile\n- **Per-exercise unit selection** for mixed training styles\n- **Automatic conversions** between lbs and kg\n- **Consistent storage** (all weights stored in lbs, converted for display)\n- **Smart volume formatting** with decimal precision for kg\n\n### 🏃 Cardio Support\n\n- **Dedicated cardio mode** for treadmill and bike exercises\n- **Notes-based tracking** instead of reps/weight\n- **Time and intensity logging** via exercise notes\n\n### 📚 Exercise Library\n\n- **Pre-loaded equipment types** (Barbell, Dumbbell, Cable, Kettlebell, Bodyweight, Treadmill, Bike)\n- **Custom exercise creation** with muscle group selection\n- **Equipment-based organization**\n- **Archived exercise management**\n\n\u003cimg src=\"screenshots/library.png\" alt=\"Exercise Library\" width=\"300\"\u003e\n\n### 👤 User Profile\n\n- **Personal settings management**\n- **Weight unit preferences**\n- **Secure authentication** with JWT tokens\n\n\u003cimg src=\"screenshots/profile.png\" alt=\"Profile Settings\" width=\"300\"\u003e\n\n## Tech Stack\n\n### Frontend\n\n- **Vue 3** with Composition API\n- **Tailwind CSS** for styling\n- **Vue Router** for navigation\n- **Vite** for fast development and building\n- **Heroicons** for UI icons\n\n### Backend\n\n- **FastAPI** for high-performance REST API\n- **SQLAlchemy** for ORM\n- **Alembic** for database migrations\n- **PostgreSQL** for data persistence\n- **JWT** for authentication\n- **Pydantic** for data validation\n\n### DevOps\n\n- **Docker \u0026 Docker Compose** for containerization\n- **GitHub Actions** for CI/CD\n- **Multi-platform builds** (amd64, arm64)\n- **Kubernetes-ready** deployment\n\n## Getting Started\n\n### Prerequisites\n\n- Docker and Docker Compose\n- Node.js 20+ (for local frontend development)\n- Python 3.11+ (for local backend development)\n\n### Quick Start with Docker\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/brianwalborn/rep-mate.git\ncd rep-mate\n```\n\n2. Start the application:\n```bash\ndocker compose up --build\n```\n\n3. Access the application:\n- Frontend: http://localhost:5173\n- Backend API: http://localhost:8000\n- API Documentation: http://localhost:8000/docs\n\n### Local Development\n\nSee [SETUP.md](docs/SETUP.md) for detailed local development setup instructions.\n\n## Project Structure\n\n```\nrep-mate/\n├── frontend/           # Vue 3 frontend application\n│   ├── src/\n│   │   ├── components/ # Reusable UI components\n│   │   ├── views/      # Page components\n│   │   ├── composables/# Vue composables\n│   │   ├── services/   # API service layer\n│   │   └── utils/      # Utility functions\n│   └── Dockerfile\n├── backend/            # FastAPI backend application\n│   ├── app/\n│   │   ├── models/     # SQLAlchemy models\n│   │   ├── schemas/    # Pydantic schemas\n│   │   ├── routers/    # API route handlers\n│   │   ├── crud/       # Database operations\n│   │   └── auth/       # Authentication logic\n│   ├── alembic/        # Database migrations\n│   └── Dockerfile\n├── docs/               # Documentation\n├── screenshots/        # Application screenshots\n└── docker-compose.yml  # Multi-container setup\n```\n\n## Key Features in Detail\n\n### Smart Weight Unit System\n\nRep Mate features a sophisticated weight unit system that allows you to:\n- Set a global preference for lbs or kg in your profile\n- Override the unit per-exercise during workouts\n- Automatically converts kg to lbs for consistent database storage\n- Displays weights in their original logged unit in history\n- Calculates total volume in your preferred unit\n\n### Exercise Notes\n\nAdd contextual notes to any exercise in your workout:\n- Track form cues and technique reminders\n- Log intensity or difficulty\n- Record cardio metrics (speed, incline, resistance)\n- Notes persist with workout history\n\n### Collapsible Workout Cards\n\nKeep your workout view clean and organized:\n- Collapse exercises you're not currently working on\n- State persists across tab switches\n- Quick expand/collapse with a single tap\n\n## Database Schema\n\nThe application uses PostgreSQL with the following main tables:\n- `users` - User accounts and preferences\n- `exercises` - Exercise library\n- `equipment` - Equipment types\n- `workouts` - Workout sessions\n- `workout_exercises` - Exercises in a workout\n- `sets` - Individual sets with weight, reps, and unit\n\n## API Documentation\n\nOnce the backend is running, visit http://localhost:8000/docs for interactive API documentation powered by Swagger UI.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is open source and available under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrianwalborn%2Frep-mate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrianwalborn%2Frep-mate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrianwalborn%2Frep-mate/lists"}