A Conference Management Platform (MERN) for the official ICNARI 2026 conference at NIT Patna (Patna + Bihta Campus).
Live: https://icnari26.nasl.in
New to this codebase? Start with docs/DEVELOPER_GUIDE.md. β¨
This repository powers:
- A public conference website (About, Authors, Program, Committees, Gallery, Sponsors, Contact)
- A secure admin dashboard used by organizers to manage website content without editing code
The backend is an Express API backed by MongoDB (Mongoose). Media is stored on Cloudinary and referenced by URL.
- Admin dashboard to manage:
- Speakers
- Papers/Notices
- Recent updates
- Photo gallery
- Committee members (Organising / International / Technical / Industry Programme)
- Contact form submissions (admin inbox)
- JWT-protected admin actions
- Token is sent via a custom request header:
token: <JWT>
- Token is sent via a custom request header:
- Cloudinary uploads (Multer + Cloudinary SDK)
- MongoDB support (local install / Atlas / or Docker Compose for dev)
- Deployment-ready backend via Docker Compose + Jenkins pipeline
Frontend (frontend/package.json):
- React (Vite)
- React Router
- Tailwind CSS
- Chakra UI
- Axios
Backend (backend/package.json):
- Node.js + Express
- MongoDB + Mongoose
- JWT (jsonwebtoken)
- bcryptjs (password hashing)
- Multer + Cloudinary (uploads)
Top-level layout:
.
βββ backend/ # Express API
βββ frontend/ # React SPA (Vite)
βββ docs/ # Developer guide + OpenAPI spec
βββ docker-compose.dev.yml # Local MongoDB
βββ docker-compose.prod.yml # Backend containers (used by Jenkins)
βββ Jenkinsfile # CI/CD pipeline for Docker deployment
- Node.js 20 (the backend Docker image uses
node:20-bookworm-slim) - pnpm (recommended) or npm
- MongoDB (choose one): local MongoDB install, MongoDB Atlas, or Docker + Docker Compose
Pick one option:
From the repository root:
docker compose -f docker-compose.dev.yml up -dMongoDB root credentials from docker-compose.dev.yml:
- Username:
root - Password:
example - Host/port:
localhost:27017
β Local MongoDB (typical default, no auth):
- Install MongoDB for your OS (Ubuntu users can install via official MongoDB docs).
- Start MongoDB service (
mongod). - Use this connection string in
backend/.env:
URI=mongodb://127.0.0.1:27017/conference_dbβ MongoDB Atlas (cloud):
- Create a free cluster on Atlas and copy the connection string.
- Use this connection string in
backend/.env:
URI=mongodb+srv://<username>:<password>@<cluster-host>/conference_db?retryWrites=true&w=majorityIf you use the admin bootstrap script, set MONGO_URI similarly.
Install dependencies and start the API server:
cd backend
pnpm install
pnpm run devAlternative (npm):
cd backend
npm install
npm run devHealth check:
GET http://localhost:3000/health
Install dependencies and start the Vite dev server:
cd frontend
pnpm install
pnpm run devAlternative (npm):
cd frontend
npm install
npm run devFrontend default URL:
http://localhost:5173
These variables are read in backend/src/*:
# API
PORT=3000
# MongoDB
URI=mongodb://root:example@localhost:27017/conference_db?authSource=admin
# JWT
secret=change_me_to_a_strong_secret
# Cloudinary
cloud_name=your_cloudinary_cloud_name
api_key=your_cloudinary_api_key
api_secret=your_cloudinary_api_secretUsed by the bootstrap admin script backend/scripts/createAdmin.js:
MONGO_URI=mongodb://root:example@localhost:27017/conference_db?authSource=adminUsed across frontend/src/*:
VITE_API_URL=http://localhost:3000docker-compose.prod.yml loads environment variables from app.env at the repository root.
Route groups are mounted in backend/src/routes/index.js:
/user(login, admin creation, list users, Cloudinary image helper)/speaker/papers/recentupdate/photogallery/contact/organisingcommitee/internationalcommitee/technicalcommitee/industryprogramme
OpenAPI 3.0 spec: docs/openapi.yaml.
Authentication:
- Protected endpoints require a JWT in the
tokenrequest header (notAuthorization).
Contributions are welcome.
- See CONTRIBUTING.md for local setup, branch naming, and PR guidelines.
- Please follow the Code of Conduct in CODE_OF_CONDUCT.md.
Thanks to everyone who has contributed to this project. π
- Suryansh Verma (GitHub: suryanshvermaa)
- The compose file builds the backend image from backend/Dockerfile and exposes port
3000. app.envis intentionally not committed; provide it securely via your CI/CD environment.- The frontend is set up for Vercel (see frontend/vercel.json).
MIT β see LICENSE.