Skip to content

TechGenius-Karan/Gym-Scheduler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gym Scheduler

A web app for planning your weekly gym split. Pick a training template, customise your exercises, and save your schedule — all in one place. No spreadsheets, no notes app, no forgetting what day is leg day.


Features

  • Google Sign-In — one click, no passwords
  • Training templates — choose from PPL, Upper/Lower, Full Body, or Bro Split as a starting point
  • Fully editable schedule — rename splits, add/remove exercises, tweak sets and reps inline
  • Drag to reorder — drag exercises up and down within a day to reorder them
  • Rest day toggle — mark any day as a rest day; rest cards show a personalised message using your name
  • Today highlight — your current day is always visually marked on the schedule
  • 1RM Calculator — estimate your one-rep max using the Epley formula
  • Calorie & Protein Estimator — calculates daily calorie and protein targets using the Mifflin-St Jeor formula, with support for different goals (cut / maintain / bulk) and cm or ft/in height input
  • BMI Calculator — animated semicircular gauge showing your Body Mass Index across WHO-standard zones (Underweight / Normal / Overweight / Obese), with kg/lbs and cm/ft+in input support
  • Multiple saved programs — save and switch between named training programs (e.g. "Bulk — PPL", "Cut Phase") via a program bar at the top of the schedule page; programs can be renamed, deleted, and created from scratch or a template
  • Auto-save state — edits stay in memory until you explicitly save

Tech Stack

Layer Technology
Frontend React 19, Vite, Tailwind CSS v4, React Router
Backend Node.js, Express 5
Database MongoDB (Mongoose)
Auth Google OAuth 2.0, JWT

Getting Started

Prerequisites

  • Node.js 18+
  • A MongoDB Atlas account (free tier works fine)
  • A Google Cloud project with OAuth 2.0 credentials

1. Clone the repo

git clone https://github.com/TechGenius-Karan/Gym-Scheduler.git
cd Gym-Scheduler

2. Install dependencies

# Install server dependencies
cd server
npm install

# Install client dependencies
cd ../client
npm install

3. Set up environment variables

Create a .env file inside the server/ folder. Use server/.env.example as a reference:

MONGO_URI=your_mongodb_connection_string
PORT=5000
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
JWT_SECRET=any_long_random_string
CLIENT_URL=http://localhost:5173

MongoDB — get your connection string from Atlas: Connect → Drivers → Node.js. If you run into DNS issues with the mongodb+srv:// format on Windows, use the standard connection string (there's a "connecting behind a firewall" link in the same Atlas dialog that gives you the direct format).

Google OAuth — go to Google Cloud Console, create a project, and set up an OAuth 2.0 Web Client. Add http://localhost:5000/auth/google/callback as an authorised redirect URI.

Also create client/.env:

VITE_API_URL=http://localhost:5000

4. Run the app

Open two terminals:

# Terminal 1 — server
cd server
npm run dev
# Terminal 2 — client
cd client
npm run dev

Open http://localhost:5173 in your browser.


Project Structure

Gym-Scheduler/
├── client/                  # React frontend
│   └── src/
│       ├── api/             # Fetch wrappers (authApi, scheduleApi, templateApi, programApi)
│       ├── components/      # UI components
│       ├── context/         # AuthContext, ScheduleContext
│       ├── pages/           # LoginPage, SchedulePage, ToolsPage
│       └── utils/           # dateUtils
│
└── server/                  # Express backend
    ├── config/              # MongoDB connection
    ├── data/templates/      # Static JSON split templates
    ├── middleware/          # JWT auth middleware
    ├── models/              # Mongoose models (User, Schedule, Exercise, Program)
    └── routes/              # auth, schedule, templates, programs

API Endpoints

Method Route Auth Description
GET /auth/google No Redirect to Google consent screen
GET /auth/google/callback No OAuth callback, issues JWT
GET /auth/me JWT Returns current user
GET /api/schedule JWT Returns user's schedule or null
POST /api/schedule JWT Save or overwrite schedule
GET /api/templates JWT List all template summaries
GET /api/templates/:id JWT Full template with exercises

Adding a New Training Template

Drop a .json file into server/data/templates/. It gets picked up automatically — no code changes needed. Follow the same shape as the existing templates:

{
  "id": "your-template-id",
  "name": "Template Name",
  "description": "Short description.",
  "days": [
    {
      "day": "Monday",
      "isRest": false,
      "splitName": "Push",
      "exercises": [
        { "name": "Bench Press", "sets": 4, "reps": 8 }
      ]
    }
  ]
}

Roadmap

  • AI coach — a side panel powered by Google Gemini that suggests a revised weekly schedule when you miss a session, with before/after preview and one-click apply
  • Mobile app

About

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages