Colophon

This site began in March 2014 as a Jekyll blog on GitHub Pages, and the first commit says “Getting Jekyll running.” It’s still Jekyll, now 4.4, with 69 posts and about 150 pages. Everything else has been rewritten at least once.

The pages

The theme is mine. One stylesheet, no framework, no build step for CSS. Layout uses container queries, the dark theme follows your system unless you pick one, and the animations stop if you ask your system for reduced motion.

The JavaScript is plain. There’s no bundler and no library. Each page loads only the script it needs. The Listening page used to run on AngularJS, which I have since removed. The header record, the scratching on the Listening page and the birthday timeline are small hand-written scripts.

The type is self-hosted. DM Sans for the interface and Newsreader for reading, as four font files of about 280 KB in all. I trimmed them to the weights the site uses, which cut them by about a third. Nothing is fetched from Google.

Search has no server. Pagefind builds a static index when the site is built, and your browser queries it directly.

Share cards are drawn at build time. Each post and page gets a preview image, drawn with Satori and rendered to PNG with resvg.

The music and books

The Listening, Music, Reading and year pages show live data, and a second program supplies it. It’s a TypeScript service on Cloudflare Workers at api.anthonysciamanna.com. It talks to Last.fm for my listening, MusicBrainz for credits and release dates, Deezer for artist photos and Hardcover for books. Results are kept in Cloudflare KV, and a job that runs every two minutes fills in slow lookups a little at a time, so no visitor waits on another service. Your browser only ever talks to my service.

It has its own tests, written first, using Vitest.

Shipping it

Both parts live in one repository. A push to the main branch runs the checks: the site is built, every link is checked with html-proofer, and the search index is rebuilt. If they pass, Cloudflare serves the new version a couple of minutes later. When a change touches both parts, the service goes first so a page never ships before the data it needs.

The site is served by Cloudflare from static files. I don’t run a server of my own, and there are no analytics.

Why Jekyll

In 2014 it was a great choice. GitHub Pages built Jekyll sites for free, which made getting a blog online a simple job. There are many more options now, and I’ve looked at them, but I’ve never found a reason to switch. Jekyll still does what I need: it turns a folder of text into pages that last. A post from 2014 is still here, in the same plain format.

The parts that change, like my listening and my reading, live in the service. The part that should stay put, my writing, stays in plain files.