# nirmitaggarwal/theboringedit architecture

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

- Interactive diagram: https://gitdiagram.com/nirmitaggarwal/theboringedit
- Repository: https://github.com/nirmitaggarwal/theboringedit

## Overview

The Boring Edit is a static, markdown-authored personal blog. Authors create posts and track definitions; the content compiler turns them into generated content that the browser app presents as searchable articles and numbered reading series. Readers can track local reading progress without an account or server. The README documents build-time math/code rendering and SEO-friendly static output. Paths and links for some documented build-time capabilities are inferred only at the subsystem level because their implementations were not sampled.

Main entry points: [`src/lib/posts.ts`](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/lib/posts.ts) (Content access), [`src/App.tsx`](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/App.tsx) (App router), [`scripts/build-content.ts`](https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/build-content.ts) (Content compiler), [`src/generated/content.ts`](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/generated/content.ts) (Generated content)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Markdown authoring"]
  node_posts["Post files"]
  node_trackfiles["Track files"]
end

subgraph group_content["Content processing"]
  node_compiler["Content compiler<br/>[build-content.ts]"]
  node_markdown["Markdown renderer<br/>[markdown.ts]"]
  node_generated["Generated content<br/>[content.ts]"]
  node_seo["SEO output<br/>[seo.ts]"]
  node_search["Search engine<br/>[search.ts]"]
  node_postsapi["Content access<br/>[posts.ts]"]
  node_prerender["Static SEO pages<br/>[prerender.tsx]"]
end

subgraph group_site["Reader experience"]
  node_app["App router<br/>[App.tsx]"]
  node_home["Home page<br/>[Home.tsx]"]
  node_blog["Blog index<br/>[Blog.tsx]"]
  node_article["Article page<br/>[Post.tsx]"]
  node_tracks["Track pages<br/>[Tracks.tsx]"]
  node_track["Track detail<br/>[Track.tsx]"]
  node_searchui["Search palette<br/>[Search.tsx]"]
end

subgraph group_state["Reader state"]
  node_progress["Progress tracking<br/>[progress.ts]"]
  node_browserstore[("Browser storage")]
end

node_author(("Author"))
node_reader(("Reader"))

node_author -->|"writes markdown"| node_posts
node_author -->|"defines series"| node_trackfiles
node_posts -->|"compiles posts"| node_compiler
node_trackfiles -->|"compiles tracks"| node_compiler
node_compiler -->|"renders content"| node_markdown
node_compiler -->|"writes data"| node_generated
node_generated -->|"loads content"| node_postsapi
node_postsapi -->|"provides posts"| node_home
node_postsapi -->|"provides posts"| node_blog
node_postsapi -->|"provides articles"| node_article
node_postsapi -->|"provides series"| node_tracks
node_postsapi -->|"provides parts"| node_track
node_reader -->|"navigates site"| node_app
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_blog
node_app -->|"routes to"| node_article
node_app -->|"routes to"| node_tracks
node_app -->|"routes to"| node_track
node_searchui -->|"queries"| node_search
node_search -->|"reads posts"| node_postsapi
node_reader -->|"searches content"| node_searchui
node_article -->|"tracks reading"| node_progress
node_track -->|"reads completion"| node_progress
node_progress -->|"reads/writes"| node_browserstore
node_compiler -->|"generates metadata"| node_seo
node_prerender -->|"renders routes"| node_generated

click node_posts "https://github.com/nirmitaggarwal/theboringedit/tree/master/content/posts"
click node_trackfiles "https://github.com/nirmitaggarwal/theboringedit/tree/master/content/tracks"
click node_compiler "https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/build-content.ts"
click node_markdown "https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/markdown.ts"
click node_generated "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/generated/content.ts"
click node_seo "https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/seo.ts"
click node_app "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/App.tsx"
click node_home "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Home.tsx"
click node_blog "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Blog.tsx"
click node_article "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Post.tsx"
click node_tracks "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Tracks.tsx"
click node_track "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Track.tsx"
click node_searchui "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/components/Search.tsx"
click node_search "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/lib/search.ts"
click node_postsapi "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/lib/posts.ts"
click node_progress "https://github.com/nirmitaggarwal/theboringedit/blob/master/src/lib/progress.ts"
click node_prerender "https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/prerender.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_posts,node_trackfiles toneBlue
class node_compiler,node_markdown,node_generated,node_seo,node_search,node_postsapi,node_prerender toneAmber
class node_app,node_home,node_blog,node_article,node_tracks,node_track,node_searchui toneMint
class node_progress,node_browserstore toneRose
class node_author,node_reader toneIndigo
```

## Components

### Markdown authoring

- [Post files](https://github.com/nirmitaggarwal/theboringedit/tree/master/content/posts): `content/posts`
- [Track files](https://github.com/nirmitaggarwal/theboringedit/tree/master/content/tracks): `content/tracks`

### Content processing

- [Content compiler](https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/build-content.ts): `scripts/build-content.ts`
- [Markdown renderer](https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/markdown.ts): `scripts/markdown.ts`
- [Generated content](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/generated/content.ts): `src/generated/content.ts`
- [SEO output](https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/seo.ts): `scripts/seo.ts`
- [Search engine](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/lib/search.ts): `src/lib/search.ts`
- [Content access](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/lib/posts.ts): `src/lib/posts.ts`
- [Static SEO pages](https://github.com/nirmitaggarwal/theboringedit/blob/master/scripts/prerender.tsx): `scripts/prerender.tsx`

### Reader experience

- [App router](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/App.tsx): `src/App.tsx`
- [Home page](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Home.tsx): `src/pages/Home.tsx`
- [Blog index](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Blog.tsx): `src/pages/Blog.tsx`
- [Article page](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Post.tsx): `src/pages/Post.tsx`
- [Track pages](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Tracks.tsx): `src/pages/Tracks.tsx`
- [Track detail](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/pages/Track.tsx): `src/pages/Track.tsx`
- [Search palette](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/components/Search.tsx): `src/components/Search.tsx`

### Reader state

- [Progress tracking](https://github.com/nirmitaggarwal/theboringedit/blob/master/src/lib/progress.ts): `src/lib/progress.ts`
- **Browser storage**

### Other components

- **Author**
- **Reader**

## Connections

- Author → Post files: writes markdown
- Author → Track files: defines series
- Post files → Content compiler: compiles posts
- Track files → Content compiler: compiles tracks
- Content compiler → Markdown renderer: renders content
- Content compiler → Generated content: writes data
- Generated content → Content access: loads content
- Content access → Home page: provides posts
- Content access → Blog index: provides posts
- Content access → Article page: provides articles
- Content access → Track pages: provides series
- Content access → Track detail: provides parts
- Reader → App router: navigates site
- App router → Home page: routes to
- App router → Blog index: routes to
- App router → Article page: routes to
- App router → Track pages: routes to
- App router → Track detail: routes to
- Search palette → Search engine: queries
- Search engine → Content access: reads posts
- Reader → Search palette: searches content
- Article page → Progress tracking: tracks reading
- Track detail → Progress tracking: reads completion
- Progress tracking → Browser storage: reads/writes
- Content compiler → SEO output: generates metadata
- Static SEO pages → Generated content: renders routes
