Compact outing-management application with student and guard frontends and an Express + MongoDB backend. Actually built for college outing management but can be adapted for other uses. Demo video (YouTube)
Badges
- Student frontend: studentView
- Guard frontend: guardView
- Student: signup, login, onboard, create outing, generate QR, view history.
- Guard: login, scan QR or manual MIS lookup, approve/reject/complete outings, filter & sort outings.
- Backend: Express APIs, MongoDB models, cookie-based JWT auth, email verification.
Backend: backend/.env (example)
PORT=5000
NODE_ENV=production
MONGODB_URI=mongodb://<user>:<pass>@host:port/outingSystem
JWT_SECRET=REPLACE_WITH_SECURE_SECRET
FRONTEND_URL=http://localhost:5173
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_SECURE=false # true for 465, false for other ports
EMAIL_USER=you@example.com
EMAIL_PASS=your_email_password
EMAIL_FROM="Outing System <no-reply@example.com>"
Frontends: frontend/*/.env
VITE_API_URL=http://localhost:5000/api/v1
VITE_NODE_ENV=development
Do NOT commit secrets.
- Backend
cd backend
npm install
npm run dev- Student frontend
cd frontend/studentview
npm install
npm run dev- Guard frontend
cd frontend/guardView
npm install
npm run devOpen student app at http://localhost:5173 (default Vite port) or check configured ports.
- Build backend and frontends, serve frontend static build with nginx.
- Use docker-compose to inject env vars securely.
Base path: /api/v1
Student
- POST
/student/signup - POST
/student/login(sets httpOnly cookie) - POST
/student/outing/add - GET
/student/outing/history
Guard
- POST
/guard/login - GET
/guard/check-auth - GET
/guard/outings(filters: status, search, startDate, endDate) - GET
/guard/outing/:id - POST
/guard/approve— body:{ data: { _id } } - POST
/guard/reject— body:{ data: { _id } } - POST
/guard/complete— body:{ data: { _id } }
- Create a branch per feature.
- Run linters & tests before PR.
- Keep secrets out of PRs.
MIT







