- React + Vite – Fast builds, component-based UI
- React Router DOM – Client-side routing
- Material UI – Pre-built components
- Socket.IO Client – Real-time forum
- react-google-recaptcha – Bot prevention
- react-csv – Participant CSV export
- mui-tel-input – Phone number input
- Express – REST API
- MongoDB + Mongoose – Database
- JWT + bcryptjs – Auth and password hashing
- Socket.IO – Real-time discussion forum
- Nodemailer – Email ticket confirmation
- QRCode + uuid – Ticket generation
- Fuse.js – Fuzzy event search
- cookie-parser, cors, dotenv – Utilities
- JWT auth with HttpOnly cookies
- Role-based access: participant, organizer, admin
- Event CRUD with draft/published/ongoing/completed states
- Custom dynamic registration forms (text, dropdown, checkbox)
- Merchandise events with stock, variants, and purchase limits
- CSV export of participant + form response data
- Fuzzy search with Fuse.js
- Participant preference and club following
Selected for compatibility with the existing implementation and ease of integration.
Merchandise Payment Approval Workflow
- Participants upload payment proof (image) after placing a merchandise order
- Order enters
Pendingstate; no QR ticket is issued at this stage - Organizer has a dedicated tab listing all orders with proof image, status (Pending / Approved / Rejected), and approve/reject actions
- On approval: stock is decremented, a unique QR ticket is generated, and a confirmation email is sent to the participant
- Rejected orders display a rejection notice with no ticket issued
QR Scanner & Attendance Tracking
- Organizers open a scanner page using device camera to scan participant QR codes
- Each scan marks attendance with a timestamp; duplicate scans are rejected with an error
- Live attendance dashboard shows scanned vs. not-yet-scanned participants
- Attendance report exportable as CSV
- Manual check-in override available for exceptional cases
Selected for compatibility with the existing implementation and ease of integration.
Real-Time Discussion Forum
- Per-event forum accessible on the Event Details page, restricted to registered participants and the organizer
- Powered by Socket.IO with messages persisted in MongoDB
- Supports threaded replies (parent–child structure), emoji reactions (per-user state), pinned messages, and organizer announcements
- Organizers can delete or pin any message; soft delete preserves thread context
- Unread message counter shown on the forum entry point
Organizer Password Reset Workflow
- Organizers submit a password reset request with a reason from their profile
- Admin dashboard lists all requests with club name, date, reason, and status (Pending / Approved / Rejected)
- Admin can approve (system generates a new password visible to admin) or reject with a comment
- Status tracking and full request history available to both organizer and admin
Selected for compatibility with the existing implementation and ease of integration.
Bot Protection
- Google reCAPTCHA v2 integrated on both the registration and login pages
- reCAPTCHA token verified server-side before processing credentials
- Prevents automated account creation and brute-force login attempts
cd backend && npm installbackend/.env:
PORT=5000
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_secret
[email protected]
EMAIL_PASS=your_app_password
RECAPTCHA_SECRET_KEY=your_key
node src/scripts/adminCreation.js # seed admin
npm startcd frontend && npm installfrontend/.env:
VITE_API_URL=http://localhost:5000
VITE_RECAPTCHA_SITE_KEY=your_key
npm run devApp runs at http://localhost:5173.
Default admin: [email protected] / banana