2025
bldr
LiveRole Team project for KU EECS 581, four listed members. I built the schedule generator, busy blocks, public sharing and the CI pipeline.
A visual schedule builder that lets University of Kansas students plan a semester without juggling tabs or checking time conflicts by hand.
Stack: Next.js · TypeScript · Supabase · Tailwind CSS

The problem
Course registration means juggling multiple tabs and manually checking for time conflicts. bldr gives students a visual calendar with real-time class search, seat availability, and saved schedule variations.
The hardest stretch
Generating every conflict-free schedule for a set of courses. Each class has several components (lecture, lab, discussion), each with several sections, and no two chosen sections can overlap. I wrote a backtracking generator that picks one section per component and drops a branch the moment it conflicts with what is already chosen, so dead ends are never expanded. Pinned sections are fixed up front, and a pin that conflicts with anything makes the whole branch invalid.
Busy blocks were the second pass. Students can drag out times they are unavailable, and those became a hard constraint inside the same search: a section that overlaps a busy block never enters a schedule. The generated list can also get large, and persisting it overflowed the browser's localStorage quota. I stopped storing it and keep only the current index and a hash of the draft (classes, pins, busy blocks), then regenerate when the hash changes.
Decisions
Chose Regenerate permutations from the draft, storing only an index and a hash
Rejected Persisting the full permutation list in localStorage
Chose Busy blocks as a hard constraint inside the search
Rejected Filtering the results afterward

