Skip to content

How this site is built

This site is deliberately boring to operate: a static build, served from a small container, with the standard’s text pulled straight from git.

LayerChoiceWhy
GeneratorAstro + StarlightDocumentation framework: two-level nav, offline search, dark/light, SEO.
SearchPagefindStatic, self-hosted, no backend.
FontsFraunces · Public Sans · IBM Plex Mono, self-hostedNo external requests; keeps the CSP 'self'.
Versioningstarlight-versionsEvery released version stays browsable at a stable URL.
Servenginx (alpine-slim)Static files only; minimal attack surface.
Build & shipGitHub Actions → GHCR, pulled behind TraefikNothing is built on the production host.

The FitSD standard lives as canonical Markdown in the repository root. A vendor step (scripts/vendor.mjs) renders those files into the site’s content collection at build time — normalising frontmatter and nothing else — so the website shows the standard verbatim. The vendored copies are committed, and CI runs vendor.mjs --check to fail the build if they ever drift from the canonical source.

repo-root *.md ──vendor──▶ src/content/docs/** ──Astro──▶ static site
▲ │
└────────────── single source of truth ────────────────────┘

Nobody edits the vendored copies by hand. To change the standard, you change the canonical Markdown — the same files reviewed on GitHub.

Releases are frozen and kept browsable so a team can adopt — and cite — a specific version. See Versioning & change policy.