# kevinantoniowiyonolauw/g-13 architecture

> Architecture diagram of the GitHub repository kevinantoniowiyonolauw/g-13, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kevinantoniowiyonolauw/g-13
- Repository: https://github.com/kevinantoniowiyonolauw/g-13

## Overview

g-13 is a community-built UGM Computer Science course guide. Its main workflow is to select a curriculum, explore/search courses and prerequisite links, inspect course details, and optionally plan a semester roadmap. The README also identifies exam archives, alumni, learning resources, FAQ, and Indonesian/English support. Edges below are limited to README statements or relationships visible in the supplied source index/excerpts; unsampled feature internals are represented without guessed call chains.

Main entry points: [`apps/web/src/features/curriculum/useCurriculumExplorer.ts`](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/useCurriculumExplorer.ts) (Curriculum explorer), [`packages/curriculum/src/registry.ts`](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/registry.ts) (Curriculum registry), [`packages/curriculum/src/curricula/2026/index.ts`](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/curricula/2026/index.ts) (2026 curriculum), [`apps/web/src/features/curriculum/components/CurriculumMap.tsx`](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/components/CurriculumMap.tsx) (Curriculum map)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Course guide"]
  node_router["Web routing<br/>[router.tsx]"]
  node_curriculum_explorer["Curriculum explorer"]
  node_course_search["Course search<br/>[CourseSearch.tsx]"]
  node_map_view["Curriculum map<br/>[CurriculumMap.tsx]"]
  node_course_details["Course details"]
  node_graph_routing["Map edge routing"]
  node_route_worker["Routing worker"]
end

subgraph group_curriculum["Curriculum data"]
  node_curriculum_package["Curriculum registry<br/>[registry.ts]"]
  node_curriculum_2021["2021 curriculum<br/>[normalize.ts]"]
  node_curriculum_2026["2026 curriculum<br/>[index.ts]"]
  node_normalization["Data normalization<br/>[normalize.ts]"]
  node_curriculum_model["Course model<br/>[model.ts]"]
  node_curriculum_rules["Academic rules<br/>[rules.ts]"]
end

subgraph group_planning["Roadmap planner"]
  node_roadmap["Roadmap planner"]
end

subgraph group_services["Community features"]
  node_exam_archive["Exam archive<br/>[archive.ts]"]
  node_exam_catalog["Exam catalog<br/>[catalog.ts]"]
  node_paper_preview["Paper preview<br/>[PaperPreview.tsx]"]
  node_alumni["Alumni directory"]
  node_resources["Learning resources<br/>[ResourcesPage.tsx]"]
  node_faq["FAQ<br/>[FaqPage.tsx]"]
end

subgraph group_shared["Shared experience"]
  node_i18n["Translations<br/>[index.ts]"]
  node_locales["Locale messages<br/>[messages.ts]"]
  node_locale_hook["Locale hook<br/>[useLocale.ts]"]
  node_trailer["Project trailer<br/>[Composition.tsx]"]
end

node_visitor(("Guide visitor"))
node_strapi["Strapi service"]

node_visitor -->|"opens site"| node_router
node_router -.->|"routes to"| node_curriculum_explorer
node_curriculum_explorer -->|"loads curriculum"| node_curriculum_package
node_curriculum_explorer -.->|"prepares map"| node_map_view
node_curriculum_explorer -->|"provides course data"| node_course_search
node_visitor -->|"searches courses"| node_course_search
node_visitor -->|"explores map"| node_map_view
node_visitor -->|"opens details"| node_course_details
node_map_view -.->|"routes connections"| node_graph_routing
node_graph_routing -->|"dispatches routing"| node_route_worker
node_exam_archive -->|"reads catalog"| node_exam_catalog
node_paper_preview -->|"gets paper links"| node_exam_archive
node_visitor -->|"browses exams"| node_exam_archive
node_visitor -->|"browses alumni"| node_alumni
node_alumni -->|"reads collection"| node_strapi
node_visitor -->|"opens resources"| node_resources
node_visitor -->|"opens FAQ"| node_faq
node_visitor -->|"plans semesters"| node_roadmap
node_curriculum_package -->|"registers edition"| node_curriculum_2021
node_curriculum_package -->|"registers edition"| node_curriculum_2026
node_curriculum_2021 -->|"normalizes data"| node_normalization
node_curriculum_2026 -->|"normalizes data"| node_normalization
node_normalization -->|"builds course model"| node_curriculum_model
node_curriculum_2026 -->|"defines rules"| node_curriculum_rules
node_locale_hook -->|"uses translations"| node_i18n
node_locale_hook -->|"uses course types"| node_curriculum_package
node_i18n -->|"loads messages"| node_locales
node_trailer -.->|"presents project"| node_visitor

