sites/randogoth.com/README.md
randogoth 8505b7e9e0 Three sites, one directory each
flux.vision, tobias.raayoni-last.com and randogoth.com. They were one site until
October 2026, serving four audiences from a single dated list, which is the only
format that can hold unrelated things at once.

flux.vision is recovered from the Wayback Machine, where it had sat since being
deleted in 2021: 90 articles, closed and maintained rather than updated.
tobias.raayoni-last.com is the professional record, 97 articles back to 1999.
randogoth.com is the technical work, 41 articles across six areas, served as an
ANSI bulletin board.

History starts here deliberately. The development history, the 266-row inventory
that records why each article went where it did, the Wayback pipelines, the
pruned articles, the source archives and the full-size images are kept beside
the repo rather than in it, so a clone is the web presence and not the argument
that produced it. REFACTOR.md is gitignored for the same reason. See README.md
for where that material lives, and keep it: the sort is not reproducible from
these three directories alone.

Each site documents itself in its own README, including the traps that cost time
and look like nothing when you get them wrong.
2026-10-05 20:54:45 +03:00

113 lines
6 KiB
Markdown

# 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
```sh
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.