A full-stack MERN application for conducting programming contests with admin management and user participation capabilities.
campusOS/
├── backend/ # Node.js + Express server
│ ├── config/ # Configuration files
│ ├── models/ # MongoDB models
│ ├── controllers/ # Business logic
│ ├── routes/ # API routes
│ ├── middleware/ # Auth & upload middleware
│ ├── utils/ # Utility functions
│ ├── server.js # Main server file
│ ├── package.json
│ ├── .env.example
│ └── .gitignore
│
└── frontend/ # React application
├── src/
│ ├── pages/ # React pages
│ ├── components/ # React components
│ ├── context/ # Auth context
│ ├── hooks/ # Custom hooks
│ ├── utils/ # Utility functions
│ ├── App.js
│ ├── index.js
│ └── index.css
├── public/
├── package.json
├── .env.example
└── .gitignore
cd backend
npm install
cp .env.example .env # Configure with your credentials
npm run devcd frontend
npm install
cp .env.example .env
npm startFrontend: http://localhost:3000
Backend: http://localhost:5000
MONGODB_URI=mongodb://localhost:27017/campusOS
JWT_SECRET=your_secure_key
PORT=5000
CLOUDINARY_CLOUD_NAME=your_name
CLOUDINARY_API_KEY=your_key
CLOUDINARY_API_SECRET=your_secret
JUDGE0_API_KEY=your_key
JUDGE0_BASE_URL=https://judge0-ce.p.rapidapi.com
EMAIL_USER=your_email@gmail.com
EMAIL_PASSWORD=your_app_passwordREACT_APP_API_URL=http://localhost:5000/api✅ Multi-step contest creation ✅ 3 question types: MCQ, Input, Coding ✅ Dynamic prize pool setup ✅ QR code & receipt upload (Cloudinary) ✅ Registration approval workflow ✅ View all contests with filters
✅ Browse upcoming contests ✅ Free/Paid registration ✅ QR code scanner for payments ✅ Contest interface with timer ✅ Leaderboard & results ✅ Code execution via Judge0
POST /api/auth/signup- Admin signupPOST /api/auth/login- Admin login
POST /api/contests- Create contestGET /api/contests- Get all contestsPOST /api/contests/add-question- Add question
POST /api/registrations- Register userGET /api/registrations/list/all- Get all registrations (admin)PATCH /api/registrations/:id/approve- Approve (admin)PATCH /api/registrations/:id/reject- Reject (admin)
POST /api/submissions- Submit answerGET /api/submissions/:contestId/leaderboard- Get leaderboard
- Admin signs up & creates contest
- Admin uploads QR code (for paid contests)
- Admin adds questions (MCQ/Input/Coding)
- User registers for contest
- For paid: scans QR, uploads receipt
- Admin approves registration
- User joins contest when live
- Answers evaluated → Leaderboard generated
- React, Node.js, Express, MongoDB
- Cloudinary, Judge0, Nodemailer
- Tailwind CSS, Axios
All code is production-ready with:
- Error handling
- Input validation
- JWT authentication
- Role-based access control
- Cloud storage integration
- Email notifications
Built with ❤️ for Campus Programming Contests