This project is a full-stack EdTech web application built with Node.js, Express.js, MongoDB, and React.js. It is designed to manage educational workshops.
The system handles workshop creation, registrations, attendance tracking, feedback collection, material distribution, and certificate generation while strictly enforcing role-based access control (RBAC).
It aims to streamline the entire workshop lifecycle for admins, instructors, and participants.
Important
Project Status: Complete
WorkshopHub is a completed personal learning and portfolio project developed independently by me.
While the core features have been fully implemented, the project might still receive occasional refinements and bug fixes in the future by me. Feedback and discussions are always welcome, but the repository is not intended for external contributions.
Note
These screenshots display placeholder data (names of legendary programmers as instructors and workshop names related to their projects/expertise) used for testing during development.
- Backend: Node.js, Express.js
- Database: MongoDB
- ODM: Mongoose
- Authentication: JWT-based authentication
- Password Hashing: Bcrypt (for secure password storage)
- Containerisation: Docker, Docker Compose
- Testing/Debugging Tools: Postman, Browser DevTools
- Frontend: React, Tailwind CSS, Vite
- Web Server: Nginx (serving the optimised frontend build)
- Certificate PDF Generation:
pdfkit - Toast Notifications:
react-hot-toast - Icons:
lucide-react
I containerised the entire application using Docker and Docker Compose to make local execution reproducible and to avoid configuration differences across systems.
graph TD
subgraph Host Machine / Docker Network
db[Database: MongoDB 7.0]
backend[Backend: Express.js API]
frontend[Frontend Web Server: Nginx]
end
user((Browser)) -->|Access App Port 3000| frontend
user -->|Access API Port 8000| backend
backend -->|Persists Data| db
- Multi-Stage Build: Configured a multi-stage Dockerfile for the frontend to compile React with Node.js and serve the static files using Nginx. This keeps the production image extremely small (under 30MB).
- Network Isolation: The database, backend, and frontend run in their own containers within a private bridge network.
- Data Persistence: Used a named volume (
mongo_data) so that data persists even when the containers are stopped or rebuilt.
Make sure you have Docker and Docker Compose installed on your system.
Spin up all services in the background:
docker compose up --build -d- Frontend:
http://localhost:3000 - Backend API:
http://localhost:8000/api
Populate the database with sample data by running the seeder inside the backend container:
docker compose exec backend node scripts/seed.js- Test Account: Log in using the pre-seeded test credentials:
- Email:
[EMAIL_ADDRESS] - Password:
password123
- Email:
- New Users: You can register a new account directly from the registration page in the browser to experience the participant registration, attendance tracking, and certificate workflows from scratch.
Shut down and clean up running containers:
docker compose down- Role-Based Access Control (RBAC) and JWT authentication
- Workshop creation and management
- Seamless participant registration and cancellation
- Attendance tracking with instructor-level restrictions
- Workshop material distribution
- Feedback and rating system
- PDF certificate generation for participants
- Clean and responsive user interface
- Robust RESTful API architecture
© 2025-2026 Saptaparno Chakraborty.
All rights reserved.




