v1.1.0: Add cancelled course, duplicate prevention, and credit bar ticks

- Mark "Managing Growing Companies" as cancelled with visual indicator and solver exclusion
- Prevent selecting duplicate courses across elective sets (e.g., same course in Spring and Summer)
- Add 2.5-credit interval tick marks to specialization progress bars
- Bump version to 1.1.0 with date display in UI header
This commit is contained in:
2026-03-13 16:11:56 -04:00
parent 5c598d1fc6
commit 8b887f7750
14 changed files with 156 additions and 39 deletions

View File

@@ -110,6 +110,7 @@ export const COURSES: Course[] = [
// === Summer Elective Set 2 ===
{
id: 'sum2-managing-growing', name: 'Managing Growing Companies', setId: 'sum2',
cancelled: true,
qualifications: [
{ specId: 'ENT', marker: 'standard' }, { specId: 'LCM', marker: 'standard' },
{ specId: 'MGT', marker: 'standard' }, { specId: 'STR', marker: 'S1' },

View File

@@ -38,3 +38,15 @@ export const setIdByCourse: Record<string, string> = {};
for (const course of COURSES) {
setIdByCourse[course.id] = course.setId;
}
// Cancelled course IDs
export const cancelledCourseIds = new Set(
COURSES.filter((c) => c.cancelled).map((c) => c.id),
);
// Course IDs indexed by course name (for detecting duplicates across sets)
export const courseIdsByName: Record<string, string[]> = {};
for (const course of COURSES) {
if (course.cancelled) continue;
(courseIdsByName[course.name] ??= []).push(course.id);
}

View File

@@ -19,6 +19,7 @@ export interface Course {
name: string;
setId: string;
qualifications: Qualification[];
cancelled?: boolean;
}
export interface Specialization {