The challenge
Building a UCR schedule meant juggling lectures, labs and discussions across many sections and checking every combination for time conflicts by hand.
How hard a course is lived somewhere else, in a student-run review database shared on Reddit, so choosing classes and judging the workload happened in two places.
The approach
Coursaholic is built on Lawrence Wang's open-source UCR Schedule Generator. The app's Svelte source is unchanged; my work was the product layer: the Coursaholic name and copy, a navy palette and circuit-board background, layout and responsive tweaks, Google Analytics and SEO tags, and hosting on coursaholic.io.
The mechanism is worth knowing. The browser sends the chosen courses and filters (minimum open seats, earliest start, latest end, allowed days) to a scheduling API, which streams back every valid schedule over Server-Sent Events. Each schedule arrives zlib-compressed and base64-encoded, is inflated in the browser with pako, and pinning a section filters the results to schedules that contain it.
- Course browserAll 1,600 Fall 2022 courses in a filterable, virtualized list, each tagged with its average difficulty.
- Student reviewsClick a difficulty score to read dated reviews, each with a 1 to 10 rating.
- Generated schedulesStep through every generated week, pin a section to keep it, and export to Google Calendar or an .ics file.
- Prerequisite mapA separate Svelte and Chart.js page draws any course as a graph with its prerequisites around it.
From course list to calendar
- 01ChooseFilter, read reviews, add courses
- 02ConstrainSeats, start and end times, days
- 03GenerateAPI streams compressed schedules
- 04SavePin sections, export to calendar



