Official codebase for the ICNARI 2026 conference website maintained for NIT Patna (Bihta Campus). The project is a full-stack web app with:
- A public website for attendees and authors (About, Authors, Program, Committees, Gallery, Sponsors, Contact)
- A secure admin dashboard used by organizers to update website content without editing code (speakers, notices/papers, updates, photo gallery, committee members, contact messages)
Live site: https://icnari26.nasl.in
New to this codebase? Start here: 📘 docs/DEVELOPER_GUIDE.md
- 🧑💼 Admin dashboard for managing speakers, notices/papers, recent updates, gallery, and committee members
- 🔐 JWT-based protected admin actions (token via
tokenheader) - ☁️ Cloudinary-backed media uploads (via Multer)
- 📬 Public contact form + admin view for submitted messages
- 🐳 Docker Compose setup for local MongoDB (dev) and containerized backend (prod)
- 🧰 CI/CD-ready Jenkins pipeline for backend deployment
- Frontend: React + Vite, React Router, Tailwind CSS, Chakra UI
- Backend: Node.js, Express
- Database: MongoDB (Mongoose)
- Auth: JWT (token is sent via a custom
tokenheader) - Uploads: Multer + Cloudinary
- backend — Express API server
- frontend — React SPA (Vite)
- docs/DEVELOPER_GUIDE.md — detailed beginner-friendly guide
- docker-compose.dev.yml — MongoDB for local development
- docker-compose.prod.yml — backend container (used by Jenkinsfile)
- Jenkinsfile — Jenkins pipeline for backend Docker deployment
- Jenkins CI/CD: Jenkinsfile
- Docker Compose: dev DB in docker-compose.dev.yml, backend container in docker-compose.prod.yml
- Admin bootstrap: backend/scripts/createAdmin.js
- Frontend deployment: Vercel config in frontend/vercel.json
- Node.js 18+ (Node 20 works)
- pnpm (recommended) or npm
- Docker + Docker Compose (for MongoDB locally)
This repo provides MongoDB via Docker Compose.
docker compose -f docker-compose.dev.yml up -dMongoDB will be reachable at mongodb://root:example@localhost:27017.
cd backend
pnpm install
pnpm run dev
# or
# npm install
# npm run devCreate backend/.env with:
# 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_secret
# Optional: used by backend/scripts/createAdmin.js
MONGO_URI=mongodb://root:example@localhost:27017/conference_db?authSource=adminBackend health check:
GET http://localhost:3000/health
cd frontend
pnpm install
pnpm run dev
# or
# npm install
# npm run devCreate frontend/.env with:
VITE_API_URL=http://localhost:3000Frontend will be available at http://localhost:5173.
Use the CLI script (creates a User document in MongoDB):
cd backend
node scripts/createAdmin.jsNotes:
- The script reads
MONGO_URI(and falls back tomongodb://root:example@localhost:27017). - The backend server itself uses
URIfrom backend/src/database/dbconn.js.
- Backend:
POST /user/login - Frontend:
/login
Protected endpoints expect a JWT in the request headers:
token: <JWT>
Important: the backend expects the header name to be exactly token (not Authorization).
The API mounts these route prefixes in backend/src/routes/index.js:
/user/photogallery/speaker/papers/recentupdate/contact/organisingcommitee/internationalcommitee/technicalcommitee/industryprogramme
Production compose file: docker-compose.prod.yml
docker compose -f docker-compose.prod.yml up -d --build --force-recreateIt expects an env file named app.env in the repository root (see docker-compose.prod.yml).
The included Jenkinsfile copies an external env file to ./app.env and then runs the compose command.
This repository includes a production-oriented Jenkins pipeline in Jenkinsfile. At a high level it:
- Cleans the Jenkins workspace
- Clones this repository
- Copies an environment file to
./app.env(the pipeline expects it to exist on the Jenkins machine) - Runs
docker compose -f docker-compose.prod.yml up -d --build --force-recreate
Operational notes:
- 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.