Skip to content

0017: Direct MkDocs and static hosting

Status: Accepted

Context

The maintainer prefers the conventional MkDocs workflow used by uv. Retaining old URLs, a separate staging tree, link transformations, and redirect Workers adds unnecessary machinery to this early project. Old URLs do not need to survive.

Decision

MkDocs reads publishable content directly from docs/, configured by root mkdocs.yml. A focused scripts/generate_docs.py command generates catalog and CLI references, upcoming changes, and saved notebook previews before ordinary mkdocs build or mkdocs serve. MkDocs owns live reload. There is no custom source staging, watcher, navigation/config generation, or link rewriting.

Dataset catalog pages link to handwritten usage guides instead of merging them. The committed catalog stays under docs/generated/catalog/. API references use mkdocstrings. The ignored docs/examples/ directory is disposable generated output: notebook previews, images, downloads, manifests, and standard Markdown includes of runnable example READMEs. No notebook is executed by documentation generation.

Root README and policy files remain GitHub entry points. Docs and example source links are updated to their canonical destinations once, rather than transformed on each build. Current docs URLs follow their file paths without a /docs/ prefix. Retired paths return 404; no release archive or compatibility redirects remain.

Keep usdata.dev, docs.usdata.dev, and R2-backed data.usdata.dev. The two websites deploy automatically as Cloudflare Static Assets with no custom Worker scripts. Remove their TypeScript type-generation and runtime-test toolchains. Docs hosting configuration and a pinned Wrangler dependency live under infra/; the homepage stays under web/. R2 and its credentials are unaffected.

Consequences

Content and URL structure correspond directly, and normal MkDocs commands work after generation. Reference and example source changes require regeneration; ordinary Markdown edits use MkDocs reload. Old bookmarks may return 404. This supersedes the layout and URL-preservation decisions in ADR 0016 and the redirect behavior in ADR 0015. Storage and package-release policies are unchanged.