Colophon

What this site
is made of.

How this site is built, what it weighs, and the trade-offs it makes.

Built with

Framework
Astro, static output, with no client-side framework. Four runtime dependencies, three of them Astro's own.
Hosting
Cloudflare Workers serving pre-built assets. The Worker runs only for the contact endpoint, /.well-known/, and requests for /404 itself. The rest is served as static files without invoking it. Apex only, www redirects.
Type
Inter Variable, self-hosted. System monospace for figures and labels, rather than shipping a second face to set a date.
Content
MDX files in the repository. Drafts render only on the dev server, and publishing one is an edit and a deploy. There's no CMS to log into.
Method
Built with AI, for the code and the writing. Dante Lee directs and reviews the work, and he decides what goes live. How the posts are written is on the writing page.

What it weighs

Measured after unused assets are pruned, and compressed the way Cloudflare sends each file. Both sizes are shown because compression makes a site look about a third as heavy. Only the one Inter subset an English page fetches is counted.

The figures include the analytics script Cloudflare adds to each page as it serves it: 31.3 KB, 10.3 KB compressed. That was measured from the live site on 2026-10-11.

PageUncompressedKBCompressedKBRequests
Lightest page/contact/sent/111.868.38
Home/124.972.310
A post/writing/ci-gate-failed-on-success/125.072.38
Heaviest page/work/hillcrest/250.7198.211

What it leaves out

  • No 'unsafe-inline' for scripts. The Content-Security-Policy is generated from the built output on each build, with a SHA-256 hash read off each inline script that exists. A hand-written policy goes out of date when the scripts change.
  • No third-party fonts, scripts, or trackers beyond Cloudflare's analytics and the contact form's bot check, both listed by name in the policy.
  • No second copy of the site. Cloudflare serves a *.workers.dev hostname by default. Until 2026-07-29, this site was crawlable there too.
  • No motion that ignores being asked to stop. Every effect, including the page-to-page morph, is inside a prefers-reduced-motion query.

How it is checked

Ten automated checks can stop a change from going live. Two of them test rendering, in Chrome and in Safari's engine, at widths from 320px to 2560px. The visual matrix checks 532 combinations of page, viewport and engine for sideways overflow and page errors. The layout audit inspects 276 page renders. It looks for text drawn over text, tap targets under 24×24, contrast below WCAG AA, clipped text, narrow measures, and links drawn like their sentence.

Compromises

Typography is Latin-only. Text in other scripts falls back to a system sans. That's fine while the pages are in English.

The policy blocks unhashed inline scripts but allows inline style attributes. Three things in the build can only be written that way. The page-to-page morph names each title in a style attribute. The code blocks set each token's color in one, and the bar figures set their measured widths in one. A browser can't hash an attribute. Inline <style> elements are blocked.

What sends requests to this site

Every request to this domain on one day: the quietest of the last 42 days, with no detectable test traffic from this site. It counts requests, not visitors. Most requests to a small site come from scripts and bots, so this shows the mix.

The day
2026-09-12, 707 requests in twenty-four hours.
Probing
7% of them asked for things that don't exist here: /wp-login.php, /xmlrpc.php, /.env, /database.sql. This site has never run WordPress or PHP; each one is somebody checking whether it does. Probes are counted by path, so this share overlaps the groups below.
Tools
79% came from scripts, crawlers, and clients that don't send a browser's user-agent.
Browsers
10% reported themselves as an ordinary browser. Another 11% reported as Safari. This site's own WebKit tests also report as Safari, and the data can't tell them apart, so that share isn't counted as people.
2026-10-02 · 1,093 requests2026-10-03 · 960 requests2026-10-04 · 1,922 requests2026-10-05 · 1,248 requests2026-10-06 · 787 requests2026-10-07 · 866 requests2026-10-08 · 1,267 requests2026-10-09 · 1,424 requests2026-10-10 · 1,585 requests2026-10-11 · 2,870 requests2026-10-12 · 4,101 requests2026-10-13 · 2,635 requests2026-10-14 · 2,732 requests2026-10-15 · 2,009 requests
2026-10-022026-10-15
How this is counted

14 days on one scale, one bar per day, blank where no day was recorded. Grays run from strongest to faintest: this site's own tests, then Safari or WebKit, then scripts and declared bots. The accent is the sliver reporting as an ordinary browser.

The daily rebuild sorts each request by its path and its reported client, and keeps only the totals. It records no addresses, user-agent strings or other per-visitor details, because a request log is personal data. Cloudflare's own short-lived logs are described on the privacy page. Per-request bot scores are a paid Cloudflare feature, and this site is on the free plan. 83 days are on record.

This connection

Facts about the request that fetched this page are read from Cloudflare's edge when JavaScript is available. The page stores no reading, and shows none if the read fails.

The console

Open DevTools on any page to use these commands. The console lists them too, with their keyboard shortcuts.

  • actium.grid()Toggle the 12-column Swiss spec grid
  • actium.invert()Toggle the light edition
  • actium.ping()Measure edge latency, colo, and your TLS handshake
  • actium.stats()Inspect page DOM, fonts, and render mode
  • actium.contact()Open the contact form
  • actium.lost()Get lost on purpose; the 404 has its own commands
  • actium.gates()See every check and its last result
  • actium.help()Reprint this command index