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 its own repository. A vendor step (scripts/vendor-refs.mjs) reads the standard at chosen git refs — one per published version — and 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-refs.mjs --check to fail the build if a pinned version’s copies ever drift from its source.

standard repo @ ref ──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.