Course scheduler

Coursaholic

Coursaholic helped UCR students choose a term's courses, check how hard each one is, and flip through every schedule without time conflicts. I took an open-source scheduler, gave it a new identity and design, and ran it at coursaholic.io in fall 2022.

Coursaholic course picker: filtered CS course list with difficulty scores, three selected courses and scheduler options

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

  1. 01ChooseFilter, read reviews, add courses
  2. 02ConstrainSeats, start and end times, days
  3. 03GenerateAPI streams compressed schedules
  4. 04SavePin sections, export to calendar

Every schedule, one click apart.

The week view steps through generated schedules, and the pin on each block keeps that section in every result. The scheduling API is offline, so this capture uses sample sections.

Coursaholic weekly schedule view showing schedule 1 of 24 with CS010A, MATH009A and BIOL104 sections

Difficulty before you enroll.

Each course carries its average difficulty from student reviews, and the full dated comments open in a modal.

Coursaholic review modal for BIOL104 with two dated student reviews rated 7 out of 10

Prerequisites at a glance.

Pick a course and Chart.js draws it as a graph with the courses in its prerequisite rules around it. Here, CS171 and the eight courses its requirements list.

Prerequisite graph for CS171 connected to CS100, CS120B, EE120B, EE020B, EE114, STAT155, MATH010A and MATH031

Tools

  • Svelte
  • JavaScript
  • TypeScript
  • DHTMLX Scheduler
  • Chart.js
  • Rollup
  • Google Analytics

Screenshots from a local build of the repo, November 2026: coursaholic.io is offline and the scheduling API it called no longer responds, so the schedule view shows sample sections. Coursaholic is a rebrand of Lawrence Wang's open-source UCR Schedule Generator and UCR Requisite Map; the scheduling logic, course data and reviews come from those projects.

Next projectAI Resume AnalyzerResume Review page: a sample resume beside an overall score of 78 out of 100 with Tone & Style, Content, Structure and Skills scores