What I Built
A full-stack Blood Donation Management System for Aditya University that handles
camp registration, live dashboards, admin management, and real-time updates.
π΄ Live Demo: https://blood-donation-web-gamma.vercel.app
π» GitHub: https://github.com/BollareddyPranoyRaj/BloodDonationWeb
Tech Stack
- Frontend: React, React Bootstrap, Recharts, Socket.IO Client
- Backend: Node.js, Express, MongoDB, Mongoose, Socket.IO
- Deployment: Vercel (Frontend) + Render (Backend) + MongoDB Atlas
Key Features
- ποΈ Camp-based donor registration flow
- π Live dashboard with real-time Socket.IO updates
- π©Έ Donation desk for confirming donations
- π¨βπΌ Admin panel for managing camps and gallery
- π Donor demographics and analytics with Recharts
- πΈ Gallery management with image uploads
- π¬ Contact form with message inbox
- π OTP verification system
Complete REST API
Authentication
-
POST /api/loginβ Admin login -
POST /api/send-otpβ Send OTP for verification -
POST /api/verify-otpβ Verify OTP
Donor Registration
-
POST /api/registerβ Register as a donor for a camp -
GET /api/registrationsβ Get all registrations -
GET /api/registrations/searchβ Search donor by roll number/date -
POST /api/registrations/confirm-donationβ Confirm donation at desk
Events
-
POST /api/create-eventβ Create camp with banner image upload -
GET /api/eventsβ Get all blood donation camps -
DELETE /api/event/:idβ Delete an event
Volunteers & Staff
-
POST /api/add-volunteerβ Add volunteer -
GET /api/volunteersβ Get all volunteers -
POST /api/add-staffβ Add staff donor manually -
GET /api/staffβ Get all staff donors -
POST /api/add-guest-managementβ Add guest/management donor -
GET /api/guest-managementβ Get all guest donors
Gallery
-
POST /api/upload-galleryβ Upload image to gallery -
GET /api/galleryβ Get all gallery images
Contact
-
POST /api/contactβ Submit contact form -
GET /api/messagesβ Get all contact messages
Real-time
- Socket.IO β Live dashboard updates on every donation confirmation
Biggest Challenge
Deploying a monorepo to Render β the backend folder was accidentally
set as a git submodule which caused build failures. Fixed it by
deinitializing the submodule and re-adding as a regular folder.
What I Learned
- Real-time communication with Socket.IO
- Full-stack deployment with Vercel + Render + MongoDB Atlas
- Monorepo structure for full-stack projects
- OTP-based authentication flow
- Image upload handling with Multer
What's Next
- Cloudinary integration for persistent image uploads
- Donor export/reporting feature
- Automated tests
If you have any questions about the project, drop them in the comments!
Top comments (0)