QuestFlow is a desktop course planner for Waterloo students. Search any course, drop it onto a live weekly calendar that catches time clashes instantly, let the optimizer arrange your perfect week, and compare timetables with friends.
From first course search to a finished, shareable schedule — no browser tabs, no clashes, no guesswork.
Fuzzy-search UW's catalogue (even "cs 34" finds CS 341), then open a full course page: description, prerequisites, and every section's time, days, and live enrollment for the term.
Courses render as colour-coded blocks on a real weekly grid. On your current calendar, a conflicting section simply can't be added — a snackbar tells you exactly which class it collides with.
Spin up as many custom calendars as you like and drag-and-drop courses right onto the grid. Here conflicts are allowed on purpose — seeing the overlaps makes trade-offs easy to weigh.
Pick the courses you want and a dedicated OptaPlanner service arranges them against real constraints — handing back an optimized, conflict-free timetable in a few seconds.
Send a request, and once it's accepted you can compare calendars: your courses in one colour, theirs in another, overlaps rendered darker. Finding shared free time takes one glance.
The wishlist is a four-year board — a box for every academic term (1A through 4B). Park courses you're eyeing for the future and shuffle them as your plans change.
A true desktop app with a native menu bar and shortcuts — Ctrl-N for a new calendar, Ctrl-S to jump to search.
Recolour the week with a tap — OCEAN, PASTEL, SUNSET, or EARTH. Your choice follows you across every page.
Not sure what to take? Browse every course under a subject, sorted by level — 100s, 200s, and up.
A native desktop client talks to a Ktor API, which persists to PostgreSQL and offloads the hard scheduling maths to a separate OptaPlanner service. Course data streams in live from the University of Waterloo's OpenAPI.
A Kotlin/JVM desktop UI built with Jetpack Compose — the weekly grid, conflict highlighting, themes, and a Ktor HTTP client for every request.
Kotlin · Compose · Material 3Routes for auth, courses, calendars, wishlist, and friends. Talks to Postgres through Exposed and calls the planner service for optimization.
Ktor · Exposed · NettyA standalone Spring Boot / OptaPlanner service solves the constraint model; PostgreSQL stores users, courses, calendars, and friendships.
OptaPlanner · Spring Boot · PostgreSQL