Colophon
How this site is put together, what keeps it honest, and the small "API of me" it exposes on top of the normal pages.
Stack
A static Astro site — content collections for writing and project write-ups, MDX for anything that needs a little more than prose, no client framework shipped unless a page actually needs interactivity (the /learn simulators are the one place it does). Static output means there's no server to keep patched, no database to back up, and no request path slower than a CDN edge cache. Deployed as a fully static site to Cloudflare Pages, no third-party analytics or trackers.
A mounted curriculum
The /learn section — lessons, glossary, simulators — isn't authored in this repo. It's a sibling curriculum, mounted in at build time as its own content collection. This site is the delivery surface; the curriculum is maintained independently and just gets pulled in on every build, the same way any other content collection does.
Deny-by-default publishing
This is a build-in-public site sitting on top of work that mostly isn't public. The rule that keeps that safe is simple to state and load-bearing in practice: when in doubt, it stays private. Nothing here is a live feed off anything else — the status snapshot on /now, the changelog, and the timeline are all hand-curated, redacted projections, reviewed before they're ever committed. There's no path from "something happened privately" to "it shows up here" that skips a human decision.
The guard suite
That rule is backed by an automated test suite that runs before anything ships, not just a policy on paper:
- Redaction. Every tracked file is scanned for a fixed list of never-public patterns, and the curated public data files are validated as strict, deny-by-default key whitelists — an unexpected field fails the build, it doesn't just get a warning.
- Link safety. A project card can point at a live deploy or a repo only once that specific target has been explicitly allow-listed — nothing links out by accident.
- Accessibility. Every built page is checked for one
<h1>, no skipped heading levels, alt text on every image, a working skip-link, and visible keyboard focus. - Canonical URLs & metadata. Every page's canonical link, sitemap entry, Open Graph tags, and structured data are checked against what the page actually renders, so search engines and link unfurls never see something the page doesn't.
All of it lives in this repo's own tests/ directory and runs on every change —
the guardrails are as public as the site they protect.
Status badge
Regenerates at every build from the same whitelisted status feed /now renders. Embed it anywhere — each embed links back here.
Markdown
[](https://parallelogramist.com/now/)
HTML
<a href="https://parallelogramist.com/now/"><img src="https://parallelogramist.com/badge.svg" alt="parallelogramist status" /></a>
Machine-readable endpoints
/badge.svg — Status badge
An embeddable SVG badge showing what's currently building — regenerated at build time from the same curated /now data.
/now.json — Now, as JSON
A verbatim, byte-derived mirror of the hand-curated status feed behind /now — build a widget on top of it.
/ships.json — Ships, as JSON
A verbatim, byte-derived mirror of the changelog behind /changelog — the same milestones as /ships.xml, in JSON.
/<post-or-lesson>/index.md — Raw Markdown per page
Every writing post and every lesson also serves its own clean markdown source — the same bytes the page's “Copy as Markdown” button copies.
/llms.txt — llms.txt
The llmstxt.org index: titles and links to every page, for an IDE agent orienting quickly.
/llms-full.txt — llms-full.txt
The full-content companion to llms.txt — every published page's body, expanded inline, in one fetch.
/rss.xml — Writing feed
Subscribe to new essays and notes.
/ships.xml — Ships feed
Subscribe to the changelog.
/learn/rss.xml — Lessons feed
Subscribe to new lessons.
/sitemap-index.xml — Sitemap
The machine-readable page index.
What it doesn't do
No trackers, no analytics beacons, no cookies, no third-party scripts. Nothing here profiles a reader — the site doesn't know who you are, and it doesn't try to find out.
Curious about the scale of what's actually here? See /stats — every number on that page is recomputed from the content itself at build time, never hand-typed.