The definitive, automated event management ecosystem for BMS College of Engineering.
Streamlining campus life from registration to automated reporting.
BCEP is a high-performance event management platform designed to eliminate the friction of campus event coordination. By moving away from heavy frameworks on the frontend, BCEP achieves near-instant load times while maintaining a robust, scalable Node.js backend to handle the heavy lifting of student data and automated reporting.
- Zero-Framework Frontend: Built with pure HTML5/CSS3 and Vanilla JS for maximum browser compatibility and speed.
- Automated Lifecycle: Events close themselves. Reports email themselves. You just host.
- Smart USN Parsing: Automatically detects and maps branches (CSE, ISE, ECE, etc.) directly from student USNs.
- Moderator Suite: A powerful command center for club leads to track registrations in real-time and export data with a single click.
✨ Click here to view screenshots
See all active registrations happening at a glance. No login needed.
Fast login, faster access.
Smart filters, seamless experience, stunning dashboard.
One-click event registration. Cancel anytime before the deadline.
View all your events in one powerful moderator dashboard.
Track registrations live, export data instantly, or delete the event when needed.
Smart email notifications so nothing slips by.
BCEP/
├── backend/
│ ├── assets/
│ │ └── logo.png
│ ├── src/
│ │ ├── config/
│ │ │ ├── cloudinary.js
│ │ │ └── db.js
│ │ ├── controllers/
│ │ │ ├── auth.controller.js
│ │ │ └── event.controller.js
│ │ ├── middleware/
│ │ │ ├── auth.js
│ │ │ ├── authMiddleware.js
│ │ │ ├── role.js
│ │ │ └── upload.js
│ │ ├── models/
│ │ │ ├── event.js
│ │ │ └── user.js
│ │ ├── routes/
│ │ │ ├── auth.routes.js
│ │ │ └── event.routes.js
│ │ ├── utils/
│ │ │ ├── branchMap.js
│ │ │ ├── createCsv.js
│ │ │ ├── emailRateLimit.js
│ │ │ ├── emailTemplates.js
│ │ │ ├── scheduler.js
│ │ │ └── sendEmail.js
│ │ └── app.js
│ ├── .env
│ ├── package.json
│ └── server.js
├── frontend/
│ ├── Data/
│ │ ├── Clubs/
│ │ │ └── Slideshow/
│ │ │ ├── addix-1.jpg
│ │ │ ├── addix-2.jpg
│ │ │ ├── addix-3.jpg
│ │ │ ├── Ai-verse.jpg
│ │ │ ├── bull-1.jpg
│ │ │ ├── bull-2.jpg
│ │ │ ├── ieee-1.jpg
│ │ │ ├── Moutaineering Club.jpg
│ │ │ ├── ninaad-1.jpg
│ │ │ ├── rando-1.jpg
│ │ │ └── wemp-1.jpg
│ │ └── Images/
│ │ ├── arch.png
│ │ ├── eye-close.png
│ │ ├── eye-open.png
│ │ ├── filter-black.svg
│ │ ├── filter.svg
│ │ └── logo.png
│ ├── Loader/
│ │ ├── loader.css
│ │ └── loader.js
│ ├── Pages/
│ │ ├── landing/
│ │ │ ├── about.css
│ │ │ ├── about.html
│ │ │ ├── login.css
│ │ │ └── login.html
│ │ ├── Mod Dashboard/
│ │ │ ├── create.css
│ │ │ ├── create.html
│ │ │ ├── dashboard.css
│ │ │ ├── dashboard.html
│ │ │ ├── register.css
│ │ │ └── register.html
│ │ ├── Mod Login/
│ │ │ ├── login.css
│ │ │ ├── login.html
│ │ │ └── mod-create.html
│ │ ├── Student Dashboard/
│ │ │ ├── dashboard.css
│ │ │ ├── dashboard.html
│ │ │ ├── profile.css
│ │ │ ├── profile.html
│ │ │ ├── register.css
│ │ │ └── register.html
│ │ └── Student Login/
│ │ ├── Create/
│ │ │ ├── create-account.html
│ │ │ ├── create-email.html
│ │ │ ├── create-otp.html
│ │ │ ├── create-success.html
│ │ │ └── welcome.json
│ │ ├── Reset/
│ │ │ ├── reset-email.html
│ │ │ ├── reset-otp.html
│ │ │ ├── reset-password.html
│ │ │ ├── reset-success.html
│ │ │ └── success.json
│ │ ├── login.css
│ │ └── login.html
│ ├── config.js
│ ├── index.html
│ └── landing.css
├── Readme Assets/
│ ├── cancel-email.png
│ ├── dashboard-1.png
│ ├── dashboard-2.png
│ ├── event-control.png
│ ├── event.png
│ ├── landing.png
│ ├── login.png
│ ├── mod-dashboard.png
│ └── register-email.png
├── .gitignore
└── readme.md
The project follows the Model-View-Controller (MVC) design pattern to ensure clean separation of concerns, scalability, and ease of maintenance.
- Model: Mongoose-based schemas for strict data validation and relational integrity.
- View: Server-side rendered logic with a Vanilla JS/CSS3 frontend for browser-native performance and low latency.
- Controller: Express routers managing business logic, authentication flows, and automated triggers.
- Runtime: Node.js (v5.1.0+)
- Framework: Express.js
- Database: MongoDB Atlas via Mongoose (v8.19.4)
- Frontend: Vanilla JavaScript, HTML5, CSS3
- Automation: node-cron for scheduled event termination and reporting.
- Asset Management: Cloudinary for optimized cloud storage and delivery of event posters.
- Communication: Nodemailer for SMTP-based OTP delivery and registration confirmations.
- Security: jsonwebtoken (JWT) for stateless authentication; bcrypt for salted password hashing.
- Data Processing: fast-csv for dynamic attendee report generation.
The system utilizes a Cron Scheduler running at 1-minute intervals to handle post-event administrative tasks:
- Auto-Close: Automatically transitions events from "open" to "closed" status upon reaching the deadline.
- Automated Reporting: Upon closure, the system aggregates attendee data (Name, USN, Email, Branch), generates a CSV file, and dispatches it to the host moderator's email via SMTP.
To ensure data integrity, the system implements a USN Parser. By extracting the departmental code (indices 5-7) from the student's University Seat Number, the backend automatically maps 24+ distinct engineering branches to the user profile.
The application enforces strict security boundaries via custom middleware:
- Student Role: Restricted to event browsing and registration.
- Moderator Role: Authorized to manage events, upload assets, and export data.
- Administrative Gate: A protected
/create-modendpoint requiring anADMIN_SECRETto prevent unauthorized escalation of privileges.
The API is organized into two primary arteries: Authentication and Event Management. All protected routes require a JWT Bearer Token in the authorization header.
Base Path: /auth
| Method | Endpoint | Access | Description |
|---|---|---|---|
| POST | /send-otp |
Public | Initiates email verification by sending a 6-digit OTP. |
| POST | /verify-otp |
Public | Validates the OTP provided by the user. |
| POST | /register |
Public | Finalizes account creation after OTP verification. |
| POST | /login |
Public | Authenticates credentials and returns a 7-day JWT. |
| POST | /forgot-password |
Public | Initiates the password recovery flow. |
| POST | /reset-password |
Public | Finalizes password reset using a verified token. |
| GET | /profile |
Private | Retrieves the authenticated user's profile. |
| GET | /registered-events |
Student | Fetches events joined by the authenticated student. |
| POST | /create-mod |
Admin Secret | Specialized route for moderator creation. |
Base Path: /events
| Method | Endpoint | Access | Description |
|---|---|---|---|
| GET | /all |
Public | Retrieves all active and upcoming events. |
| GET | /:id |
Public | Fetches detailed metadata for a specific event. |
| POST | /create |
Moderator | Creates a new event with poster upload via Multer. |
| POST | /:id/register |
Student | Atomic registration and confirmation email. |
| DELETE | /:id/unregister |
Student | Removes student from an event registration list. |
| GET | /moderator/my-events |
Moderator | Returns events created by the authenticated moderator. |
| GET | /:id/registrations |
Moderator | Displays the list of students registered for an event. |
| GET | /:id/export |
Moderator | Triggers immediate CSV generation and download. |
| GET | /:id/send-mail |
Moderator | Manually triggers the attendee report email. |
| DELETE | /:id |
Moderator | Permanently deletes an event and associated assets. |
- MongoDB Atlas Account
- Cloudinary API Credentials
- Node.js Environment
-
Clone the repository:
git clone https://github.com/not-rishi/BCEP.git cd BCEP -
Install dependencies:
npm install
-
Configure Environment Variables: Create a
.envfile in the root directory:PORT=3000 MONGO_URI=your_mongodb_connection_string JWT_SECRET=your_secure_random_string ADMIN_SECRET=admin_secret_string CLOUDINARY_URL=your_cloudinary_url EMAIL_USER=your_smtp_user EMAIL_PASS=your_smtp_app_password
-
Start the server:
npm start
|
BMSCE College Events Portal Standardizing campus engagement through automated event lifecycles. Maintained by not-rishi • © 2025 |