click node_router "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/router.tsx"
click node_curriculum_explorer "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/useCurriculumExplorer.ts"
click node_course_search "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/components/CourseSearch.tsx"
click node_map_view "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/components/CurriculumMap.tsx"
click node_course_details "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/courses/CourseDetailsPanel.tsx"
click node_graph_routing "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/graph/connection-routes.ts"
click node_route_worker "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/graph/connection-routing.worker.ts"
click node_exam_archive "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/exam-archive/archive.ts"
click node_exam_catalog "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/exam-archive/catalog.ts"
click node_paper_preview "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/exam-archive/PaperPreview.tsx"
click node_alumni "https://github.com/kevinantoniowiyonolauw/g-13/tree/main/apps/web/src/features/alumni"
click node_resources "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/resources/ResourcesPage.tsx"
click node_faq "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/faq/FaqPage.tsx"
click node_roadmap "https://github.com/kevinantoniowiyonolauw/g-13/tree/main/apps/web/src/features/roadmap"
click node_curriculum_package "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/registry.ts"
click node_curriculum_2021 "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/curricula/2021/normalize.ts"
click node_curriculum_2026 "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/curricula/2026/index.ts"
click node_normalization "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/normalize.ts"
click node_curriculum_model "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/contracts/model.ts"
click node_curriculum_rules "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/contracts/rules.ts"
click node_i18n "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/i18n/src/index.ts"
click node_locales "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/i18n/src/messages.ts"
click node_locale_hook "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/useLocale.ts"
click node_trailer "https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/trailer/src/Composition.tsx"

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_router,node_curriculum_explorer,node_course_search,node_map_view,node_course_details,node_graph_routing,node_route_worker toneBlue
class node_curriculum_package,node_curriculum_2021,node_curriculum_2026,node_normalization,node_curriculum_model,node_curriculum_rules toneAmber
class node_roadmap,node_strapi toneMint
class node_exam_archive,node_exam_catalog,node_paper_preview,node_alumni,node_resources,node_faq toneRose
class node_i18n,node_locales,node_locale_hook,node_trailer,node_visitor toneIndigo
```

## Components

### Course guide

- [Web routing](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/router.tsx): `apps/web/src/router.tsx`
- [Curriculum explorer](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/useCurriculumExplorer.ts): `apps/web/src/features/curriculum/useCurriculumExplorer.ts`
- [Course search](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/components/CourseSearch.tsx): `apps/web/src/features/curriculum/components/CourseSearch.tsx`
- [Curriculum map](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/curriculum/components/CurriculumMap.tsx): `apps/web/src/features/curriculum/components/CurriculumMap.tsx`
- [Course details](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/courses/CourseDetailsPanel.tsx): `apps/web/src/courses/CourseDetailsPanel.tsx`
- [Map edge routing](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/graph/connection-routes.ts): `apps/web/src/graph/connection-routes.ts`
- [Routing worker](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/graph/connection-routing.worker.ts): `apps/web/src/graph/connection-routing.worker.ts`

### Curriculum data

- [Curriculum registry](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/registry.ts): `packages/curriculum/src/registry.ts`
- [2021 curriculum](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/curricula/2021/normalize.ts): `packages/curriculum/src/curricula/2021/normalize.ts`
- [2026 curriculum](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/curricula/2026/index.ts): `packages/curriculum/src/curricula/2026/index.ts`
- [Data normalization](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/normalize.ts): `packages/curriculum/src/normalize.ts`
- [Course model](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/contracts/model.ts): `packages/curriculum/src/contracts/model.ts`
- [Academic rules](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/curriculum/src/contracts/rules.ts): `packages/curriculum/src/contracts/rules.ts`

### Roadmap planner

- [Roadmap planner](https://github.com/kevinantoniowiyonolauw/g-13/tree/main/apps/web/src/features/roadmap): `apps/web/src/features/roadmap`

### Community features

- [Exam archive](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/exam-archive/archive.ts): `apps/web/src/features/exam-archive/archive.ts`
- [Exam catalog](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/exam-archive/catalog.ts): `apps/web/src/features/exam-archive/catalog.ts`
- [Paper preview](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/exam-archive/PaperPreview.tsx): `apps/web/src/features/exam-archive/PaperPreview.tsx`
- [Alumni directory](https://github.com/kevinantoniowiyonolauw/g-13/tree/main/apps/web/src/features/alumni): `apps/web/src/features/alumni`
- [Learning resources](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/resources/ResourcesPage.tsx): `apps/web/src/features/resources/ResourcesPage.tsx`
- [FAQ](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/features/faq/FaqPage.tsx): `apps/web/src/features/faq/FaqPage.tsx`

### Shared experience

- [Translations](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/i18n/src/index.ts): `packages/i18n/src/index.ts`
- [Locale messages](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/packages/i18n/src/messages.ts): `packages/i18n/src/messages.ts`
- [Locale hook](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/web/src/useLocale.ts): `apps/web/src/useLocale.ts`
- [Project trailer](https://github.com/kevinantoniowiyonolauw/g-13/blob/main/apps/trailer/src/Composition.tsx): `apps/trailer/src/Composition.tsx`

### Other components

- **Guide visitor**
- **Strapi service**

## Connections

- Guide visitor → Web routing: opens site (evidence: `README.md`)
- Web routing → Curriculum explorer: routes to
- Curriculum explorer → Curriculum registry: loads curriculum (evidence: `apps/web/src/features/curriculum/useCurriculumExplorer.ts`)
- Curriculum explorer → Curriculum map: prepares map
- Curriculum explorer → Course search: provides course data (evidence: `apps/web/src/features/curriculum/components/CourseSearch.tsx`)
- Guide visitor → Course search: searches courses (evidence: `README.md`)
- Guide visitor → Curriculum map: explores map (evidence: `README.md`)
- Guide visitor → Course details: opens details (evidence: `README.md`)
- Curriculum map → Map edge routing: routes connections
- Map edge routing → Routing worker: dispatches routing (evidence: `apps/web/src/graph/connection-routing.worker.ts`)
- Exam archive → Exam catalog: reads catalog (evidence: `apps/web/src/features/exam-archive/archive.ts`)
- Paper preview → Exam archive: gets paper links (evidence: `apps/web/src/features/exam-archive/PaperPreview.tsx`)
- Guide visitor → Exam archive: browses exams (evidence: `README.md`)
- Guide visitor → Alumni directory: browses alumni (evidence: `README.md`)
- Alumni directory → Strapi service: reads collection (evidence: `README.md`)
- Guide visitor → Learning resources: opens resources (evidence: `README.md`)
- Guide visitor → FAQ: opens FAQ (evidence: `README.md`)
- Guide visitor → Roadmap planner: plans semesters (evidence: `README.md`)
- Curriculum registry → 2021 curriculum: registers edition
- Curriculum registry → 2026 curriculum: registers edition
- 2021 curriculum → Data normalization: normalizes data (evidence: `packages/curriculum/src/curricula/2021/normalize.ts`)
- 2026 curriculum → Data normalization: normalizes data
- Data normalization → Course model: builds course model (evidence: `packages/curriculum/src/normalize.ts`)
- 2026 curriculum → Academic rules: defines rules (evidence: `packages/curriculum/src/curricula/2026/index.ts`)
- Locale hook → Translations: uses translations (evidence: `apps/web/src/useLocale.ts`)
- Locale hook → Curriculum registry: uses course types (evidence: `apps/web/src/useLocale.ts`)
- Translations → Locale messages: loads messages (evidence: `packages/i18n/src/messages.ts`)
- Project trailer → Guide visitor: presents project
