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:

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.

parallelogramist status

Markdown

[![parallelogramist status](https://parallelogramist.com/badge.svg)](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.