๐ Ranked 3rd in the SECT Internship Program
This project was built entirely solo as part of the SECT internship, where I handled everything from architecture and backend logic to frontend design, deployment, and documentation.
The ranking reflects not just the final product, but the depth of effort, reproducibility, and clarity I brought to the entire development process.
I'm now opening it up for feedback, collaboration, and deeper learningโthanks for being here!
A full-stack web application that streamlines public event registration and management.
Youโre welcome to explore the admin dashboard using the demo credentials below.
This access is provided for testing, learning, and evaluation purposes.
- ๐ Deployment Link:
https://dynamic-public-event-registration-system.onrender.com/ - ๐ค Username:
12345Admin - ๐ Password:
12345Admin
๐ก๏ธ Please note: This is a demo admin account with limited privileges.
Data may reset periodically, and sensitive actions are restricted to protect the system.
-
๐ Dark Mode Recommended: For optimal visual experience, please switch your system theme to dark mode or light mode based on your preference before using the application.
-
๐ธ๏ธ Content Loading Delay: If data does not appear immediately, it may be due to slow internet or delayed content loading. Please wait a moment or refresh the page.
-
๐ Admin Token Expiry: If you're an admin and remain logged in without logging out, your authentication token may expire after 1 hour. In such cases, some dashboard content may not load properly. To resolve this:
- Logout once
- Then login again with your credentials
This will restore full access to the admin dashboard.
- Browse upcoming events
- Register with a dynamic form
- Receive email confirmations
- Secure login and role-based access
- Create, edit, and delete events
- View and export registrants
- Manage feedback and contact submissions
This platform brings together a seamless experience for both attendees and organizers โ all in one dynamic, responsive system.
To set up the project locally, follow the steps in the Installation & Setup section.
Make sure to review the Prerequisites and configure your .env files properly.
We welcome contributions of all kinds โ from bug fixes and accessibility improvements to new features and documentation polish.
๐ Please read our CONTRIBUTING.md for guidelines on how to get started.
Explore our Open Source Open Source Roadmap to see what's planned, in progress, and done.
๐ก Contributions welcome โ feel free to pick a task or suggest your own!
This system delivers a complete event registration workflow for both users and admins, with dynamic UI interactions, robust access control, and a responsive design.
-
๐ Browse Events
View all upcoming public events with details like date, location, and description. -
๐ Event Details Page
See full information about each event, including organizer info, schedule, and registration deadline. -
๐ Register for Events
Fill out a dynamic form to book a spot. Confirmation is sent via email. -
๐ Confetti Animation on Success
Delightful visual feedback after successful registration.
-
๐ Secure Admin Login
Requires valid user ID and password. Only registered admins can access the dashboard. -
๐งโ๐ผ Admin Management
Existing admins can add new admins. No public access to admin creation. -
๐ Create / Edit / Delete Events
Full CRUD functionality for managing event listings. -
๐ View Registrants
See who registered for each event. Export lists to CSV. -
๐ค Export Registrant Data
One-click export of attendee lists for offline use or reporting. -
๐ฌ Manage Feedback & Reviews
View user-submitted feedback. Verify and post selected reviews to the homepage. -
๐จ View Messages
Access contact form submissions and user inquiries. -
๐งน Delete Feedback / Messages
Clean up outdated or irrelevant entries.
-
๐ซ Protected Routes
Admin routes are guarded viaProtectedRouteand JWT-based authentication. -
๐ Responsive Design
Fully responsive UI built with Tailwind CSS and Framer Motion. -
๐ฆ Reusable Axios Instance
Centralized API logic with environment-based config (VITE_API_BASE_URL). -
๐งช Robust Testing
Backend and frontend tested with Vitest, Supertest, and Testing Library. -
๐ Modular Folder Structure
Clean separation of concerns for scalability and maintainability.
This project leverages a modern full-stack architecture with robust tooling for development, testing, and deployment.
-
Frameworks & Styling:
Vite, React, Tailwind CSS, Framer Motion -
Routing & State Management:
React Router (BrowserRouter,Routes,useNavigate,useLocation,useParams),
React Hooks (useState,useEffect) -
UI & Feedback:
react-icons/fi,react-toastify,react-hot-toast,react-confetti,Confetti,Toaster,ToastContainer -
Utilities:
axios,axiosInstance,exportToCSV,date-fns,differenceInDays,format,react-use -
Testing:
vitest,@testing-library/react,jest-dom,MemoryRouter,vi.mock,fireEvent,waitFor,screen,within
-
Frameworks & Database:
Express.js,MongoDB,Mongoose -
Authentication & Middleware:
JWT, custom middleware (authMiddleware,uploadMiddleware) -
Email Service:
Nodemaileror similar (viasendConfirmationEmail.js) -
Testing:
Vitest,Supertest, custom test environment setup -
Image Management:
Integrated viacloudinarypackage for seamless image uploads, optimization, and deletion. -
Environment Variables (
.env):CLOUDINARY_CLOUD_NAME=your-cloud-name CLOUDINARY_API_KEY=your-api-key CLOUDINARY_API_SECRET=your-api-secret
-
Hosting Platforms:
GitHub + Render + cloudinary -
Environment Configuration:
.envand.env.examplefiles for managing secrets and environment-specific settings
https://dynamic-public-event-registration-system.onrender.com/
Before running the project locally, ensure the following tools and services are installed and configured:
- Node.js: v18+ recommended
- npm: Comes bundled with Node.js
- MongoDB:
- Local instance for development
- MongoDB Atlas for production or remote testing
- nodemon: For hot-reloading during backend development
npm install -g nodemon
Set up your environment variables for both backend and frontend by copying .env.example to .env and filling in your credentials.
# MongoDB connection string (replace <username> and <password>)
MONGO_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/event-db
# JWT secret key for admin authentication
JWT_SECRET=your_jwt_secret_key
# Email credentials for sending confirmation emails
EMAIL_USER=your_email@example.com
EMAIL_PASS=your_email_app_password# Base URL for API requests (used by axiosInstance.js)
VITE_API_BASE_URL=http://localhost:5000This App supports robust, production-grade image handling via Cloudinary, enabling persistent storage, secure delivery, and seamless deletion for uploaded images.
- Cloudinary Setup:
A Cloudinary account was created and credentials added to.env:CLOUDINARY_CLOUD_NAME=your-cloud-name CLOUDINARY_API_KEY=your-api-key CLOUDINARY_API_SECRET=your-api-secret
The backend includes a cloudinary.js config file and a Multer + Cloudinary middleware for handling image uploads.
import { v2 as cloudinary } from 'cloudinary';
import { CloudinaryStorage } from 'multer-storage-cloudinary';
import multer from 'multer';
cloudinary.config({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
});
const storage = new CloudinaryStorage({
cloudinary,
params: {
folder: '', //set automatically uploads in this repo
allowed_formats: ['jpg', 'jpeg', 'png'],
},
});
export const upload = multer({ storage });During event creation, image files are uploaded via Multer and stored as secure Cloudinary URLs.
router.post('/create', upload.single('image'), async (req, res) => {
const imageUrl = req.file.path;
// Save imageUrl to MongoDB along with other event data
});When an event is deleted, its associated image is removed from Cloudinary using the stored public_id.
// Handle banner removal
if (req.body.removeBanner === 'true' && event.bannerPath) {
const imagePath = path.join(__dirname, '..', 'uploads', event.bannerPath);
fs.unlink(imagePath, (err) => {
if (err) console.warn('Failed to delete banner:', err.message);
});
updatedData.bannerPath = '';
}-
๐๏ธ Persistent Image Hosting
Hosted images remain accessible long-term via secure URLs
with built-in CDN caching for global performance. -
โจ Automatic Optimization
Cloudinary resizes and formats images automatically
based on device, viewport, and delivery context. -
๐งน Secure Image Deletion
Removal is handled viacloudinary.uploader.destroy(publicId)
for precise and authenticated cleanup. -
๐ฆ Simplified Deployment
No need for manual uploads folder โ
images are stored externally and accessed via Cloudinary URLs.
Tip
Make sure to validate image inputs on both the frontend and backend:
- ๐ Check file type (e.g., JPG, PNG)
- ๐ Enforce file size limits
- ๐ซ Handle upload errors gracefully
Follow these steps to run the project locally:
git clone https://github.com/ram-bhagat-thakur/Dynamic-Public-Event-Registration-System.git
cd event-registration-systemcd server
npm installCreate a .env file in the server/ directory based on .env.example. Include:
PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
EMAIL_USER=your_email@example.com
EMAIL_PASS=your_email_passwordnpm run devThe backend will start at: http://localhost:5000
cd client
npm installCreate a .env file in the client/ directory:
VITE_API_BASE_URL=http://localhost:5000npm run devThe frontend will start at: http://localhost:5173 (or as shown in your terminal)
Admins have elevated privileges and can:
- ๐ Create, edit, and delete events
- ๐ View registrants and export lists (CSV)
- ๐ฌ Manage feedback and reviews
- โ Verify feedback for homepage display
- ๐จ View messages and contact submissions
- ๐งโ๐ผ Add other admins (only existing admins can do this)
Only a registered admin can promote another user to admin status.
To log in as an admin, you must:
- โ Be registered as a user
- โ Have been granted admin privileges by an existing admin
- ๐ Provide your User ID and Password on the admin login screen
To bootstrap the system with an initial admin, manually insert a user with role: "admin" into your MongoDB database.
๐ฆ Example Document (MongoDB shell or Compass):
{
"name": "Super Admin",
"email": "admin@example.com",
"password": "hashed_password",
"role": "admin"
}Regular users can:
- ๐ View all public events
- ๐ See event details
- ๐ Register for events
๐ซ Users cannot access admin routes or dashboards.
๐ Folder Structure The project is organized into two main directories inside sect-project:
- client/ for the frontend
- server/ for the backend
client/
โโโ public/
โ โโโ images/ # Logos and static images
โ โโโ videos/ # Background video for homepage header
โ โโโ _redirects # SPA routing support (e.g., Netlify)
โโโ src/
โ โโโ components/ # Reusable UI components
โ โโโ pages/ # Route-based views (Home, Events, Admin, etc.)
โ โโโ services/ # API service logic
โ โโโ styles/ # Global CSS
โ โโโ utils/ # Shared utilities (e.g., axiosInstance)
โ โโโ __test__/ # Frontend test suites
โ โโโ setupTests.js # Vitest + Testing Library setup
โโโ .env
โโโ index.html
โโโ vite.config.js
โโโ tailwind.config.js
โโโ package.jsonserver/
โโโ controller/ # Route handlers (auth, events, feedback, etc.)
โโโ middleware/ # Custom middleware (auth, upload)
โโโ models/ # Mongoose schemas
โโโ routes/ # Express route definitions
โโโ upload/ # Uploaded event banner images
โโโ utils/ # Helper functions (e.g., sendConfirmationEmail)
โโโ __tests__/ # Backend test suites
โ โโโ setupTestEnv.js # In-memory MongoDB setup
โโโ .env
โโโ .env.example
โโโ index.js # Main server entry
โโโ app.js # Test entry point
โโโ package.jsonsect-project/
โโโ client/ # Frontend (React + Vite)
โ โโโ node_modules/
โ โโโ public/ # Static assets
โ โ โโโ images/ # Logos and icons
โ โ โโโ videos/ # Background video for homepage
โ โ โโโ _redirects # SPA routing support (e.g. Render)
โ โโโ src/ # Application source code
โ โ โโโ components/ # Reusable UI components
โ โ โ โโโ Card.jsx
โ โ โ โโโ Footer.jsx
โ โ โ โโโ Navbar.jsx
โ โ โ โโโ ProtectedRoute.jsx
โ โ โ โโโ ScrollToTop.jsx
โ โ โโโ pages/ # Route-based pages
โ โ โ โโโ AdminDashboard.jsx
โ โ โ โโโ AddEvent.jsx
โ โ โ โโโ AdminLogin.jsx
โ โ โ โโโ AdminRegister.jsx
โ โ โ โโโ AllRegistrant.jsx
โ โ โ โโโ Contact.jsx
โ โ โ โโโ EditEvent.jsx
โ โ โ โโโ EventDetails.jsx
โ โ โ โโโ EventRegistrants.jsx
โ โ โ โโโ Events.jsx
โ โ โ โโโ Home.jsx
โ โ โ โโโ MessageList.jsx
โ โ โ โโโ RegisterEvent.jsx
โ โ โ โโโ Welcome.jsx
โ โ โโโ services/ # API service modules
โ โ โ โโโ authService.js
โ โ โ โโโ contactService.js
โ โ โ โโโ csvService.js
โ โ โ โโโ eventService.js
โ โ โ โโโ registrationService.js
โ โ โโโ styles/ # Global styles
โ โ โ โโโ index.css
โ โ โโโ utils/ # Utility functions
โ โ โ โโโ axiosInstance.js
โ โ โโโ __test__/ # Frontend test suites
โ โ โ โโโ components/
โ โ โ โโโ pages/
โ โ โ โโโ services/
โ โ โ โโโ utils/
โ โ โโโ App.jsx
โ โ โโโ main.jsx
โ โ โโโ setupTests.js # Vitest setup
โ โโโ .env # Frontend environment variables
โ โโโ .gitignore
โ โโโ eslint.config.js
โ โโโ index.html
โ โโโ package.json
โ โโโ package-lock.json
โ โโโ tailwind.config.js
โ โโโ vite.config.js
โ
โโโ server/ # Backend (Express + MongoDB)
โ โโโ controller/ # Route controllers
โ โ โโโ authController.js
โ โ โโโ feedbackController.js
โ โ โโโ contactController.js
โ โ โโโ eventController.js
โ โ โโโ registrationController.js
โ โโโ middleware/ # Custom middleware
โ โ โโโ authMiddleware.js
โ โ โโโ uploadMiddleware.js
โ โโโ models/ # Mongoose schemas
โ โ โโโ Feedback.js
โ โ โโโ Admin.js
โ โ โโโ Contact.js
โ โ โโโ Event.js
โ โ โโโ Registration.js
โ โโโ routes/ # Express route definitions
โ โ โโโ feedbackRoutes.js
โ โ โโโ admin.js
โ โ โโโ contact.js
โ โ โโโ event.js
โ โ โโโ register.js
โ โ โโโ registration.js
โ โโโ upload/ # Uploaded event banners
โ โโโ utils/ # Utility functions
โ โ โโโ sendConfirmationEmail.js
โ โโโ __tests__/ # Backend test suites
โ โ โโโ routes/
โ โ โโโ setupTestEnv.js
โ โโโ .env
โ โโโ .env.example
โ โโโ .gitignore
โ โโโ app.js # Test entry point
โ โโโ index.js # Main server entry point
โ โโโ package.json
โ โโโ package-lock.json
โ โโโ vitest.config.js-
Backend
- Tools:
Vitest,Supertest,mongodb-memory-server - Coverage: Route logic, middleware, edge cases
- Tools:
-
Frontend
- Tools:
@testing-library/react,Vitest,jest-dom - Coverage: Component rendering, user interactions, route protection
- Tools:
This project includes comprehensive testing for both frontend and backend using Vitest, Testing Library, and Supertest.
vitest@testing-library/reactjest-dom
client/src/__test__/
โโโ components/ # Unit tests for reusable components
โโโ pages/ # Integration tests for route-based pages
โโโ services/ # API service mocks and tests
โโโ utils/ # Utility function tests
cd client
npm run testTo generate coverage reports:
vitest --coveragevitestsupertestmongodb-memory-server
server/__tests__/
โโโ routes/ # Route-level integration tests
โโโ setupTestEnv.js # In-memory MongoDB and test environment setup
cd server
npm run test๐งช Tests run against an in-memory MongoDB instance for isolation and speed.
- โ Protected route access
- โ Form validation and submission
- โ API service logic
- โ Event creation, editing, deletion
- โ Registration flow and confirmation
- โ Feedback and message handling
- โ Role-based access control
This project includes comprehensive unit and integration tests for pages, components, services, and utilities.
| File | Tests Passed | Duration |
|---|---|---|
| RegisterEvent.test.jsx | 4 | 741ms |
| AdminDashboard.test.jsx | 5 | 1147ms |
| AddEvent.test.jsx | 4 | 1023ms |
| Welcome.test.jsx | 5 | 627ms |
| Navbar.test.jsx | 4 | 769ms |
| EventRegistration.test.jsx | 8 | 606ms |
| AdminLogin.test.jsx | 3 | 649ms |
| AllRegistrants.test.jsx | 6 | 464ms |
| EventDetails.test.jsx | 5 | 543ms |
| ProtectedRoute.test.jsx | 2 | 134ms |
| Card.test.jsx | 3 | 474ms |
| eventService.test.js | 7 | 36ms |
| registrationService.test.js | 5 | 23ms |
| authService.test.js | 1 | 14ms |
| utils.test.js | 1 | 9ms |
Total Files Tested: 17
Total Tests Passed: 78
Execution Time: ~46.15 seconds
Start Time: 21:40:53
This section reflects backend reliability and realistic payloads logged during automated testing. All tests passed successfully with relevant input data.
These issues do not break the test flow but should be resolved for production-grade stability.
- ๐ก AdminDashboard.test.jsx: React state updates not wrapped in
act(...) - ๐ก Welcome.test.jsx:
jsdomnavigation not implemented - ๐ด EventDetails.test.jsx: Simulated fetch failure
| ๐งพ Test File | โ Tests Passed | โฑ๏ธ Duration |
|---|---|---|
feedback.test.js |
5 | 7183ms |
admin.test.js |
5 | 8752ms |
event.test.js |
6 | 5590ms |
contact.test.js |
5 | 4940ms |
Total Files Tested: 4
Total Tests Passed: 21
Execution Time: ~25.81 seconds
Start Time: 21:43:52
{
"name": "Ram Bhagat",
"username": "ramdev",
"email": "ram@example.com",
"password": "securepass123"
}
This project is deployed using Render, which supports both static frontend hosting and backend services with environment variables.
- Go to Render Dashboard
- Click โNew Web Serviceโ
- Connect your GitHub repo and select the
server/folder - Set the following build and start commands:
Build Command: npm install
Start Command: npm run start-
Add the required environment variables:
MONGO_URIJWT_SECRETEMAIL_USEREMAIL_PASS
-
Choose a free or paid plan and deploy
๐ Render will auto-redeploy on every push to the selected branch.
- Go to Render Dashboard
- Click โNew Static Siteโ
- Connect your GitHub repo and select the
client/folder - Set the following build and publish settings:
Build Command: npm run build
Publish Directory: dist- Add the required environment variable:
VITE_API_BASE_URL=https://your-backend.onrender.comThis approach merges your React (Vite) frontend with your Express + MongoDB backend, hosted together under one Render service.
Ideal for seamless SPA routing, simplified API access, and persistent cloud image storage.
Before deploying to Render, build your frontend locally and prepare it for server-side serving:
cd client
npm run build- After successful build, move the dist folder to the backend directory:
mv dist ../server/- Confirm that your Express server is configured to serve static assets:
// server/index.js
import path from 'path';
import express from 'express';
const app = express();
app.use(express.static(path.resolve(__dirname, 'dist')));
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'dist', 'index.html'));
});-
Go to the Render Dashboard
-
Click โNew Web Serviceโ
-
Select the
server/directory as your root deploy folder -
Configure deployment settings:
Build Command: npm install Start Command: npm run dev
-
Add the following environment variables:
MONGO_URI=your-mongodb-uri
JWT_SECRET=your-jwt-secret
EMAIL_USER=your-email-username
EMAIL_PASS=your-email-password
PORT=10000- Choose a plan (free or paid) and deploy!
โ Render will automatically redeploy your service on each push to the connected branch.
- No need for
VITE_API_BASE_URLin this setup, as your frontend and backend share the same domain. But adding this will be easy. - Ensure your server uses fallback routing to support SPA navigation via direct links.
- You can customize the deployment port with the
PORTenvironment variable, commonly set to10000or Renderโs default.
- Deploy and test
- โ Test all routes and endpoints
- โ Verify email confirmation works
- โ Check admin login and dashboard access
- โ Confirm public event registration flow
- โ Validate CORS and API connectivity between frontend and backend
2025-07-30T21:30:45.693019843Z ==> Cloning from https://github.com/ram-bhagat-thakur/Dynamic-Public-Event-Registration-System
2025-07-30T21:30:46.613369586Z ==> Checking out commit ee4dd315c6fb7676a3f0448a9206f2d7b9820133 in branch Development
2025-07-30T21:30:47.876313543Z ==> Downloading cache...
2025-07-30T21:31:04.357607419Z ==> Transferred 133MB in 8s. Extraction took 7s.
2025-07-30T21:31:34.466416214Z ==> Using Node.js version 22.16.0 (default)
2025-07-30T21:31:34.492802003Z ==> Docs on specifying a Node.js version: https://render.com/docs/node-version
2025-07-30T21:31:34.671541503Z ==> Using Bun version 1.1.0 (default)
2025-07-30T21:31:34.671556713Z ==> Docs on specifying a Bun version: https://render.com/docs/bun-version
2025-07-30T21:31:34.737867294Z ==> Running build command 'npm install'...
2025-07-30T21:31:35.803232053Z
2025-07-30T21:31:35.803261854Z up to date, audited 323 packages in 986ms
2025-07-30T21:31:35.803286125Z
2025-07-30T21:31:35.803324366Z 62 packages are looking for funding
2025-07-30T21:31:35.803331186Z run `npm fund` for details
2025-07-30T21:31:35.804914006Z
2025-07-30T21:31:35.804926876Z found 0 vulnerabilities
2025-07-30T21:31:38.899508371Z ==> Uploading build...
2025-07-30T21:31:48.363960553Z ==> Uploaded in 6.8s. Compression took 2.6s
2025-07-30T21:31:48.413233561Z ==> Build successful ๐
2025-07-30T21:32:30.63052316Z ==> Deploying...
2025-07-30T21:32:52.310988356Z ==> Running 'npm run dev'
2025-07-30T21:32:53.516317683Z
2025-07-30T21:32:53.519888384Z > server@1.0.0 dev
2025-07-30T21:32:53.519896094Z > nodemon index.js
2025-07-30T21:32:53.519898514Z
2025-07-30T21:32:54.417392739Z [nodemon] 3.1.10
2025-07-30T21:32:54.419341954Z [nodemon] to restart at any time, enter `rs`
2025-07-30T21:32:54.41957021Z [nodemon] watching path(s): *.*
2025-07-30T21:32:54.419656803Z [nodemon] watching extensions: js,mjs,cjs,json
2025-07-30T21:32:54.420163497Z [nodemon] starting `node index.js`
2025-07-30T21:32:58.407244336Z [dotenv@17.2.0] injecting env (0) from .env (tip: โ๏ธ enable debug logging with { debug: true })
2025-07-30T21:32:59.606346258Z [dotenv@17.2.0] injecting env (0) from .env (tip: ๐ prevent committing .env to code: https://dotenvx.com/precommit)
2025-07-30T21:33:00.009066516Z (node:142) [MONGODB DRIVER] Warning: useNewUrlParser is a deprecated option: useNewUrlParser has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version
2025-07-30T21:33:00.009088697Z (Use `node --trace-warnings ...` to show where the warning was created)
2025-07-30T21:33:00.009091837Z (node:142) [MONGODB DRIVER] Warning: useUnifiedTopology is a deprecated option: useUnifiedTopology has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version
2025-07-30T21:33:03.032692459Z MongoDB connected
2025-07-30T21:33:03.034392447Z Server running on 5000
2025-07-30T21:33:11.442445034Z ==> Your service is live ๐
2025-07-30T21:33:11.471477492Z ==>
2025-07-30T21:33:11.498418859Z ==> ///////////////////////////////////////////////////////////
2025-07-30T21:33:11.524453637Z ==>
2025-07-30T21:33:11.551231144Z ==> Available at your primary URL https://dynamic-public-event-registration-system.onrender.com
2025-07-30T21:33:11.577871992Z ==>
2025-07-30T21:33:11.60408074Z ==> ///////////////////////////////////////////////////////////
https://dynamic-public-event-registration-system.onrender.com/
A prioritized list of enhancements that will elevate testing, user experience, architecture, and community engagement.
-
โ Full E2E Coverage
Integrate Playwright or Cypress for end-to-end testing of user flows โ including form validation, email confirmation, and admin dashboard interactions. -
๐งฑ Reusable Test Utilities
Centralize shared mocks, setup functions, and scaffolds undertest-utils/for scalable coverage and improved maintainability. -
๐งผ CI Integration
Implement GitHub Actions to run backend and frontend test suites automatically on every push and pull request for faster feedback loops.
-
โฟ Accessibility Audits
Run automated Lighthouse and axe-core scans to catch contrast issues, missing ARIA labels, and keyboard trap problems. -
๐งญ User Delight Features
Add subtle animations, contextual tooltips, and micro-interactions to elevate onboarding and enhance engagement. -
๐ Dark Mode Toggle
Create a theme switcher that respects system preferences and persists across sessions for user personalization.
-
๐งฉ Role-Based Access Control
Refactor backend authorization to support granular permissions for admins, organizers, and attendees. -
๐งต Monorepo Migration
Move to a unified monorepo structure with shared linting, config files, and test tooling across frontend and backend folders. -
๐ Staging Environment
Deploy a staging instance via Render with test credentials and dummy data to validate features before production.
-
๐ Interactive Docs
Add Swagger or Redoc for live API testing and documentation, making it easier for developers to understand and interact with endpoints. -
๐งโ๐ซ Tutorial Series
Publish a blog or video walkthrough to showcase project setup, test strategies, architectural decisions, and deployment workflow. -
๐ช AI-Powered Onboarding
Embed Copilot-style smart guidance in both the README and app dashboard to help new contributors onboard quickly and intuitively.
-
๐งฉ Modular Backend:
Express routes are structured for testability and separation of concerns. Middleware, controllers, and services are decoupled for clarity and scalability. -
๐งช Test Coverage:
Backend routes are covered withVitestandSupertest, including mocking ofaxiosInstanceand middleware logic. -
๐ Environment-Agnostic Frontend:
All API calls use a centralizedaxiosInstancewithVITE_API_BASE_URL, making the app portable across dev, staging, and production. -
โฟ Accessibility First:
UI components follow WCAG guidelines, with keyboard navigation, ARIA roles, and semantic HTML baked in. -
๐ Zero-to-Hero Setup:
The README is designed to onboard any developer โ no assumptions, no missing steps.
-
๐ก SECT Internship Program & Civora Nexus:
For the opportunity to build, learn, and share in a professional environment. -
๐งช Testing Community:
Inspired by open-source contributors pushing the boundaries of automated testing and mocking in Node.js. -
๐ค Mentors & Reviewers:
Thanks to Sarthak Dighe sir and Subham Dighe sir for being my mentor and review code, architecture decisions, debugged test runners, and encouraged accessibility best practices. -
๐ค AI Collaboration:
For this project i have taken help from AI. So this project was co-created with AI assistance for design iteration, code scaffolding, and documentation polish.
Feel free to open issues, suggest improvements, or fork the repo.
Every accessibility fix, test enhancement, or UX polish is welcome!
This project represents a scalable, full-stack solution tailored for dynamic event registration workflows. From robust backend architecture and real-time email confirmations to engaging UI enhancements and thoughtful accessibility audits, every feature has been designed with both functionality and user delight in mind.
๐ฏ Whether you're an admin managing events, a contributor exploring the codebase, or a developer eager to expand it further โ this repository provides the blueprint for a modern, inclusive, and high-performing event system.
๐ก With continuous improvements in testing, documentation, and community support, the project is well-positioned to evolve and thrive. Your feedback and contributions are the key to shaping its next chapter โ thank you for being a part of it!
Weโve opened GitHub Discussions to connect with contributors, mentors, and curious developers.
Feel free to:
- Ask questions about the codebase
- Share feedback or ideas
- Collaborate on improvements
๐ Introduce yourself and join the thread






















