Course Schedule Management
Learning Outcomesβ
By the end of this guide, you will be able to:
- Edit course schedules in
course.config.json - Perform semantic date transformations with AI assistance
- Handle holidays and schedule conflicts
- Manage multi-section courses effectively
Understanding Course Schedulesβ
The course.config.json file is the single source of truth for your course schedule. The Courseasaurus plugin uses it to:
- Generate meeting dates based on patterns
- Map lectures to specific dates
- Track assignment due dates
- Handle holidays and breaks
- Create the schedule page visualization
Key principle: Edit the schedule once, and it updates everywhere automatically.
The course.config.json Structureβ
Basic Schedule Componentsβ
{
"courseCode": "CS 3100",
"courseTitle": "Software Engineering",
"semester": "Spring 2026",
"startDate": "2026-01-12",
"endDate": "2026-04-24",
"timezone": "America/New_York",
"sections": [...], // Meeting patterns
"holidays": [...], // Days off
"lectures": [...], // Content mapping
"assignments": [...] // Due dates
}
Sections and Meeting Patternsβ
Define when your course meets:
{
"sections": [
{
"id": "01",
"name": "Section 01",
"meetings": [
{
"type": "lecture",
"days": ["Monday", "Wednesday", "Friday"],
"startTime": "09:50",
"endTime": "10:55",
"location": "Churchill Hall 101"
}
],
"instructors": ["Dr. Jane Smith"]
}
]
}
Days format: Full day names, capitalized: "Monday", "Tuesday", etc.
Time format: 24-hour format, "HH:MM": "09:50", "14:30", "23:59"
Holidays and Breaksβ
{
"holidays": [
{
"date": "2026-01-19",
"name": "Martin Luther King Jr. Day",
"type": "holiday"
},
{
"date": "2026-03-09",
"endDate": "2026-03-13",
"name": "Spring Break",
"type": "break"
}
]
}
Date format: "YYYY-MM-DD"
Holiday types: "holiday", "break", "exam-period", "reading-day"
Lecture Mappingsβ
Map lecture content to specific dates:
{
"lectures": [
{
"lectureId": "l1-intro",
"dates": ["2026-01-12"],
"topics": [
"Course Introduction",
"Syllabus Review"
]
},
{
"lectureId": "l2-version-control",
"dates": ["2026-01-14", "2026-01-17"],
"topics": [
"Git Fundamentals",
"Collaborative Workflows"
]
}
]
}
lectureId: Must match the filename (without .md)
- File:
lecture-notes/l1-intro.md - ID:
"l1-intro"
Assignments and Due Datesβ
{
"assignments": [
{
"id": "hw1",
"title": "Homework 1: Environment Setup",
"type": "homework",
"assignedDate": "2026-01-12",
"dueDate": "2026-01-19",
"dueTime": "23:59",
"points": 100,
"url": "/assignments/hw1-setup"
}
]
}
Editing Schedules Manuallyβ
Adding a Holidayβ
- Open
course.config.json - Add to
holidaysarray:
{
"date": "2026-02-16",
"name": "Presidents' Day",
"type": "holiday"
}
- Test:
npm start - Verify: Schedule page shows the holiday, no classes scheduled
Changing Meeting Timesβ
Update the meetings array:
{
"meetings": [
{
"type": "lecture",
"days": ["Monday", "Wednesday"],
"startTime": "14:00", // Changed from 09:50
"endTime": "15:40", // Changed from 10:55
"location": "New Building 205"
}
]
}
Adding a New Lectureβ
- Create lecture file:
lecture-notes/l15-security.md - Add mapping in
course.config.json:
{
"lectureId": "l15-security",
"dates": ["2026-04-01"],
"topics": ["Web Security", "Authentication"]
}
- Verify the file exists and lectureId matches
Semantic Date Transformations with AIβ
AI excels at understanding human-friendly date instructions and proposing precise updates to your schedule.
The AI automatically reads open files like course.config.json and gathers context from the repository. Simply open the file and describe the transformationβthe AI will propose the exact changes needed.
Common Transformation Tasksβ
1. Shifting All Datesβ
Scenario: Snow day! Need to shift everything by one week.
Prompt:
With
course.config.jsonopen, "Shift all dates in this file (startDate, endDate, lecture dates, assignment dates, holiday dates) forward by 7 days. Preserve the JSON structure and formatting."
AI proposes:
- Updates to all date fields in the JSON
- A diff showing the before/after for the entire file
Review checklist:
- β All date fields updated correctly
- β Date format preserved (YYYY-MM-DD)
- β No dates fall on weekends (for weekday classes)
- β JSON syntax valid
- β οΈ Verify dates manuallyβAI can make calculation errors!
2. Adjusting for Day-of-Week Changesβ
Scenario: Last year, the semester started Monday Jan 13. This year it starts Tuesday Jan 14. Update all dates.
Prompt:
With
course.config.jsonopen, "This course schedule is from Spring 2025, starting Monday Jan 13. Update it for Spring 2026, which starts Tuesday Jan 14. Shift all dates in the file accordingly, accounting for the day-of-week shift."
This is complex! Review every date carefully in the proposed diff.
3. Adding a New Holidayβ
Prompt:
With
course.config.jsonopen, "Add Patriots' Day (April 20, 2026) as a holiday. Check the file and tell me which lectures or assignments are scheduled on that date so I can reassign them."
AI can identify conflicts in the diff but you decide how to resolve them.
Safe AI Workflow for Date Changesβ
- Backup: Copy
course.config.jsontocourse.config.json.backup(optional, as diffs allow easy rejection) - Request transformation: Describe the change to the AI
- Review diff: Examine the proposed JSON updates carefully
- Manual date verification: Spot-check 5-10 dates against a calendar
- Test build:
npm startand check schedule page - Accept changes: If satisfied, apply the proposals
AI can make arithmetic errors with dates, especially:
- Leap years
- Month boundaries
- Day-of-week calculations
- Holiday conflicts
Never trust AI date calculations without manual verification!
Handling Complex Scenariosβ
Multi-Section Coursesβ
Different sections may meet at different times:
{
"sections": [
{
"id": "morning",
"name": "Morning Section",
"meetings": [
{
"days": ["Monday", "Wednesday", "Friday"],
"startTime": "08:00",
"endTime": "09:05"
}
]
},
{
"id": "afternoon",
"name": "Afternoon Section",
"meetings": [
{
"days": ["Tuesday", "Thursday"],
"startTime": "15:30",
"endTime": "17:10"
}
]
}
]
}
Lecture mapping for multiple sections:
{
"lectureId": "l1-intro",
"dates": ["2026-01-13", "2026-01-14"],
"notes": "Morning section: Jan 13, Afternoon section: Jan 14"
}
Or, assign to specific sections:
{
"lectureId": "l1-intro",
"dates": ["2026-01-13"],
"sections": ["morning"], // Only morning section
"notes": "Morning section onlyβafternoon has different schedule"
}
Lab + Lecture Formatβ
{
"meetings": [
{
"type": "lecture",
"days": ["Monday", "Wednesday"],
"startTime": "10:30",
"endTime": "11:35",
"location": "Lecture Hall"
},
{
"type": "lab",
"days": ["Friday"],
"startTime": "10:30",
"endTime": "12:10",
"location": "Computer Lab"
}
]
}
Labs and lectures both appear on schedule page but can be styled differently.
Handling Schedule Conflictsβ
Scenario: Lecture 5 is scheduled on a newly-added holiday.
Detection:
- Build may fail if validation is enabled
- Schedule page shows conflict
- AI prompt: "Check if any lectures fall on holidays"
Resolution:
- Remove date from lecture mapping
- Assign to next available class day
- Update syllabus if needed
- Notify students of change
Using AI for Schedule Operationsβ
The AI coding assistant, guided by instructions in AGENTS.md, can handle basic maintenance tasks like schedule adjustments by proposing direct edits to course.config.json and showing diffs for your review.
Good AI Promptsβ
Checking for conflicts:
With
course.config.jsonopen, "Identify any lectures or assignments scheduled on holidays in this file and propose resolutions."
Calculating time distribution:
With
course.config.jsonopen, "How many class meetings are scheduled between Jan 12 and Spring Break? How many after? Suggest adjustments if imbalanced."
Suggesting dates:
"Given a MWF schedule starting Jan 12, what are the next 10 class meeting dates, excluding holidays on Jan 19 and Feb 16? Propose adding these to the config."
Proportional adjustment:
"This 15-week spring schedule needs to fit into a 13-week fall schedule. Suggest which lectures to combine or remove, and propose the updated JSON structure."
What AI Can't Do Wellβ
- Pedagogical decisions: Which lectures to combine or skip
- Policy decisions: Assignment due date policies
- Student impact: Understanding how changes affect learning
- Institution-specific: Your university's exact holiday calendar
- Date verification: Can make arithmetic errors
Always apply human judgment to AI suggestions and review the proposed diffs carefully.
Meta-Example: Adjusting This Site's Scheduleβ
Original (Spring 2026):β
{
"startDate": "2026-01-06",
"endDate": "2026-04-20",
"holidays": [
{"date": "2026-01-19", "name": "MLK Day", "type": "holiday"},
{"date": "2026-03-02", "endDate": "2026-03-06", "name": "Spring Break", "type": "break"}
]
}
Adjusted (Fall 2026):β
{
"startDate": "2026-09-08",
"endDate": "2026-12-18",
"holidays": [
{"date": "2026-10-12", "name": "Indigenous Peoples' Day", "type": "holiday"},
{"date": "2026-11-26", "endDate": "2026-11-27", "name": "Thanksgiving", "type": "break"}
]
}
AI prompt used:
"Update this Spring 2026 schedule to Fall 2026. Fall semester starts September 8, 2026 and ends December 18, 2026. Update all lecture and assignment dates proportionally, keeping the same weekly progression. Replace spring holidays with fall holidays: Indigenous Peoples' Day (Oct 12) and Thanksgiving (Nov 26-27). Show the diff of changes."
Review process: The diff highlighted all date shifts and holiday replacements. Manual verification confirmed dates fell on correct weekdays and aligned with university calendar. Changes were accepted after confirming no conflicts.
Validation and Testingβ
Build-Time Validationβ
Courseasaurus validates:
- β Date formats (YYYY-MM-DD)
- β Time formats (HH:MM)
- β Referenced lecture files exist
- β No duplicate IDs
- β Dates within semester range
If build fails:
- Read error message carefully
- Check the line/field mentioned
- Verify date/time formats
- Ensure lecture files exist
Manual Testing Checklistβ
After schedule changes:
- β Schedule page renders correctly
- β All class meetings appear
- β Holidays are marked
- β Lecture mappings show correct dates
- β Assignment due dates are reasonable
- β No meetings on holidays
- β Correct number of class days
Reviewing Changesβ
Examine the AI's proposed diff for course.config.json:
# If needed, view the file after acceptance
cat course.config.json
Ensure all updates align with your intentions before finalizing.
Common Pitfallsβ
1. Date Format Errorsβ
// β Wrong formats
"startDate": "01-12-2026" // Month-day-year
"dueTime": "11:59 PM" // 12-hour format
"date": "2026-1-5" // No leading zeros
// β
Correct formats
"startDate": "2026-01-12" // Year-month-day
"dueTime": "23:59" // 24-hour format
"date": "2026-01-05" // Leading zeros
2. Mismatched Lecture IDsβ
// File: lecture-notes/l1-introduction.md
// β Wrong ID
{"lectureId": "l1-intro", ...}
// β
Correct ID
{"lectureId": "l1-introduction", ...}
3. Forgetting to Update Assignmentsβ
When shifting lecture dates, remember to shift assignment dates too!
4. Weekend Datesβ
For weekday classes, dates should not fall on weekends:
// β Saturday lecture
{"lectureId": "l5", "dates": ["2026-01-17"]} // Jan 17 is Saturday!
// β
Weekday lecture
{"lectureId": "l5", "dates": ["2026-01-19"]} // Monday
Next Stepsβ
Now that you can manage schedules:
- Practice: Make a minor schedule adjustment using the AI
Pro Tip: Maintain a separate "schedule notes" document where you track the reasoning behind schedule decisions. This helps when adapting for future semesters and when coordinating with co-instructors.
Meta: AI Usage in Schedule Management
This guide demonstrates responsible AI use:
- AI assisted with date calculation examples
- All dates manually verified against calendars
- Prompts designed for clarity and specificity
- Human judgment applied to all pedagogical implications