# longhorn-developers/ut-registration-plus architecture

> Architecture diagram of the GitHub repository longhorn-developers/ut-registration-plus, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/longhorn-developers/ut-registration-plus
- Repository: https://github.com/longhorn-developers/ut-registration-plus

## Overview

UT Registration Plus is a Chrome extension that enriches UT Austin course-catalog pages and helps students plan and manage course schedules. The main workflow runs from catalog browsing through course details and saved schedules to popup and weekly-calendar views; separate capabilities include grade distributions, campus mapping, and settings. The tree, README, and excerpts support the principal entry points and some storage/message relationships, but most component and background wiring was not sampled, so uncertain links are omitted.

Main entry points: [`src/views/components/CourseCatalogMain.tsx`](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/CourseCatalogMain.tsx) (Catalog Interface), [`src/views/hooks/useSchedules.ts`](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/hooks/useSchedules.ts) (Schedule Hooks), [`src/pages/background/handler/userScheduleHandler.ts`](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/handler/userScheduleHandler.ts) (Schedule Handler), [`src/pages/background/background.ts`](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/background.ts) (Background Worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Catalog Experience"]
  node_catalog_ui["Catalog Interface"]
  node_catalog_scraper["Catalog Scraper"]
  node_course_popup["Course Breakdown"]
end

subgraph group_planning["Schedule Planning"]
  node_popup_ui["Extension Popup<br/>[PopupMain.tsx]"]
  node_schedule_hooks["Schedule Hooks<br/>[useSchedules.ts]"]
  node_calendar_view["Weekly Calendar<br/>[CalendarMain.tsx]"]
  node_calendar_transform["Calendar Layout"]
end

subgraph group_insights["Course Insights"]
  node_grade_ui["Grade Distributions"]
  node_distribution_query["Distribution Queries"]
  node_grade_db[("Course Data Database<br/>[initializeDB.ts]")]
  node_campus_map["Campus Map<br/>[Map.tsx]"]
end

subgraph group_extension["Extension Runtime"]
  node_views_entry["View Entry<br/>[index.tsx]"]
  node_schedule_handler["Schedule Handler"]
  node_schedule_ops["Schedule Operations"]
  node_schedule_store[("Schedule Store")]
  node_settings_ui["Settings<br/>[Settings.tsx]"]
  node_background["Background Worker<br/>[background.ts]"]
  node_tab_handler["Calendar Tab Handler"]
end

node_student(("Student"))
node_ut_catalog["UT Course Catalog"]
node_external_course_services["Course Info Services"]

node_student -->|"browses courses"| node_ut_catalog
node_ut_catalog -->|"loads extension view"| node_views_entry
node_views_entry -->|"renders catalog UI"| node_catalog_ui
node_catalog_ui -->|"scrapes catalog"| node_catalog_scraper
node_catalog_ui -->|"shows breakdown"| node_course_popup
node_course_popup -.->|"links to details"| node_external_course_services
node_student -->|"opens popup"| node_popup_ui
node_popup_ui -->|"views schedules"| node_schedule_hooks
node_schedule_hooks -->|"reads schedules"| node_schedule_store
node_student -->|"manages schedules"| node_schedule_handler
node_schedule_handler -->|"dispatches operations"| node_schedule_ops
node_schedule_hooks -->|"formats meetings"| node_calendar_transform
node_student -->|"views weekly plan"| node_calendar_view
node_calendar_view -->|"uses schedule layout"| node_calendar_transform
node_student -->|"checks grade history"| node_grade_ui
node_grade_ui -->|"requests distributions"| node_distribution_query
node_distribution_query -->|"queries database"| node_grade_db
node_student -->|"plans campus travel"| node_campus_map
node_student -->|"configures extension"| node_settings_ui
node_background -->|"registers handler"| node_schedule_handler
node_background -->|"registers handler"| node_tab_handler
node_tab_handler -->|"tracks calendar tabs"| node_schedule_store

click node_views_entry "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/index.tsx"
click node_catalog_ui "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/CourseCatalogMain.tsx"
click node_catalog_scraper "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/lib/CourseCatalogScraper.ts"
click node_course_popup "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/injected/CourseCatalogInjectedPopup/CourseCatalogInjectedPopup.tsx"
click node_popup_ui "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/PopupMain.tsx"
click node_schedule_handler "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/handler/userScheduleHandler.ts"
click node_schedule_ops "https://github.com/longhorn-developers/ut-registration-plus/tree/main/src/pages/background/lib"
click node_schedule_hooks "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/hooks/useSchedules.ts"
click node_schedule_store "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/shared/storage/UserScheduleStore.ts"
click node_calendar_view "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/calendar/CalendarMain.tsx"
click node_calendar_transform "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/hooks/useFlattenedCourseSchedule.ts"
click node_grade_ui "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/injected/CourseCatalogInjectedPopup/GradeDistribution.tsx"
click node_distribution_query "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/lib/database/queryDistribution.ts"
click node_grade_db "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/lib/database/initializeDB.ts"
click node_campus_map "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/map/Map.tsx"
click node_settings_ui "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/settings/Settings.tsx"
click node_background "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/background.ts"
click node_tab_handler "https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/handler/calendarBackgroundHandler.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_catalog_ui,node_catalog_scraper,node_course_popup toneBlue
class node_popup_ui,node_schedule_hooks,node_calendar_view,node_calendar_transform toneAmber
class node_grade_ui,node_distribution_query,node_grade_db,node_campus_map toneMint
class node_views_entry,node_schedule_handler,node_schedule_ops,node_schedule_store,node_settings_ui,node_background,node_tab_handler toneRose
class node_student,node_ut_catalog,node_external_course_services toneIndigo
```

## Components

### Catalog Experience

- [Catalog Interface](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/CourseCatalogMain.tsx): `src/views/components/CourseCatalogMain.tsx`
- [Catalog Scraper](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/lib/CourseCatalogScraper.ts): `src/views/lib/CourseCatalogScraper.ts`
- [Course Breakdown](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/injected/CourseCatalogInjectedPopup/CourseCatalogInjectedPopup.tsx): `src/views/components/injected/CourseCatalogInjectedPopup/CourseCatalogInjectedPopup.tsx`

### Schedule Planning

- [Extension Popup](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/PopupMain.tsx): `src/views/components/PopupMain.tsx`
- [Schedule Hooks](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/hooks/useSchedules.ts): `src/views/hooks/useSchedules.ts`
- [Weekly Calendar](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/calendar/CalendarMain.tsx): `src/pages/calendar/CalendarMain.tsx`
- [Calendar Layout](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/hooks/useFlattenedCourseSchedule.ts): `src/views/hooks/useFlattenedCourseSchedule.ts`

### Course Insights

- [Grade Distributions](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/injected/CourseCatalogInjectedPopup/GradeDistribution.tsx): `src/views/components/injected/CourseCatalogInjectedPopup/GradeDistribution.tsx`
- [Distribution Queries](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/lib/database/queryDistribution.ts): `src/views/lib/database/queryDistribution.ts`
- [Course Data Database](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/lib/database/initializeDB.ts): `src/views/lib/database/initializeDB.ts`
- [Campus Map](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/map/Map.tsx): `src/views/components/map/Map.tsx`

### Extension Runtime

- [View Entry](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/index.tsx): `src/views/index.tsx`
- [Schedule Handler](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/handler/userScheduleHandler.ts): `src/pages/background/handler/userScheduleHandler.ts`
- [Schedule Operations](https://github.com/longhorn-developers/ut-registration-plus/tree/main/src/pages/background/lib): `src/pages/background/lib`
- [Schedule Store](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/shared/storage/UserScheduleStore.ts): `src/shared/storage/UserScheduleStore.ts`
- [Settings](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/views/components/settings/Settings.tsx): `src/views/components/settings/Settings.tsx`
- [Background Worker](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/background.ts): `src/pages/background/background.ts`
- [Calendar Tab Handler](https://github.com/longhorn-developers/ut-registration-plus/blob/main/src/pages/background/handler/calendarBackgroundHandler.ts): `src/pages/background/handler/calendarBackgroundHandler.ts`

### Other components

- **Student**
- **UT Course Catalog**
- **Course Info Services**

## Connections

- Student → UT Course Catalog: browses courses
- UT Course Catalog → View Entry: loads extension view
- View Entry → Catalog Interface: renders catalog UI
- Catalog Interface → Catalog Scraper: scrapes catalog
- Catalog Interface → Course Breakdown: shows breakdown
- Course Breakdown → Course Info Services: links to details
- Student → Extension Popup: opens popup
- Extension Popup → Schedule Hooks: views schedules
- Schedule Hooks → Schedule Store: reads schedules
- Student → Schedule Handler: manages schedules
- Schedule Handler → Schedule Operations: dispatches operations
- Schedule Hooks → Calendar Layout: formats meetings
- Student → Weekly Calendar: views weekly plan
- Weekly Calendar → Calendar Layout: uses schedule layout
- Student → Grade Distributions: checks grade history
- Grade Distributions → Distribution Queries: requests distributions
- Distribution Queries → Course Data Database: queries database
- Student → Campus Map: plans campus travel
- Student → Settings: configures extension
- Background Worker → Schedule Handler: registers handler
- Background Worker → Calendar Tab Handler: registers handler
- Calendar Tab Handler → Schedule Store: tracks calendar tabs
