Real-time MERN platform connecting blood banks, donors, and patients. Superadmin onboards blood banks and assigns per-bank admins; bank admins manage donors, patients, and approve/reject donation & receive requests — with live updates over Socket.IO.
Live demo: redeploying — link coming soon
- Role-based access — Superadmin, Bank Admin, Donor, Patient, each with enforced routes (
/superadmin,/admin,/donor,/patient) - Request workflow — donors create donation requests, patients create receive requests, bank admins approve/reject
- Real-time updates — Socket.IO pushes request/status changes without refresh
- JWT auth with bcrypt-hashed passwords; per-bank data isolation
- Backend: Node.js, Express, Mongoose, Socket.IO, JWT, bcrypt
- Frontend: React (Vite), React Router, Socket.IO client, Axios
- DB: MongoDB
backend/ Express API + MongoDB models
frontend/ React app (Vite)
Prereqs: Node 18+, MongoDB connection string
-
Configure backend environment:
- Create
backend/.env:PORT=5000 MONGO_URL=<your-mongodb-connection-string> JWT_SECRET=<strong-secret> SEED_SUPERADMIN_EMAIL=superadmin@example.com SEED_SUPERADMIN_PASSWORD=superadmin123
- Create
-
Install, seed, and run services:
-
Backend
cd backend npm install npm run seed npm run devAPI at
http://localhost:5000 -
Frontend (new terminal)
cd frontend npm install npm run devApp at the printed Vite URL (typically
http://localhost:5173)
-
-
Superadmin (seeded via
npm run seed)- Email: from
SEED_SUPERADMIN_EMAIL(superadmin@example.comby default) - Password: from
SEED_SUPERADMIN_PASSWORD(superadmin123by default) - After login you will be redirected to
/superadminwhere you can create blood banks and specify per-bank admin credentials.
- Email: from
-
Bank Admin
- Seeded example for demo bank:
- Email:
admin@central.com - Password:
admin123
- Email:
- After login you will be redirected to
/admin. - Any new bank created by the Superadmin uses the admin email/password entered in the Add Blood Bank form.
- Seeded example for demo bank:
-
Donor/Patient
- Create via the app signup form (roles available:
donor,patient).
- Create via the app signup form (roles available:
Routes after login are enforced by role:
- Superadmin ->
/superadmin - Admin ->
/admin - Donor ->
/donor - Patient ->
/patient
The frontend uses frontend/src/api.js with baseURL defaulting to http://localhost:5000. If you change the backend port or host, update that file or set up a proxy.
Backend (backend/package.json):
npm run dev– start API servernpm run seed– seed Superadmin, demo bank, and demo bank admin
Frontend (frontend/package.json):
npm run dev– start Vite dev servernpm run build– production buildnpm run preview– preview built site
Base URL: http://localhost:5000
POST /auth/signup– donor/patient signupPOST /auth/login– login (all roles)GET /banks– list banks (auth required)POST /banks– create bank (superadmin)DELETE /banks/:id– delete bank (superadmin)GET /admin/users– list users in admin bank (admin)POST /admin/users– create donor/patient in admin bank (admin)DELETE /admin/users/:id– delete user (admin)POST /requests/donate– donor creates donation request (donor)POST /requests/receive– patient creates request to receive blood (patient)GET /requests/pending– pending requests for admin bank (admin)POST /requests/:id/approve– approve a request (admin)POST /requests/:id/reject– reject a request (admin)
All protected endpoints require Authorization: Bearer <token>.
-
Backend will not start / Mongo errors:
- Verify
backend/.envandMONGO_URL. - Ensure your IP is allowed in Atlas (if using MongoDB Atlas).
- Verify
-
401 Unauthorized in frontend:
- Your token may be missing/expired. Login again.
-
Port conflicts:
- Change frontend port:
npm run dev -- --port 5174 - Change backend port: set
PORTinbackend/.envand restart.
- Change frontend port:
- Change all default secrets and seeded passwords in production.
- Prefer environment variables for secrets and connection strings.
MIT — see LICENSE