sites/randogoth.com
randogoth 4efe975599 fix: recover one hotlinked image, retire the other eleven
Twelve images across seven articles were hotlinked from servers that no longer
exist, so they were broken on the live sites. Checked every one against the
Wayback Machine, patiently enough to trust the answer: an earlier pass appeared
to find seven, but that was a test treating an empty response as a hit.

One survives. visualberlin.org's p1010789, a 2011 capture of the projector set
up against Mannheim city hall during the Flimmerkiste wildscreening, is now a
local asset in flux.vision/content/library/ and the reference points at it.

The other eleven were never captured. Both dead domains are archived, so this is
not a gap in coverage: of 8,438 visualberlin.org URLs and 204 for mutanten.org,
only that one image is there. mutanten.org's archive does not reach back to its
fp-content era at all, which is where the Logan's Run stills lived.

So lostimages.py learns about dead hosts, which it matches rather than fetching,
because a build must not depend on the network and a dead host is a fact about
the world rather than about the document. The references stay in the Markdown,
as the existing ones do: the reference records what was there.

It matters more on the capsule than on the web. A browser shows a broken image
as a silent gap, but gemtext has no inline images, so every one becomes a
visible => link line and the page would advertise a dead host as somewhere worth
going. smolnet.py therefore strips them too, reading the same host list, since
it works on the Markdown source and never sees Pelican's output.

lostimages.py moves to the repo-level plugins/ directory beside smolnet. It was
shared already, with flux.vision reaching into tobias.raayoni-last.com for it,
and randogoth.com now needs it too; a shared plugin living inside one site was
the wrong shape for three consumers.

Left alone deliberately: the two mutanten.org links in mutantenkino-website.md.
That entry is about having built the site, so the link is its subject rather
than decoration, and a dead link does not make the record wrong.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-06 11:04:28 +03:00
..
bbs feat: add favicons for all three sites 2026-10-06 09:04:50 +03:00
content feat: render randogoth.com as a small-net capsule 2026-10-06 08:24:18 +03:00
mc-pelican Three sites, one directory each 2026-10-05 20:54:45 +03:00
plugins Three sites, one directory each 2026-10-05 20:54:45 +03:00
pelicanconf.py fix: recover one hotlinked image, retire the other eleven 2026-10-06 11:04:28 +03:00
README.md Three sites, one directory each 2026-10-05 20:54:45 +03:00

randogoth.com, the technical work

A devlog and project index. 40 articles spanning 2004 to 2026, which makes this the only one of the three sites with continuous coverage. See REFACTOR.md §D in the working material.

A Pelican site on the bbs theme: an ANSI bulletin board, 80 columns of CP437 on black in the 16 colour EGA palette. mc-pelican is still in the tree as the fallback. It came over from tobias.raayoni-last.com, where that aesthetic never belonged, but it is a DOS application, Turbo Vision chrome, and a board is a different object.

Building

uv run --quiet --with pelican --with markdown -- pelican content -o output -s pelicanconf.py

Unlike the other two sites this one is a blog, so it is paginated and it has feeds.

Message areas

Derived from what is actually written, not from the repo list in REFACTOR.md §D and not from the inherited tags, which encoded three different sites' filing decisions. The numbers are the hotkeys at the prompt, so reordering them in BBS_AREAS reorders the menu and the keys together.

# Area Holds n
1 RANDOM generating and testing entropy. The number, not the place 4
2 PLACE what a location is and how you describe one: theory, then the code 7
3 MINIMAL the least apparatus that does the job: small interfaces, small networks 7
4 MACHINES the device itself: bought, broken, repaired, built, handed on 6
5 GONZO first-person reportage, exaggerated on purpose. A declared method 7
6 ENDTIMES post-apocalyptic film and games, 2008 to 2016 9

There is no miscellany. Everything that was in ODDS found a home or was pruned, which is the test of whether a taxonomy describes the work: a residue area means the categories are wrong, not that the work is untidy.

MINIMAL replaced TXT and absorbed INFRA. Text was the medium both of them had in common, not the subject: what actually connects a FreeDOS neofetch port, a launcher with no widgets, and a cryptographic mail protocol is that each is the least apparatus that does the job. The small-net work lands here when it is written, which is also why the area is not called after the medium again.

The prompt

Numbers are scoped to the screen, which is how a board resolved the ambiguity: at the main menu they select an area, inside an area they select a message, and no two things on one screen claim the same key. Anything typeable carries data-key and the bracket chrome that marks it, and the key map is built from the DOM so a template cannot drift out of sync with the handler.

Messages are numbered from the oldest, so publishing never renumbers anything.

Two traps, both of which look like nothing when you get them wrong:

  • bbs.js sits in <head> so the palette applies before first paint. The command handler therefore has to wait for DOMContentLoaded, or it binds nothing and the page looks identical.
  • A number that can no longer match anything must be dropped. ODDS has eleven messages, so 1 waits in case 11 follows, and without the reset a mistyped 19 sticks at the prompt forever.

The masthead

TheDraw's Syndicate, found by sweeping 3,711 fonts across 1,198 .tdf files for ones that render RANDOGOTH inside 80 columns. 691 do; 73 at six rows or more. It is baked in as static text: the TDF tooling was scaffolding for finding it, not something the site carries.

It uses three tones across both colour planes. ANSI paints solid areas as a space with a background, and 247 of its 355 inked cells are background rather than foreground, so anything that maps only foregrounds loses most of the mass and the letters come out hollow.

The tones are classes, so a ramp is three custom properties. bbs.js draws one of fifteen per session, held in sessionStorage. None of the ramps bottoms out on the frame blue, which would dissolve the logo's feet into the chrome.

Layout

Every frame is laid out by column arithmetic and checked against the built output: strip the markup, count the visible characters, assert 80. That has caught real bugs twice, once where header dashes were counted including their own HTML markup, and once where a config change emptied every hotkey and shortened 40 rows by one character.

line-height is exactly 1 for the chrome, because each box row is its own <pre> and any leading at all stops the vertical box-drawing characters meeting. Prose takes its leading back on .msgbody.

Equal columns are impossible at this width: three verticals plus symmetric padding leave an odd number of cells to split, so the left column is 37 and the right 36.

Assets

content/library/ 62 files, content/images/ 11, content/files/ 1. The images arrived late: their articles moved here in the split but the files stayed behind in TRL's content/images/. See IMAGES.md in the working material.

Not planned in yet

A small-net server over the same content, so the Markdown also resolves over Gemini, Spartan, Nex, Gopher and WAP. The multi-protocol publishing is subject matter for this site, not just plumbing. Deferred because smolweb is being replaced by a Rust implementation.

One incompatibility to resolve when it lands: smolweb reads YAML-style --- frontmatter, while Pelican content here uses bare Title: lines with no delimiters.

Still to write

The guestbook. The page says so plainly rather than offering a form that goes nowhere. Deferred until the writing is further along: a guestbook wants something worth signing under. When it lands it is self hosted on bucur alongside Forgejo, not a third party form service, which would sit badly next to INFRA and practical-privacy.

The project pages. The articles here are writing; the areas also want one page per project, undated, updated as the thing changes, which is what distinguishes them from dated posts. Several projects already have their own domains (jourjutsu.com, smol.place, zonetoast.com, nmns.place), so those are pointers rather than documentation.