A modern workout and fitness progress tracker built for lifters who want a clean, fast, and distraction-free experience. Log workouts, monitor strength progression, manage training templates, and visualize long-term performance through an intuitive interface.
GymPro is a full-stack fitness tracking application built with React, TypeScript, Vite, Tailwind CSS, and Supabase.
The application focuses on simplicity, performance, and scalability while providing everything needed to track workouts, estimate one-rep maxes, manage exercises, and analyze training progress.
- Log workouts with sets, reps, and weight
- Automatic workout volume calculations
- Built-in rest timer
- Personal Record (PR) detection
- Complete workout history
- Built-in exercise library
- Custom exercise creation
- Workout templates and routines
- Search and filtering
- Estimated One Rep Max (1RM)
- Strength progression
- Volume analytics
- Interactive charts
- Body weight tracking
- Email & Password authentication
- Secure user accounts
- Protected routes
- Session management
- Cloud synchronization
- Persistent workout history
- CSV / JSON export
- Backup and restore support
- React 19
- TypeScript
- Vite
- Tailwind CSS v4
- Motion
- Base UI
- Radix UI
- shadcn/ui
- Lucide React
- Supabase
- PostgreSQL
- Supabase Authentication
- Recharts
- dnd-kit
This project structure reflects the current working tree, including hidden files and generated folders, excluding Git internals.
full-project-structure-listing/
|-- assets/
| `-- gym.png
|-- src/
| |-- components/
| | |-- Auth/
| | | |-- AuthModal.tsx
| | | `-- LoginPage.tsx
| | |-- Dashboard/
| | | `-- DashboardView.tsx
| | |-- Data/
| | | `-- ImportExportModal.tsx
| | |-- Exercises/
| | | `-- ExerciseLibraryView.tsx
| | |-- History/
| | | `-- HistoryView.tsx
| | |-- Progress/
| | | `-- ProgressView.tsx
| | |-- Settings/
| | | `-- SettingsView.tsx
| | |-- ui/
| | | |-- ConfirmModal.tsx
| | | |-- CustomSelect.tsx
| | | |-- glassmorphism-trust-hero.tsx
| | | `-- select.tsx
| | |-- Workout/
| | | |-- ExerciseSelectorModal.tsx
| | | |-- StartWorkoutModal.tsx
| | | |-- TemplateManagerView.tsx
| | | `-- WorkoutLogger.tsx
| | |-- Navigation.tsx
| | `-- RestTimerBar.tsx
| |-- data/
| | `-- defaultData.ts
| |-- lib/
| | |-- calculations.ts
| | |-- storage.ts
| | |-- supabase.ts
| | |-- supabaseSync.ts
| | `-- utils.ts
| |-- App.tsx
| |-- index.css
| |-- main.tsx
| |-- types.ts
| `-- vite-env.d.ts
|-- supabase/
| |-- .temp/
| | |-- gotrue-version
| | |-- linked-project.json
| | |-- pooler-url
| | |-- postgres-version
| | |-- project-ref
| | |-- rest-version
| | |-- storage-migration
| | `-- storage-version
| `-- migrations/
| `-- 0001_initial_schema.sql
|-- .env.example
|-- .gitignore
|-- bun.lock
|-- index.html
|-- metadata.json
|-- package-lock.json
|-- package.json
|-- README.md
|-- tsconfig.json
`-- vite.config.ts
- Node.js 20+
- npm
git clone <repository-url>
cd gym-progress-tracker
npm installCreate a .env file in the project root.
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_keyStart the development server:
npm run devBuild the project:
npm run buildPreview the production build:
npm run previewRun TypeScript checks:
npm run lintGymPro uses Supabase PostgreSQL as its primary database.
Core entities include:
- Users
- Workouts
- Exercises
- Workout Templates
- Personal Records
- Body Measurements
Supabase provides:
- Authentication
- PostgreSQL Database
- Row Level Security (RLS)
- Real-time capabilities
- REST and client APIs
| Command | Description |
|---|---|
npm run dev |
Start the development server |
npm run build |
Create a production build |
npm run preview |
Preview the production build |
npm run lint |
Run TypeScript type checking |
GymPro is designed around a few core ideas:
- Minimal interface
- Fast interactions
- Responsive design
- Clean data visualization
- Long-term progress tracking
- Scalable architecture
- AI workout recommendations
- Progressive overload insights
- Nutrition tracking
- Calendar view
- Offline support
- Workout sharing
This project is licensed under the MIT License.