The Commerce Bank Cubicle Reservation System was built to address a real-world need that arose during COVID-19: giving employees a way to reserve office cubicles for specific days when working on-site. This ensured proper spacing, avoided overcrowding, and simplified workspace management. I developed the project as part of my Software Engineering course, working with one teammate who contributed to some backend API endpoints. I handled all of the frontend and a significant portion of the backend setup and integration.
The goal was to create a reliable, easy-to-use system for employees to reserve cubicles for specific time slots. This project gave me the opportunity to work on both sides of the stack — learning an entirely new backend framework (Spring Boot) while also ensuring the UI was clean, responsive, and intuitive.
The backend was built with Spring Boot (Java) and MySQL, deployed to Heroku. For authentication, we implemented JWT-based login and registration. The frontend was developed with React and styled using Material UI to speed up interface creation, deployed to Netlify. Communication between the frontend and backend was handled via a REST API.
One of the steepest learning curves was picking up Spring Boot for the first time. Even with prior Java experience, I had to quickly adapt to its annotations-based structure (e.g., @Controller, @Service, @Repository) and learn best practices for structuring backend code. I also ran into CORS errors when connecting the React frontend to the Spring Boot backend. This required digging into HTTP headers and Spring Boot configuration to allow secure cross-origin requests. Another significant challenge was implementing a database query to find available cubicles in a specific time range. My initial approach was to fetch large amounts of data and filter it on the frontend, but after consulting my professor, I learned how to write optimized SQL queries directly in MySQL. This not only simplified the logic but also drastically improved performance.
This project taught me how to bridge the gap between frontend and backend development, and how to think more efficiently about database queries. It reinforced the value of asking for help when stuck — sometimes a 10-minute conversation can save hours of frustration. From a process standpoint, I gained firsthand experience with Scrum and sprints, which helped structure the work and keep the project on track. Most importantly, I left with confidence in integrating unfamiliar technologies and solving full-stack communication issues.