A premium, full-stack application for fitness studios to manage classes, bookings, memberships, and track member progress with cinematic aesthetics and deep analytics.
- π Smart Booking: Browse and book fitness classes with calendar integration
- πͺ Workout Tracking: Log exercises, sets, reps, and weight with PR tracking
- π Body Analytics: Track weight, body fat, and measurements with interactive charts
- π― Gamification: View workout streaks, personal records, and consistency graphs
- β Feedback: Rate classes and instructors
- π± Quick Access: QR code check-in for classes
- π Cinematic UI: Stunning dark/light mode with glassmorphism design
- π Manage class schedules and capacity
- π₯ Real-time class attendance/check-ins
- β Track performance ratings and reviews
- π View teaching statistics
- π€ User management (RBAC)
- π Master class scheduling
- π³ Membership plan management
- π Platform-wide analytics and revenue tracking
- Runtime: Node.js + Express + TypeScript
- Database: MongoDB + Mongoose
- Auth: JWT with specialized middlewares
- Validation: Zod
- Storage: Cloudinary (Image uploads)
- Payments: Razorpay Integration
- Utils: QR Code generation, Winston Logger
- Framework: React 19 + TypeScript + Vite
- UI System: Material-UI (v7) + Custom Theme Engine
- Animations: Framer Motion
- Data Viz: Recharts (Customized)
- Routing: React Router v7
- Calendar: FullCalendar
- HTTP: Axios with Interceptors
- Node.js 18+
- MongoDB (local or Atlas)
- Cloudinary Account
- Razorpay Account
cd server
npm install
# Configure .env file (see below)
npm run dev
# Seed Database (Optional)
npm run db:seedServer runs on http://localhost:5000
cd client
npm install
npm run devApp runs on http://localhost:5173
Create server/.env based on .env.example:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/fitness-studio
JWT_SECRET=your-super-secret-jwt-key
JWT_EXPIRES_IN=7d
CORS_ORIGIN=http://localhost:5173
# Cloudinary (Images)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Razorpay (Payments)
RAZORPAY_KEY_ID=your_key_id
RAZORPAY_KEY_SECRET=your_key_secretCreate client/.env:
VITE_API_URL=http://localhost:5000/api/v1
VITE_RAZORPAY_KEY_ID=your_razorpay_key_idPOST /api/v1/auth/register- Register new userPOST /api/v1/auth/login- Login
Classes: CRUD operations for schedulesBookings: Reserve, Cancel, Check-in (QR)Workouts: Log sessions, view history, PRsMemberships: Subscribe to plansDashboard: Role-specific analyticsUploads: Profile picture management
Populate the database with demo users, classes, and workouts:
cd server
npm run db:seedNote: This script uses tsx to run without compilation.
# Register as Member
curl -X POST http://localhost:5000/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"member@test.com","password":"password123","fullName":"Test Member","role":"MEMBER"}'server/
βββ src/
β βββ config/ # DB, Swagger, Envs
β βββ middlewares/ # Auth, Upload, Validation
β βββ modules/ # Feature-based architecture
β β βββ auth/
β β βββ users/
β β βββ classes/
β β βββ ...
β βββ scripts/ # Seeding & Maintenance
β βββ app.ts # Express setup
client/
βββ src/
β βββ components/ # Shared UI
β βββ context/ # Auth, Toast, Theme
β βββ features/ # Page-level smart components
β βββ hooks/ # Custom hooks
β βββ theme/ # MUI Theme config
β βββ services/ # API integration
MIT
Sarthak Singh