Skip to the case study
Ishandeep Singh Software Engineer
All work

RMIT University · 2025

EventHub

Campus events platform · web

Year
2025
Duration
3 sprints
Role
Full-stack Developer
Team
6 people
Focus
Booking · Notifications

"EventHub" is a full-stack web application for campus events, built by a team of six as a university project. Students can browse events and RSVP, clubs can publish and manage their own, and admins look after users and events. We built it with Java, Spring Boot and MySQL, working in Scrum across three sprints with a product owner. I worked as a full-stack developer, and most of what a student sees and uses was my work: the header, browsing, RSVPs, their bookings, and every notification and email the app sends.

EventHub's My Bookings page with three booked events, each with a QR code, and the notification panel open on an RSVP confirmation
My Bookings, with the notification panel open from the header

Browsing and booking

I developed the Browse Events page, where students can find every upcoming and past event. It includes a search that matches event names, organisers and keywords, as well as filters for tags and dates. I also built the RSVP functionality behind it. Once a student confirms their RSVP, the booking is saved and they receive a confirmation email along with a notification in the app.

The Browse Events page: a search box, tag and date filters, and upcoming event cards with RSVP buttons
Browse Events, with the search box and the tag and date filters

My Bookings and check-in

On the My Bookings page, students can see every event they have booked and cancel any of them. Each booking has its own QR code that works as a check-in link for that student and event. Scanning it at the door checks them in, and the scan is rejected if they never RSVP'd.

A check-in confirmation page showing the student's email and the event's name, date and location
The page a scanned QR code opens

Notifications and email

All of the notification and email features were my work. The bell in the header shows how many unread notifications a student has and opens a panel where they can mark them as read, with a small REST API behind it that the page checks every 30 seconds. For email, I used Spring's JavaMailSender to send a confirmation as soon as someone RSVPs, and a reminder the day before each event from a scheduled job that runs every morning.

The RSVP confirmation email, with the event's name, date and location and how to cancel
The confirmation email an RSVP sends

Architecture and the pipeline

I was also responsible for the system and pipeline architecture. I designed the system in three tiers following the MVC pattern, with the app containerised in Docker so it runs the same way for everyone. The pipeline runs on GitHub Actions: every push and pull request runs the full test suite, the production image is only built once the tests pass, and a final job reports exactly what failed.

System architecture in three tiers: a load balancer and API gateway routing to user, admin, recommendation, RSVP, event and notification services, their databases, and external email and maps services
The system architecture: a load balancer and gateway, a service for each feature, and the data behind them

Planning and retrospectives

Along with the development work, I was in charge of our project planning and retrospectives. At the start of each sprint, we picked the user stories we would work on and estimated each one in story points, then tracked everything on our GitHub Project board. At the end of each sprint, we held a retrospective to look back at what went well and what we could do better next time. We also met three times a week for short standups, where we checked in on each other's progress and split up the tasks.

What I learnt

With six of us working in one codebase, EventHub taught me that on a project this size, how a team works together matters as much as the code. Early on, as more of us worked on connected parts of the app, merge conflicts took far longer to fix than we expected. We learnt to merge little and often, and to agree on API endpoints and data structures before anyone started building. The specification also left a lot open, which taught us to bring specific questions to our product owner early rather than guess.

Most of these lessons came out of our retrospectives. Each sprint we wrote down what we would change, such as writing tests before the code rather than alongside it, and agreeing on how to handle API keys and passwords at the very start of a project.

By the final sprint we were merging early and often, and it ran far more smoothly than the first two.

Java · Spring Boot · Thymeleaf · MySQL · Flyway · JavaMailSender · REST · Docker · GitHub Actions · JUnit