This project is a comprehensive exam scheduler designed for UBC, benefiting over 30,000 students. It utilizes a PostgreSQL database to store all exam-related information, a Spring Boot application to create a RESTful API for the backend, and a ReactJS frontend for intuitive user interaction.
Feel free to check out the project here!. We are still in the process of accessing live data, so temporary data is utilized for testing purposes.

- PostgreSQL (Neon in prod): Stores exams (course/section, date/time, building/room, duration).
- Spring Boot Backend: RESTful API, JPA, Flyway migrations, ICS export endpoint.
- React Frontend (Vite + Tailwind): Search by Subject → Course → Section, build “My Schedule,” export .ics.
- Importer: Admin routes to ingest sample HTML or uploaded HTML (CSV/live support ready to plug in).
- Docker: Containerized backend + local Postgres via Docker Compose.
Before running this project locally, ensure you have the following installed:
- Java Development Kit (JDK) 17 or higher
- Node.js and npm
- PostgreSQL database
- IDE (IntelliJ IDEA, VS Code, etc.)
- Clone this repository.
- Open the
backenddirectory in your preferred IDE. - Configure the
application.properties(or env vars) insrc/main/resourceswith your PostgreSQL database credentials. - Run the Spring Boot application:
- Maven Wrapper:
./mvnw -DskipTests package && ./mvnw spring-boot:run
- Maven Wrapper:
- Navigate to the
frontenddirectory in your terminal. - Run
npm installto install dependencies. - Set the API base URL (Vite):
- Create a
.envfile with:
VITE_API_BASE_URL=http://localhost:8080/api
- Create a
- Run
npm run devto start the React application (Vite default:http://localhost:5173).
- Access the frontend application via
http://localhost:5173. - Use the provided API endpoints to search and export exam data, for example:
GET /api/meta/subjects?campus=VGET /api/meta/courses?campus=V&subject=CPSCGET /api/meta/sections?campus=V&subject=CPSC&course=221GET /api/exams/search?campus=V&subject=CPSC&course=221&sort=startTime,ascGET /api/exams/ics?ids=1,2,3(download selected exams as.ics)
Contributions are welcome! If you'd like to enhance this project or report issues, please submit a pull request or open an issue.
Sorting through UBC exam schedules using a PostgreSQL database and a Spring Boot backend to simplify finding exam rooms and times. All information is displayed via a React application, allowing users to search for exams and create a personalized schedule which they can export to their own calendar.