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. 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. Since July 2026 the deploy is a CI pipeline: every push to main runs the type-check, the full guard suite below, and the build, then ships the result. The push itself stays a deliberate human act, so nothing reaches the live site without a person deciding it should.
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 and shipped log on /changelog are 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 /changelog renders. Embed it anywhere. Each embed links back here.
Markdown
[](https://parallelogramist.com/changelog/)
HTML
<a href="https://parallelogramist.com/changelog/"><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 status data /changelog renders.
/now.json · Now, as JSON
A verbatim, byte-derived mirror of the hand-curated status feed behind the /changelog snapshot. 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.
/writing/<post>/index.md · Raw Markdown per post
Every writing post 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.
/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.