My Doc-Site / Pages / Guide / Why this pattern

Why this pattern

The problem it solves

A conventional documentation site leans on a generator (MkDocs, Docusaurus, Hugo) plus a plugin ecosystem. That buys you a lot, but it also means a toolchain to install, a config to learn, a build step to run, and a dependency tree that drifts and breaks between machines and over time. For a personal, long-lived knowledge base you curate — where you shape the structure, Claude writes the pages, and you read the result — that overhead earns little and costs upkeep.

This scaffold takes the opposite bet: the rendered HTML is the source, and the only tooling is a few hundred lines of Python standard library.

What this scaffold does instead

ConcernHow it's handled
Navigation_lib/_nav.py scans docs/pages/. Each directory is a tab; each .html file is a page. No central nav list.
Page chrome_lib/_layout.py renders one shared shell; _lib/_wrap_handwritten.py bakes it onto every authored <main>. Change the layout once, re-wrap, done.
Per-tab tweaksAn optional _tab.json per tab overrides label, ordering, and sidebar grouping — local to that tab, no global config.
Live preview_lib/_serve.py: stdlib HTTP + mtime polling + Server-Sent Events. No watchdog, no websocket library.
DependenciesNone. python3 is the whole requirement.

Result: adding content is a one-step action — create an HTML file, run the wrap script, commit.

The tradeoffs — honest version

When this pattern shines

When it doesn't

My Doc-Site docs