--- name: static-page-stack description: SOTA stack recommendations for elegant, controlled, semantic static HTML pages — dashboards, post-mortems, technical-investigation reports, allowed-tools: Read, Write, Edit, Bash, Grep, Glob, WebFetch, WebSearch --- # Static Page Stack (SOTA, 2026) > **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues. ## When to use this skill The user wants to produce **static HTML pages** that combine three aesthetic DNAs: - Magazine / data-journalism (The Pudding, NYT Upshot) - Technical documentation (Material/Docusaurus/Starlight) - Computational notebook (Quarto/Observable/Jupyter Book) …and embed three kinds of SVG: - Programmatic charts (Vega-Lite / Observable Plot / D3) - Hand-authored inline SVG (illustrative) - Whiteboard-style (Excalidraw / tldraw) Triggers include: "create a static page", "build a dashboard", "design a post-mortem", "set up a technical-doc site", "what HTML/CSS stack should I use", "this Tailwind soup is unmaintainable". ## The recommended stack (TL;DR) | Layer | Pick | Backup | Why | | ------------------------ | ---------------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | Authoring | **Quarto** | Quartz, Jupyter Book 2 / MyST | Multi-page, native code+prose+math+execution, MIT, used by Bundesbank/BIS/USGS | | Visual system | **Open Props + native modern CSS** | Pico.css | Replaces Tailwind utility soup with semantic tokens (4 KB Brotli); OKLCH + container queries + light-dark() are production-ready in 2026 | | Typography | **Inter + Crimson Pro + Fira Code** | IBM Plex family | All FOSS; pairing tested at NYT/Pudding-grade | | Programmatic charts | **Observable Plot** | Vega-Lite, ECharts | Cleaner defaults than Vega-Lite, ~95% of needs without going to D3, ISC, Bostock-led | | Whiteboard | **Excalidraw** + `excalidraw_export` CLI | tldraw (note: $6k/yr commercial license) | MIT, mature, build-time SVG render works | | Hand-drawn programmatic | **rough.js** (sparingly) | roughViz, chart.xkcd | Only for "this is exploratory / uncertainty implied" framing | | Hand-authored inline SVG | CSS-vars-in-SVG pattern | `` for shared icons | `var(--token)` propagates through inline SVG, giving single design-token surface | | Scrollytelling | **Closeread** (Quarto-native) | Scrollama | Closeread is purpose-built for Quarto; Scrollama (~7 KB) for non-Quarto | ## Critical clarifications (don't skip these) ### "XHTML" in 2026 means semantic HTML5, not strict XHTML Nobody writes literal `application/xhtml+xml` any more. What "elegant XHTML" actually means in modern usage is **well-formed semantic HTML5 enforced by the build tool**. Quarto outputs exactly this — `
`, `