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.
| Layer | Choice | Why |
|---|---|---|
| Generator | Astro + Starlight | Documentation framework: two-level nav, offline search, dark/light, SEO. |
| Search | Pagefind | Static, self-hosted, no backend. |
| Fonts | Fraunces · Public Sans · IBM Plex Mono, self-hosted | No external requests; keeps the CSP 'self'. |
| Versioning | starlight-versions | Every released version stays browsable at a stable URL. |
| Serve | nginx (alpine-slim) | Static files only; minimal attack surface. |
| Build & ship | GitHub Actions → GHCR, pulled behind Traefik | Nothing is built on the production host. |
One source of truth
Section titled “One source of truth”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.
Versioning
Section titled “Versioning”Releases are frozen and kept browsable so a team can adopt — and cite — a specific version. See Versioning & change policy.