# frankgc2025/course-knowledge-base architecture

> Architecture diagram of the GitHub repository frankgc2025/course-knowledge-base, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/frankgc2025/course-knowledge-base
- Repository: https://github.com/frankgc2025/course-knowledge-base

## Overview

Course Knowledge Base turns Markdown course material into a searchable, navigable static site. Authors organize notes by course and section; the build process discovers and renders pages, assembles course navigation, and creates a search index. Readers browse course overviews, lecture notes, reviews, and problems, or search the published content. The build implementation is concentrated in one script, so its internal stages share that path; client-side behavior and some wiring are inferred from the documented capabilities and asset names.

Main entry points: [`scripts/build.js`](https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js) (Build process), [`public`](https://github.com/frankgc2025/course-knowledge-base/tree/main/public) (Static assets), [`src/assets`](https://github.com/frankgc2025/course-knowledge-base/tree/main/src/assets) (UI assets), [`src/assets/search.js`](https://github.com/frankgc2025/course-knowledge-base/blob/main/src/assets/search.js) (Search interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_content["Course content"]
  node_courses["Course notes"]
  node_overview["Course overviews"]
  node_lectures["Lecture notes"]
  node_reviews["Review materials"]
  node_problems["Problems"]
  node_about["About page<br/>[about.md]"]
end

subgraph group_generation["Site generation"]
  node_build["Build process<br/>[build.js]"]
  node_markdown["Markdown rendering<br/>[build.js]"]
  node_nav["Course navigation<br/>[build.js]"]
  node_searchindex["Search indexing<br/>[build.js]"]
  node_static["Generated site"]
  node_assets["Static assets"]
  node_scriptsassets["UI assets"]
end

subgraph group_experience["Reader experience"]
  node_browser["Static website"]
  node_searchui["Search interface<br/>[search.js]"]
  node_ui["Navigation interface<br/>[ui.js]"]
end

node_author(("Content author"))
node_reader(("Reader"))

node_author -->|"writes notes"| node_courses
node_build -->|"reads Markdown"| node_courses
node_build -->|"reads Markdown"| node_about
node_build -->|"copies assets"| node_assets
node_build -->|"copies assets"| node_scriptsassets
node_build -->|"renders pages"| node_markdown
node_markdown -->|"provides pages"| node_nav
node_build -->|"builds navigation"| node_nav
node_build -->|"builds index"| node_searchindex
node_nav -->|"writes pages"| node_static
node_markdown -->|"writes HTML"| node_static
node_searchindex -->|"writes index"| node_static
node_assets -->|"copied into"| node_static
node_scriptsassets -->|"copied into"| node_static
node_reader -->|"opens site"| node_browser
node_static -->|"serves pages"| node_browser
node_browser -->|"loads interface"| node_ui
node_browser -->|"loads search"| node_searchui
node_searchui -->|"reads index"| node_static

click node_courses "https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses"
click node_overview "https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses"
click node_lectures "https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses"
click node_reviews "https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses"
click node_problems "https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses"
click node_about "https://github.com/frankgc2025/course-knowledge-base/blob/main/content/about.md"
click node_build "https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js"
click node_markdown "https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js"
click node_nav "https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js"
click node_searchindex "https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js"
click node_assets "https://github.com/frankgc2025/course-knowledge-base/tree/main/public"
click node_scriptsassets "https://github.com/frankgc2025/course-knowledge-base/tree/main/src/assets"
click node_searchui "https://github.com/frankgc2025/course-knowledge-base/blob/main/src/assets/search.js"
click node_ui "https://github.com/frankgc2025/course-knowledge-base/blob/main/src/assets/ui.js"

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_courses,node_overview,node_lectures,node_reviews,node_problems,node_about toneBlue
class node_build,node_markdown,node_nav,node_searchindex,node_static,node_assets,node_scriptsassets toneAmber
class node_browser,node_searchui,node_ui toneMint
class node_author,node_reader toneIndigo
```

## Components

### Course content

- [Course notes](https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses): `content/courses`
- [Course overviews](https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses): `content/courses`
- [Lecture notes](https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses): `content/courses`
- [Review materials](https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses): `content/courses`
- [Problems](https://github.com/frankgc2025/course-knowledge-base/tree/main/content/courses): `content/courses`
- [About page](https://github.com/frankgc2025/course-knowledge-base/blob/main/content/about.md): `content/about.md`

### Site generation

- [Build process](https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js): `scripts/build.js`
- [Markdown rendering](https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js): `scripts/build.js`
- [Course navigation](https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js): `scripts/build.js`
- [Search indexing](https://github.com/frankgc2025/course-knowledge-base/blob/main/scripts/build.js): `scripts/build.js`
- **Generated site**
- [Static assets](https://github.com/frankgc2025/course-knowledge-base/tree/main/public): `public`
- [UI assets](https://github.com/frankgc2025/course-knowledge-base/tree/main/src/assets): `src/assets`

### Reader experience

- **Static website**
- [Search interface](https://github.com/frankgc2025/course-knowledge-base/blob/main/src/assets/search.js): `src/assets/search.js`
- [Navigation interface](https://github.com/frankgc2025/course-knowledge-base/blob/main/src/assets/ui.js): `src/assets/ui.js`

### Other components

- **Content author**
- **Reader**

## Connections

- Content author → Course notes: writes notes
- Build process → Course notes: reads Markdown
- Build process → About page: reads Markdown
- Build process → Static assets: copies assets
- Build process → UI assets: copies assets
- Build process → Markdown rendering: renders pages
- Markdown rendering → Course navigation: provides pages
- Build process → Course navigation: builds navigation
- Build process → Search indexing: builds index
- Course navigation → Generated site: writes pages
- Markdown rendering → Generated site: writes HTML
- Search indexing → Generated site: writes index
- Static assets → Generated site: copied into
- UI assets → Generated site: copied into
- Reader → Static website: opens site
- Generated site → Static website: serves pages
- Static website → Navigation interface: loads interface
- Static website → Search interface: loads search
- Search interface → Generated site: reads index
