- Web App
- Aug-Oct 2026
Semina
Full-Stack Developer · Personal project
A website project for purchasing event tickets, developed from BuildWithAngga MERN course material. My contribution covers the React event-management CMS and backend ticket checkout API. Checkout through the participant web interface is not integrated.

- ContributionEvent CMS and checkout APIReact CMS with backend event and order workflows.
- ImplementationCMS workflows and transactionsDynamic event forms and server-side checkout validation.
- Project contextIndependent learning projectExtends BuildWithAngga course material.
Overview
Semina is a website project for purchasing event tickets. It includes a React CMS for managing categories, speakers, payment methods, events, and the order list, plus a backend API for participant authentication, order history, and ticket checkout.
It is an independent learning project built from the BuildWithAngga Full Stack Developer — MERN Website Event course. The course supplied the starting scope, and I extended it into the workflows described here.
The participant-facing interface is still a static HTML template, so participant registration and checkout through a web interface are not integrated. There is no verified public deployment, and the backend repository is the only public code destination.
My responsibilities
- Built the React CMS for categories, speakers, payment methods, and events with React Bootstrap, Redux, and Redux Thunk.
- Added search with debounce, category and speaker filters, and image upload to the CMS lists.
- Built the event form with dynamic key points and ticket categories, pricing, stock, active status, and Draft or Published state.
- Integrated session persistence, role-based route guards, JWT authentication, and HTTP 401 handling on the frontend.
- Implemented separate CMS and participant tokens, bcrypt password hashing, role-based authorization for owner, organizer, and admin, and organizer-scoped data access on the backend.
- Built checkout with MongoDB transactions that validate the event, payment method, ticket status, quantity, and stock, with prices and totals calculated on the server.
- Added the CMS order list with pagination and date-range filtering.
- Integrated OTP activation and checkout confirmation email through Nodemailer and Mustache, plus JPEG and PNG upload up to 3 MB through Multer and centralized error handling.




