Schedule Builder preview

Schedule Builder Rework

Rethinking how students explore, plan, and enrol in courses at the University of Calgary.

The uCalgary schedule builder creates academic pathways for students to explore, plan, and enrol through. Every student uses it multiple times every semester to check course progression, updated professors and outlines.

The Problem

The old builder was organized around the university's data, not how students actually plan. Two things came out of that:

The data is invisible

Prereqs are hand-tracked, conflicts don't show, and descriptions and prof info live on other sites. Students spend more time finding info than deciding if they even like a class.

It speaks admin, not student

Filters, enrolment statuses, and reserved seating are all in registrar language, so you're constantly translating.

mapping pain points

Pain points mapping

Process

wireframing

Wireframe of the redesign

Iterating on generative tools is cheap and that works against finding the best possible product. When iterating costs nothing, the path of least resistance is to keep refining your first direction instead of exploring the others. Paper is slow, and the slowness is the point: each version takes long enough that you weigh the options before committing to one. I kept structure and layout on paper until I knew exactly what I wanted.

After that, the speed was only an advantage. I built a clickable skeleton of every interaction in Claude Code, put it in front of students, and watched where they hesitated. The rest was tightening: components, spacing and polish in Figma MCP and Pencil.dev, then code and PRs until it shipped.

Explore the GitHub →

Everything in one place, in plain language

It came down to three things: pull the scattered data into one place, swap registrar language for words students use, and make what actually decides your schedule (prereqs, conflicts, seats) visible at a glance.

Course schedule with integrated data pills

Compact, integrated course cards

Prof rating, prereqs, seats, and degree fit on one card, colour-coded so you decide by scanning, not reading.

Course schedule with integrated data pills
Course sections with inline professor ratings

Surfacing availability and reserved seating

Seat counts sit on the section; the long reserved-seating rules wait in a popup instead of crowding the number you read.

Visualizing the entire prerequisite chain

Choosing a course is really asking what it unlocks and what blocks it, so the panel lays out the whole chain: cleared, remaining, and what opens next.

Filter for what matters

A filter buried in a dropdown is a filter nobody uses, so this one stays open in the sidebar, grouped how students actually search.

Filter dropdown interaction

Professor insights where you need them

Everyone checks the professor before committing, so each section links straight to the right one on RateMyProf, no searching.

Course sections with inline professor ratings

Expandable content descriptions

Descriptions open short; you only want the full text once a course is a real candidate, so nothing expands until you ask.

From searching to deciding

Watching students use it, the shift was immediate. No one searched for a course description or a professor's rating; what they needed was already within reach, and they always knew where to look. Their questions moved from where to find something to how I built it, and several suggested it should replace the tool the university uses now.

Design system style guide
Cart checkout flow
Enrollment confirmation receipt
My Carts dropdown
No results empty state

Want to know more about the process? Reach out to me at !