Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/cornell-dti/course-plan/llms.txt

Use this file to discover all available pages before exploring further.

The Semester Schedule Builder generates up to five unique weekly schedules for a single semester. Given a set of courses you want to take and the requirements they should fulfill, the generator finds conflict-free time slot combinations — accounting for lectures, discussion sections, and lab sections — and presents the results as a visual calendar grid. You can page through the generated options, regenerate for new variations, and download a PDF copy before closing.
The schedule generator is a feature-flag-gated feature (Schedule Generator). The sidebar and generate button only appear when the flag is enabled for your account. If you do not see the Semester Schedule Builder panel, the feature is not yet available to you.

Opening the schedule builder

The Schedule Builder sidebar appears in place of the requirements sidebar when the feature flag is active. It is scoped to a specific semester — the current season and year are shown at the top of the panel.

Usage workflow

1

Set a credit limit

Enter a number between 12 and 22 in the Credit Limit input. The Generate Schedule button stays disabled until a valid credit limit is provided. This ceiling prevents the algorithm from scheduling more credits than you intend to take.
2

Add a requirement group

Click + Requirement to add a requirement slot. A dropdown lists all requirements from your requirements sidebar (college, major, minor, and grad requirements combined). Select the requirement you want the generator to fulfill — for example, CS Core: Algorithms.
3

Add courses to the requirement

Under each requirement slot, add one or more courses that could satisfy it. Use the course search to find Cornell courses by code or name. You can add multiple candidate courses per requirement to give the algorithm more scheduling flexibility.
4

Repeat for additional requirements

Click + Requirement again to add more requirement groups. Each group can have its own set of candidate courses. The Generate Schedule button only activates when every requirement group has at least one course.
5

Generate schedules

Click Generate Schedule. The button shows Generating... while the app fetches full section data from the Cornell API for each course. Once ready, the results modal opens automatically.
6

Browse and download

The results modal shows a weekly calendar grid and a course list with credit totals. Use Prev / Next to page through up to five unique schedules. Click Generate New Schedules to run the algorithm again with different random selections. Click Download to save the currently displayed schedule as a PDF.
Add more candidate courses per requirement to increase the chance of finding multiple unique conflict-free combinations.

How the algorithm works

The generator uses a greedy approach with randomized variant selection. The key steps are:
  1. Variant expansion — For each course, the app fetches the full roster data and creates one variant object per discussion/lab combination. A course with one lecture and three discussion sections becomes three variants:
    CS2110 variant 0: [Lecture MWF 10am] + [Discussion T 2pm]
    CS2110 variant 1: [Lecture MWF 10am] + [Discussion W 3pm]
    CS2110 variant 2: [Lecture MWF 10am] + [Discussion R 4pm]
    
  2. Random variant selection — Before each generation attempt, the algorithm randomly picks one variant per course code. This is the key to discussion-section variety: each call to generateSchedule() tries a different combination of sections.
  3. Shuffled greedy addition — The selected variants are randomly shuffled, then added one by one. A course is added only if:
    • It is offered in the target semester
    • None of its time slots conflict with already-scheduled time slots (including a 15-minute walking gap between consecutive classes)
    • Adding it would not exceed the credit limit
    • Its primary requirement is not already fulfilled by an earlier course
  4. Duplicate detection — When generating multiple schedules, each result is hashed using course codes and timeslot strings. Duplicate schedules (same courses and same section times) are discarded, and the generator retries up to 100 times to find five unique results.

Time conflict checking

Conflicts are checked using pre-parsed millisecond timestamps. Two timeslots conflict if their time ranges overlap (with a 15-minute buffer) and they share at least one day of the week. The 15-minute gap models realistic walking time between buildings on Cornell’s campus.
// Simplified conflict check
const timesOverlap = a.startMS < b.endMS + gap && b.startMS < a.endMS + gap;
const sharedDay = aDays.some(day => b.days.has(day));
return timesOverlap && sharedDay;

Limitations

  • The generator targets a single semester at a time. Cross-semester scheduling is not supported.
  • A maximum of 5 unique schedules are produced per generation run (up to 100 attempts).
  • If the set of candidate courses is too constrained or heavily overlapping in time, fewer than 5 unique schedules may be returned.
  • Courses without time slot data in the Cornell API are excluded from conflict checking and may result in schedules that show no times for those courses.

Build docs developers (and LLMs) love