Inspiration
There are a plethora of cute widgets, videos, and websites online for to-do lists, pomodoro timers, and dining hall catalogs, but none that compile everything together into one easily accessible website - our team shared concerns over the accessibility of current student websites like Blackboard, Canvas and Gradescope, along with productivity issues
What it does
A BU student manager and schedule optimizer, built as a hackathon prototype. It builds class schedules that avoid tight walks and keep a lunch window, tells you when to leave for class using live shuttle data, finds meal gaps at open dining halls, suggests classes for Hub areas you still need, tracks assignments, and exports your week to a calendar.
How we built it
We built Compass as a FastAPI backend and a Next.js frontend, developed in phases. After each phase we tested it against real data and committed.
- Foundation. We defined a CatalogSource interface so the rest of the app never depends on where courses come from. The sample catalog was a stand-in, and the BU gateway adapters cache every response to disk and fall back, so the app runs offline.
- Optimizer. We modeled each weekday as a path of classes in OR-Tools CP-SAT. It chooses one section per course, forbids overlaps, and trades off tight walks, dorm-to-class travel, long gaps and a lunch window. We compared it against random and greedy baselines and recomputed every schedule's cost outside the solver as a cross-check.
- Live transit. A background job logs predicted versus scheduled bus arrivals every 2 minutes. A quantile gradient-boosting model turns that into delay ranges, which drive the leave-by time, its on-time probability and its "why".
- Dining, Hub and calendar. We added the meal-gap finder with dietary filters, a Hub gap-filler, .ics export with leave-by alarms, and a friends feature that shares only free windows.
- Real data. We replaced the sample courses with the Spring 2027 BU catalog, read through read-only SELECTs. The catalog has no Hub field, so we parse Hub areas and prerequisites out of the description text. Sections that meet at two times became linked records so classes like Calculus and General Chemistry stayed in.
- Honest uncertainty. Locations with no room, or on the medical campus, are marked "location unknown" and left out of risk checks rather than guessed. Anything synthetic or demo is labeled as such.
- Productivity and polish. A teammate added the Productivity tab (assignments from Blackboard/Gradescope calendar links, a to-do list, a Pomodoro timer), the dog pet, demo dining data and a same-origin proxy so it works in Codespaces. We then added accessibility fixes, an About page, offline tests, CI and a README.
Challenges we ran into
- Next.js 16. Its instant-navigation validation flagged our tab pages as dropped segments, which showed an error overlay on every tab. Fixing it meant restructuring the app shell and removing new Date() from server rendering. A stale dev server made some of our fixes look broken when they weren't.
- Repo hygiene. Private catalog pulls and a broken submodule entry had been committed. We caught them in an audit and stopped tracking them, but old history still holds the data.
- Testing our own tests. A test script's timing once produced a false "no valid schedule", and a CI workflow we wrote was invalid YAML. We only caught it by validating the file.
Accomplishments that we're proud of
- Accessibility features: easy to read, nothing solely based off color, dropdowns
- The custom made terrier pet
- Creating schedules based off live data with good accuracy
What we learned
- That when working with unknowns we need to make it clear instead of writing 0's
- To test on the website itself instead of relying fully on code checks as we will catch more issues
- Using and handling various APIs
What's next for Rhett's Resources
- Expand to other colleges
- Expand to LMS integration beyond Blackboard
- Integrate dining points and what places accept them
Built With
- bash
- css
- fastapi
- json
- next.js
- numpy
- or-tools
- pandas
- python
- react
- sql
- sqlalchemy
- typescript
Log in or sign up for Devpost to join the conversation.