Import office hours from course websites #90

Open
opened 2026-10-03 19:44:46 +00:00 by jalenluorion · 0 comments
Member

Goal
Office hours are among the events students check most, and they are spread across hundreds of course sites. Pulling them in automatically makes CMUCal useful every week of the semester.

Current state

  • api/course_agent/ (LangGraph plus OpenRouter) finds official course sites and embedded Google Calendars, and writes course_websites and calendar_sources rows (api/course_agent/app/db/repositories.py). Its README says it was tested on 4 courses.
  • Nothing turns those calendar sources into events: sync_ical_source in api/app/services/ical.py has no callers.
  • api/scraper/monitors/academic/office_hours.py is hardcoded to one 15-122 Google Calendar with an embedded API key.
  • The Figma has course admins editing office-hours groups; that UI does not exist.

Scope

  • Run the agent on all Fall 2026 courses on dev; measure precision on a sample.
  • Follow linked pages, not just the homepage (README "Next Steps").
  • Sync verified calendar sources into an "OH for xx-xxx" category, using the scheduled re-sync.
  • A review queue so course admins or site admins approve a source before it goes public.
  • Retire the hardcoded office_hours.py monitor.

Done when

  • Office hours for a meaningful set of courses appear on prod, each approved by a person.

Notes
After the Spring launch. Builds on the scheduled scraping issue.

**Goal** Office hours are among the events students check most, and they are spread across hundreds of course sites. Pulling them in automatically makes CMUCal useful every week of the semester. **Current state** - `api/course_agent/` (LangGraph plus OpenRouter) finds official course sites and embedded Google Calendars, and writes `course_websites` and `calendar_sources` rows (`api/course_agent/app/db/repositories.py`). Its README says it was tested on 4 courses. - Nothing turns those calendar sources into events: `sync_ical_source` in `api/app/services/ical.py` has no callers. - `api/scraper/monitors/academic/office_hours.py` is hardcoded to one 15-122 Google Calendar with an embedded API key. - The Figma has course admins editing office-hours groups; that UI does not exist. **Scope** - [ ] Run the agent on all Fall 2026 courses on dev; measure precision on a sample. - [ ] Follow linked pages, not just the homepage (README "Next Steps"). - [ ] Sync verified calendar sources into an "OH for xx-xxx" category, using the scheduled re-sync. - [ ] A review queue so course admins or site admins approve a source before it goes public. - [ ] Retire the hardcoded `office_hours.py` monitor. **Done when** - [ ] Office hours for a meaningful set of courses appear on prod, each approved by a person. **Notes** After the Spring launch. Builds on the scheduled scraping issue.
jalenluorion added this to the CMUCal project 2026-10-03 19:45:09 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
ScottyLabs/cal#90
No description provided.