/colophon
Москва, 2025–2026
This is a static site, served from a VPS. I try to follow IndieWeb principles and standards where possible and practical: the homepage is an h-feed, there’s a minimal h-card, I send and receive (but don’t automatically re-publish) webmentions.
Layout only tested in Firefox (on Linux and Android).
I use a self-written HTML post-processor: it reads the input HTML files, does boring HTML stuff, extracts an RSS feed and single-post pages, and writes a processed file to disk.
Most SSGs fail at very basic things. E. g., <img>
tags should have height and width attributes,
but noone wants to write that by hand. To do that automatically, you
need to parse HTML, find the <img> tags, get image
files, and find their dimensions. You can’t wrangle Markdown and
text-based templates in a way that will make this happen.
honorable mention to Soupault, which is an HTML postprocessor, and can do these things. However, to use it productively, you need to know OCaml, Lua, and its seemingly Turing-complete configuration file format.
For local use, you want relative URLs in hrefs and
srcs. In RSS, URLs should be absolute. Again, most SSGs
fail at this.
So I have a Node program (because JS has good DOM APIs) that picks up
a folder of TypeScript files implementing single-feature processors, and
applies them. I write HTML, it fixes it. Processors can define custom
tags, or attributes; so I can do
<div x-filter="pandoc"></div> and it works. Or
<embed src="aaa.md" x-filter="pandoc" />. And I get
custom tags, like
<micro-post date="..." id="...">hey</micro-post>.
Or <toc></toc>.
I wrote the first ~200 lines myself to establish structure, but the next ~800 are slop. So there’s no reason to publish, this colophon is probably enough to get Opus to one-shot something like this.