Inspiration
The inspiration came from June 2024, when UBC had just used Workday as its official student information management tool. According to Workday's procedures, students must first create a schedule before registering. However, when enrolling in a single course, students cannot view the time duration of courses they have already selected or intend to select. Which leads to scheduling conflicts, necessitating repeated modifications until students secure their preferred courses. At the time, we attempted to find an automated tool online to assist with course selection, but to no avail. So, we developed this web project during this hackathon, hoping to help students in the course registration process.
What it does
This programme enables students to construct their timetables by entering the codes of desired courses, whilst offering bespoke preference adjustments for each user. These include:
- Avoiding classes on specific weekdays;
- Refusing classes before 10 am;
- Preventing consecutive course periods spanning multiple hours;
- After selecting additional courses, recommendations were provided via the AI assistant.
How we built it
- Frontend: A simple HTML/CSS/JS app that lets users add course codes, see a “weekly snapshot,” and visualize the schedule by day.
- Backend: Node.js HTTP server that serves static files and exposes API endpoints:
- POST /api/schedule for generating a conflict-free timetable
- GET /api/courses for course autocomplete
- POST /api/ai/suggest for AI scheduling advice
- Data: Course rules and sections are loaded from MongoDB collections at startup.
- Scheduling: For each course, we build all required section combinations, then use a DFS search to pick a conflict-free set across courses. Preferences like “no classes before 10:00” are enforced as hard constraints; “max continuous hours” is treated as a soft constraint with a fallback.
- AI Suggestions: A Gemini-powered helper returns concise, JSON-formatted advice (not specific times), so it can guide students without inventing requirement
Challenges we ran into
The greatest difficulty lay in data acquisition. We could not devise an effective method to obtain the latest course information from the internet, ultimately resorting to manual input for common first-year courses of 25-26 W2. Secondly, the course-sorting algorithm proved challenging, particularly when requiring adjustments based on user preferences. Fortunately, we resolved this issue in the end.
Accomplishments that we're proud of
We believe that if this project can assist other students in completing their course selection, it would be our proudest achievement.
What we learned
Both members of our team were novices, and this is our first time participating in a hackathon. It was even our very first attempt at full-stack development. We have benefited throughout the entire process, gaining a wealth of invaluable experience.
What's next for UBC Course Scheduler
Next, we aim to develop an automated script to retrieve UBC's course timetables and automatically update our database. This will ensure our website consistently provides students with the most current and comprehensive timetables. Furthermore, based on the complete timetable, we should also offer a semester selection feature.
Log in or sign up for Devpost to join the conversation.