Light mode is a remap of the sixteen EGA slots, not a second stylesheet. Every rule in bbs.css already goes through those variables, so the whole board inverts by redefining them and nothing below has to know. Warm greys on sepia, monochrome. Not an EGA palette and not pretending to be one: the amber-on-paper end of the same machine. Tones are picked by contrast ratio against the ground rather than by eye, and the ordering of the sixteen is preserved, so what was recessive stays recessive: --dgrey quiet, --blue chrome, --yellow the hotkeys, --lred the loudest thing on screen. Freed from EGA fidelity, --dgrey is lifted to 4.5:1 rather than the 2.7:1 its counterpart sits at on black. The switch is a command, not a button, because a board had no widgets. It names where it is going, so it reads [L]ight on a dark screen and [D]ark on a light one and the key moves with the label. L and D were the only two letters free across all 71 pages. It is injected by bbs.js rather than written into the template, so a reader without JS is not offered a switch that cannot work. The logo takes a second set of ramps: on paper presence is ink rather than light, so they run pale to dark and the feet stay the lightest step, which keeps the weight where the dark version puts it. The session's ramp index is shared, so the two themes are the same draw rendered two ways. Dark stays the default and the no-JS result. The preference is in localStorage rather than sessionStorage, since it is a preference and not a welcome screen, and it is applied from <head> before first paint. Also fixes a hardcoded #000 on the guestbook form, which would have been a black box on paper. Verified in a browser: 70 pages and 321 frame rows still exactly 80 columns, the command flips both ways, the ramp follows, and the choice survives a navigation. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| flux.vision | ||
| randogoth.com | ||
| tobias.raayoni-last.com | ||
| .gitignore | ||
| README.md | ||
sites
Three domains, one directory each, one audience each.
| Directory | Domain | Subject | Audience |
|---|---|---|---|
flux.vision/ |
flux.vision | Kiritan Flux: media arts, VJ, performance, installations, 2003-2021 | festival and art world |
tobias.raayoni-last.com/ |
tobias.raayoni-last.com | client work, portfolio, CV | clients, employers, galleries |
randogoth.com/ |
randogoth.com | the technical work, six areas | devs, retro and small-net readers |
They were one site until October 2026. The split is the fix: four audiences were being handed one page, and a page that serves four audiences collapses into the only format that can hold unrelated things, which is a dated list.
sublunar.space is deliberately not here. It is a working blog with nine years and 440 commits of
its own voice, and it keeps its own repo.
Building
All three are Pelican, with no shared build. Each stands alone:
cd flux.vision # or tobias.raayoni-last.com, or randogoth.com
uv run --quiet --with pelican --with markdown -- pelican content -o output -s pelicanconf.py
Each directory has its own README covering its theme, its taxonomy and the traps specific to it.
| articles | theme | notes | |
|---|---|---|---|
flux.vision/ |
90 | flux |
recovered from the Wayback Machine; closed, maintained not updated |
tobias.raayoni-last.com/ |
97 | raayoni |
grid of tiles, light and dark |
randogoth.com/ |
41 | bbs |
an ANSI bulletin board, 80 columns; mc-pelican is the fallback |
Deployment
Built and served on bucur. A push triggers a webhook that builds the changed site and rsyncs it
into place. Content does not trigger a system activation: the site derivations are flake packages,
so a typo costs a Pelican run rather than a nixos-rebuild switch.
Shared conventions
- No em dashes. Commas, colons, full stops or
·. - Flat slugs.
{slug}.htmlon all three. Categories get reworked; slugs should not move. - No
nl2br. The recovered bodies are hard wrapped at about 70 characters, so it turns every source line into a forced break. This has been fixed twice; do not add it back. - Lost images are handled at build time, not in the browser. The references stay in the Markdown
because the reference records what was there;
plugins/lostimages.pystrips them from the output. - Check the built output, not the source. Several bugs here were invisible at a glance and obvious to a counter: forced line breaks that fell near the natural wrap, box drawing a column short, a config change that silently emptied every hotkey.
The working material
The inventory, the recovery pipelines, the pruned articles, the source archives and REFACTOR.md
live outside this repo, at /mnt/data/Backup/sites-restructure-2026-10-05/. A clone is the three
sites, not the argument that produced them.
That backup is worth keeping: the sort is not reproducible from the sites alone. inventory.tsv
records why each of 266 articles went where it did, and _pruned/ is the only record of what was
taken out.