1. Data Extraction & Modeling
1.1. Extract Course and Requirement Data
Manual/Automated Parsing :
Parse course catalog and requirements from SCU Bulletin and checklist.
Extract:
Course code, title, units, description, prerequisites (including complex chains), corequisites, quarters offered, department, upper/lower division status.
Requirement groupings (core, major, emphasis, university/college core), "choose X of Y" rules, minimum units, allowed substitutions, notes.
Edge Cases :
Cross-listed courses (e.g., CSCI/CSEN).
Prerequisites that are "one of" a set (e.g., "MATH 9 or Calculus Readiness Exam").
Co-requisites (must be taken together).
Courses not offered every quarter/year.
Requirements that allow "any upper-division elective" or "advisor-approved course."
Double-counting: courses that fulfill multiple requirements.
1.2. Normalize to Structured Data
{
"code" : " CSCI 61" ,
"title" : " Data Structures" ,
"units" : 5 ,
"prerequisites" : [" CSCI 60" ],
"corequisites" : [],
"offeredQuarters" : [" Fall" , " Winter" ],
"department" : " CSCI" ,
"isUpperDivision" : false
}
{
"name" : " Major Core" ,
"type" : " major" ,
"coursesRequired" : [" CSCI 10" , " CSCI 60" , " CSCI 61" , " CSCI 62" ],
"chooseFrom" : [],
"minUnits" : 0 ,
"notes" : " "
}
{
"name" : " Emphasis Electives" ,
"type" : " emphasis" ,
"coursesRequired" : [],
"chooseFrom" : {
"count" : 2 ,
"options" : [" CSCI 146" , " CSCI 147" , " CSCI 165" , " CSCI 181" ]
},
"minUnits" : 0 ,
"notes" : " "
}
2.1. Initialize Next.js Project
npx create-next-app degree-planner --typescript
Install dependencies:
UI: tailwindcss, shadcn-ui
State: zustand
Drag-and-drop: @hello-pangea/dnd
Data fetching: react-query
Prereq graph: react-flow-renderer
PDF export: react-pdf
Date handling: date-fns
/components
/CourseCatalog
/QuarterPlanner
/RequirementChecklist
/Dashboard
/PrereqGraph
/Onboarding
/data
courses.json
requirements.json
/hooks
usePlannerStore.ts
/pages
index.tsx
planner.tsx
dashboard.tsx
/utils
validation.ts
prerequisites.ts
3. Data Models & State Management
3.1. TypeScript Interfaces
interface Course {
code : string ;
title : string ;
units : number ;
prerequisites : string [ ] ; // course codes
corequisites : string [ ] ;
offeredQuarters : string [ ] ;
department : string ;
isUpperDivision : boolean ;
}
interface Requirement {
name : string ;
type : "major" | "emphasis" | "core" | "university" ;
coursesRequired : string [ ] ;
chooseFrom ?: { count : number ; options : string [ ] } ;
minUnits ?: number ;
notes ?: string ;
}
interface PlannedCourse {
courseCode : string ;
quarter : string ; // e.g. "2025 Fall"
status : "planned" | "completed" ;
grade ?: string ;
}
interface UserPlan {
quarters : {
[ quarter : string ] : PlannedCourse [ ] ;
} ;
completedCourses : string [ ] ;
plannedCourses : string [ ] ;
emphasis ?: string ;
}
Use zustand for global planner state (user plan, selected major/emphasis, etc.).
Persist state to local storage and/or Supabase for user accounts.
Step 1: Select major and emphasis (if applicable).
Step 2: Optionally import transcript or manually mark completed courses.
Step 3: Set preferences (pace per quarter, max units, summer enrollment, etc.).
Edge Cases :
User switches major/emphasis after planning—system must recalculate requirements and validate plan.
User imports incomplete transcript—system must prompt for missing data.
Features:
Search/filter by code, title, department, quarter offered.
Click course to view details: description, prerequisites (as a graph), quarters offered, units.
Add course to plan directly from catalog.
Edge Cases :
Prerequisites not yet planned—show warning.
Course only offered in certain quarters—disable or warn if user tries to schedule in unavailable quarter.
Cross-listed courses—show all aliases.
Features:
Grid view: columns = quarters, rows = planned courses.
Drag-and-drop to move courses between quarters.
Visual cues:
Red: prerequisites unmet.
Yellow: corequisites not scheduled together.
Gray: course not offered this quarter.
Green: all requirements met for this course.
Max units per quarter enforced; warn if exceeded.
Allow custom notes per quarter.
Edge Cases :
User tries to schedule two courses with time conflicts (future: allow time input).
User exceeds max units—option to override with advisor approval.
Schedule gap (e.g., missing a required sequence course, delaying graduation).
Prerequisite chains across multiple years.
4.4. Requirement Checklist
Features:
Grouped by type (major, emphasis, university core, etc.).
For each requirement:
List required courses, status (planned/completed/missing).
For "choose X of Y," show progress (e.g., "1 of 2 selected").
Show double-counted courses with an asterisk or note.
Click to see which planned/taken courses fulfill each requirement.
Edge Cases :
Course fulfills multiple requirements—handle double-counting rules.
User satisfies a requirement with an advisor-approved substitution—allow manual override with note.
Features:
Visualize all prerequisites for a course as a directed graph.
Highlight missing prerequisites in red.
Allow user to click nodes for course details.
Edge Cases :
Circular prerequisites (should not happen, but system should detect and warn).
Deep prerequisite chains (e.g., 4+ levels)—auto-collapse or scroll.
Features:
Progress bars for each requirement group.
Total units, upper-division units, GPA (if grades entered).
Estimated graduation quarter.
List of unmet or at-risk requirements (e.g., "CSCI 161 not scheduled, required before senior year").
Export plan as PDF or shareable link.
Edge Cases :
User plans a course sequence that delays graduation (e.g., missing a prerequisite for a spring-only course).
On every change :
Check all planned courses for prerequisite/corequisite satisfaction.
Validate that each requirement (including "choose X of Y") is satisfied by planned/completed courses.
Enforce max units per quarter (unless overridden).
Warn if a course is scheduled in a quarter it's not offered.
Detect and warn about scheduling conflicts, gaps in sequences, or missing requirements.
Double-counting : Track which requirements each course fulfills; warn if double-counting is not allowed.
Substitutions : Allow user to manually mark a course as fulfilling a requirement with advisor note.
Electives : For "any upper-division elective," allow user to select from eligible courses.
Transfer/AP credit : Allow user to mark courses as satisfied via transfer/AP.
6. Extensibility & Modularity
All requirements and courses are defined in JSON or a database.
To add a new major or school, import new data—no code changes needed.
UI components render dynamically based on data.
Plugin system for custom requirement logic (e.g., "must take at least 3 courses from list A and 2 from list B").
Configurable validation rules per major/catalog.
7. User Experience (UX) Considerations
Responsive design for desktop and mobile.
Undo/redo for planning actions.
Autosave and persistent storage.
Accessibility : Keyboard navigation, ARIA labels.
Tooltips and contextual help.
Warnings and suggestions for common mistakes (e.g., "You have not scheduled CSCI 161, which is a prerequisite for several senior courses").
Advisor mode : Allow advisors to review and comment on plans.
8. Testing & Quality Assurance
Unit tests for validation logic and edge cases.
Integration tests for drag-and-drop, prerequisite checking, and requirement satisfaction.
User testing with real students and advisors for usability feedback.
User logs in, selects Computer Science major (2024-25) and "Algorithms" emphasis.
Imports transcript : CSCI 10, MATH 11 marked as completed.
Planner auto-populates : Shows which requirements are already satisfied.
User drags courses into future quarters ; system validates prerequisites and warns about scheduling conflicts.
User sees progress dashboard : 30% major complete, missing 2 university core requirements.
User exports plan as PDF for advisor review.
API integration with university systems for real-time course offerings and transcript import.
Schedule optimizer : Suggests best course sequences based on user constraints.
Peer plan sharing : Compare plans with classmates.
Mobile app : React Native or PWA.