A full-stack MERN application that unifies workout tracking, progress visualization, and social fitness networking in one powerful platform.
- JWT-based registration & login
- Secure password hashing with bcrypt
- Protected routes, auto token refresh
- Full exercise library (50+ exercises seeded)
- Set/rep/weight tracking per exercise
- Auto-calculate total volume (kg)
- Personal Record (PR) detection with celebration modal π
- Live workout timer
- Public/private workout toggle
- Volume progression chart (8-week area chart)
- Weekly workout frequency bar chart
- Stats: total workouts, volume, streak, PRs
- Recent workout history
- Following feed + Discover tab
- Like & comment on workouts
- Real-time exercise previews with weight data
- 50+ exercises with muscle group filters
- Search by name or muscle
- Filter by category / difficulty / equipment
- Expandable cards with instructions
- Public profile pages (
/profile/:username) - Follow / unfollow users
- PR showcase section
- Edit profile (name, bio, goal)
- Search athletes by name or username
- Quick follow from search results
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router v6, Recharts |
| Backend | Node.js, Express.js |
| Database | MongoDB + Mongoose |
| Auth | JWT + bcryptjs |
| Styling | Pure CSS (custom design system) |
| Build Tool | Vite |
- Node.js v18+
- MongoDB running locally (or MongoDB Atlas URI)
# Install all dependencies
npm run install:allThe .env files are pre-configured for local development:
- Server:
server/.envβ MongoDB URI, JWT secret, port - Client:
client/.envβ API URL
For MongoDB Atlas, update server/.env:
MONGO_URI=mongodb+srv://<user>:<password>@cluster.mongodb.net/fitconnectnpm run seedThis populates MongoDB with 50+ exercises across all muscle groups.
npm run devThis starts:
- Backend β
http://localhost:5000 - Frontend β
http://localhost:5173
fitconnect/
βββ package.json β Root scripts
β
βββ server/ β Express + Mongoose API
β βββ server.js β Entry point
β βββ .env β Environment variables
β βββ models/
β β βββ User.js β User schema (auth, stats, PRs, social)
β β βββ Workout.js β Workout + sets schema
β β βββ Exercise.js β Exercise library schema
β βββ routes/
β β βββ auth.js β /api/auth (register, login, me)
β β βββ workouts.js β /api/workouts (CRUD, likes, comments)
β β βββ exercises.js β /api/exercises (library + search)
β β βββ feed.js β /api/feed (following + discover)
β β βββ users.js β /api/users (profile, follow, search)
β βββ middleware/
β β βββ auth.js β JWT protect middleware
β βββ scripts/
β βββ seedExercises.js β 50+ exercise seed data
β
βββ client/ β React + Vite frontend
βββ index.html
βββ vite.config.js β Proxy to backend
βββ src/
βββ main.jsx
βββ App.jsx β Router + auth guards
βββ index.css β Global design system
βββ api/
β βββ axios.js β Axios instance + interceptors
βββ context/
β βββ AuthContext.jsx β Global auth state
β βββ ToastContext.jsx β Notification system
βββ components/
β βββ Layout.jsx β Sidebar navigation
β βββ Layout.css
βββ pages/
βββ AuthPage.jsx β Login + Register
βββ Dashboard.jsx β Stats, charts, recent workouts
βββ LogWorkout.jsx β Full workout builder
βββ Feed.jsx β Social activity feed
βββ Exercises.jsx β Exercise library browser
βββ Profile.jsx β User profile + PR showcase
βββ Discover.jsx β User search & follow
| Method | Route | Description |
|---|---|---|
| POST | /api/auth/register |
Register new user |
| POST | /api/auth/login |
Login, get JWT |
| GET | /api/auth/me |
Get current user |
| Method | Route | Description |
|---|---|---|
| POST | /api/workouts |
Log new workout |
| GET | /api/workouts/my |
Get own workouts |
| GET | /api/workouts/stats |
Get stats + charts data |
| GET | /api/workouts/:id |
Get single workout |
| POST | /api/workouts/:id/like |
Like / unlike |
| POST | /api/workouts/:id/comment |
Add comment |
| DELETE | /api/workouts/:id |
Delete workout |
| Method | Route | Description |
|---|---|---|
| GET | /api/exercises |
List (with filters) |
| GET | /api/exercises/:id |
Single exercise |
| POST | /api/exercises |
Create custom exercise |
| Method | Route | Description |
|---|---|---|
| GET | /api/feed |
Following feed |
| GET | /api/feed/discover |
Discover all public |
| Method | Route | Description |
|---|---|---|
| GET | /api/users/search?q= |
Search users |
| GET | /api/users/:username |
Public profile |
| POST | /api/users/:id/follow |
Follow / unfollow |
| PATCH | /api/users/me |
Update own profile |
- Real-time notifications (Socket.io)
- Progress photo uploads (Cloudinary)
- Challenge creation with leaderboards
- Workout program templates & sharing
- Gym check-in with location services
- Form check video upload + community feedback
- Advanced analytics (muscle balance, PR history charts)
- Native mobile app (React Native)
| Name | ID |
|---|---|
| Pratham Sorte | 1032240024 |
| Sarthak Parashetti | 1032240067 |
| Tushar Gitte | 1032240020 |
| Abhineet Chowdhury | 1032240036 |
Course: Full Stack Web Development Lab β MIT World Peace University
Faculty: Dr. Sanket Salvi
Academic Year: 2025-26, Semester 6
MIT License β Built for educational purposes.