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:17 +03:00
|
|
|
AUTHOR = 'randogoth'
|
|
|
|
|
SITENAME = 'RANDOGOTH'
|
|
|
|
|
SITEURL = ''
|
|
|
|
|
PATH = 'content'
|
|
|
|
|
TIMEZONE = 'Asia/Jerusalem'
|
|
|
|
|
DEFAULT_LANG = 'en'
|
|
|
|
|
|
|
|
|
|
# An ANSI bulletin board. The TuiCSS theme that came over from TRL was a DOS
|
|
|
|
|
# *application*: grey chrome, dialogs, a menu bar. A board is a different thing,
|
|
|
|
|
# and the one actually wanted here. mc-pelican stays in the tree as the fallback.
|
|
|
|
|
THEME = 'bbs'
|
feat: render randogoth.com as a small-net capsule
A Pelican generator that writes a capsule beside the HTML build: plain
Markdown plus per-directory .itsybitsy.toml sidecars, which a protocol daemon
converts per request to gemtext, XHTML-MP, WML or plain text.
The obstacle was recorded in the README as "smolweb reads YAML frontmatter
while Pelican uses bare Title: lines". Both halves turned out to be wrong:
itsybitsy parses no frontmatter at all, by design, and metadata lives outside
the document. So the transform is not a translation between dialects, it is a
removal, and a protocol daemon stays ignorant of one static generator.
Nothing in plugins/smolnet.py is specific to this site. Every difference is a
setting and every setting has a default, so another site enables it with
PLUGINS = ['smolnet']. It sits at the repo root for the same reason
flux.vision reaches into tobias.raayoni-last.com for lostimages.
Index entries are emitted as link-only paragraphs rather than Markdown lists,
which is not a style choice: the gemtext renderer prints a bare => line for a
paragraph holding nothing but links, and a bullet *and* a => line for a list
item, so a list would publish every entry twice. Gemini clients number link
lines themselves, so the board's dial-an-area-by-number idiom survives into
the capsule without emitting a single bracket. The trade-off is in the
docstring: the text renderer reflows such a run into prose, which costs
nothing here because randogoth.com is not getting Nex or Gopher.
Also drops a Zemanta tracking pixel that came in with a 2012 blog import and
is live on the site today, firing a third-party request on every view of that
article. It would have been worse in the capsule, where an image becomes a
visible link line advertising a dead tracker. It was the only one across all
three sites.
Verified by serving the output with the real daemon: 41 articles, 2 pages, 6
area indexes and an archive, no metadata surviving, no {filename} left,
trl@posteo.net revealed on Connect where the renderer would otherwise have
dropped it with its enclosing HTML, images served as image/png, and the index
rendering as a clean run of => lines in gemtext and as XHTML Mobile over HTTP.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-06 08:24:18 +03:00
|
|
|
PLUGIN_PATHS = ['plugins', '../plugins']
|
|
|
|
|
PLUGINS = ['crtimages', 'smolnet']
|
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:17 +03:00
|
|
|
|
|
|
|
|
# The sections are message areas, numbered so they can be dialled by key the way
|
|
|
|
|
# a board's main menu works. No descriptions: the names are the whole listing,
|
|
|
|
|
# as they were on a real board, and working out what an area holds is the point.
|
|
|
|
|
BBS_AREAS = {
|
|
|
|
|
'RANDOM': 1, 'PLACE': 2, 'MINIMAL': 3,
|
|
|
|
|
'MACHINES': 4, 'GONZO': 5, 'ENDTIMES': 6,
|
|
|
|
|
}
|
|
|
|
|
|
feat: render randogoth.com as a small-net capsule
A Pelican generator that writes a capsule beside the HTML build: plain
Markdown plus per-directory .itsybitsy.toml sidecars, which a protocol daemon
converts per request to gemtext, XHTML-MP, WML or plain text.
The obstacle was recorded in the README as "smolweb reads YAML frontmatter
while Pelican uses bare Title: lines". Both halves turned out to be wrong:
itsybitsy parses no frontmatter at all, by design, and metadata lives outside
the document. So the transform is not a translation between dialects, it is a
removal, and a protocol daemon stays ignorant of one static generator.
Nothing in plugins/smolnet.py is specific to this site. Every difference is a
setting and every setting has a default, so another site enables it with
PLUGINS = ['smolnet']. It sits at the repo root for the same reason
flux.vision reaches into tobias.raayoni-last.com for lostimages.
Index entries are emitted as link-only paragraphs rather than Markdown lists,
which is not a style choice: the gemtext renderer prints a bare => line for a
paragraph holding nothing but links, and a bullet *and* a => line for a list
item, so a list would publish every entry twice. Gemini clients number link
lines themselves, so the board's dial-an-area-by-number idiom survives into
the capsule without emitting a single bracket. The trade-off is in the
docstring: the text renderer reflows such a run into prose, which costs
nothing here because randogoth.com is not getting Nex or Gopher.
Also drops a Zemanta tracking pixel that came in with a 2012 blog import and
is live on the site today, firing a third-party request on every view of that
article. It would have been worse in the capsule, where an image becomes a
visible link line advertising a dead tracker. It was the only one across all
three sites.
Verified by serving the output with the real daemon: 41 articles, 2 pages, 6
area indexes and an archive, no metadata surviving, no {filename} left,
trl@posteo.net revealed on Connect where the renderer would otherwise have
dropped it with its enclosing HTML, images served as image/png, and the index
rendering as a clean run of => lines in gemtext and as XHTML Mobile over HTTP.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-06 08:24:18 +03:00
|
|
|
# The capsule mirrors the board: same areas, same order, same words. Gemini
|
|
|
|
|
# clients number link lines themselves, so an area is still dialled by number
|
|
|
|
|
# over there without the plugin writing a single bracket.
|
|
|
|
|
SMOLNET_SECTION_DIR = 'area'
|
|
|
|
|
SMOLNET_SECTION_ORDER = BBS_AREAS
|
|
|
|
|
SMOLNET_LABELS = {
|
|
|
|
|
'sections': 'Message areas', 'latest': 'Latest messages',
|
|
|
|
|
'archive': 'All messages', 'back': 'Main menu', 'pages': 'System',
|
|
|
|
|
}
|
|
|
|
|
# The address is rot13 in the HTML because of web crawlers. That defence needs
|
|
|
|
|
# JavaScript, which Gemini does not have, and the renderer drops raw HTML, so
|
|
|
|
|
# without this the one thing the Connect page exists to carry would vanish.
|
|
|
|
|
SMOLNET_ROT13_ATTR = 'data-r'
|
|
|
|
|
|
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:17 +03:00
|
|
|
# Articles live flat in content/; assets are carved out of that.
|
|
|
|
|
ARTICLE_PATHS = ['']
|
|
|
|
|
ARTICLE_EXCLUDES = ['pages', 'library', 'images', 'files']
|
|
|
|
|
PAGE_PATHS = ['pages']
|
|
|
|
|
STATIC_PATHS = ['library', 'images', 'files']
|
|
|
|
|
|
|
|
|
|
# Flat slugs, for the reason TRL learned the hard way: sections get reworked and
|
|
|
|
|
# every reassignment moves a URL. The section lives in the listing, not the path.
|
|
|
|
|
ARTICLE_URL = '{slug}.html'
|
|
|
|
|
ARTICLE_SAVE_AS = '{slug}.html'
|
|
|
|
|
PAGE_URL = '{slug}.html'
|
|
|
|
|
PAGE_SAVE_AS = '{slug}.html'
|
|
|
|
|
CATEGORY_URL = 'section/{slug}.html'
|
|
|
|
|
CATEGORY_SAVE_AS = 'section/{slug}.html'
|
|
|
|
|
CATEGORIES_SAVE_AS = 'sections.html'
|
|
|
|
|
TAG_URL = 'tag/{slug}.html'
|
|
|
|
|
TAG_SAVE_AS = 'tag/{slug}.html'
|
|
|
|
|
TAGS_SAVE_AS = 'tags.html'
|
|
|
|
|
ARCHIVES_SAVE_AS = 'archives.html'
|
|
|
|
|
AUTHOR_SAVE_AS = ''
|
|
|
|
|
AUTHORS_SAVE_AS = ''
|
|
|
|
|
|
|
|
|
|
# Unlike the other two sites, this one is a blog, so it is paginated and it has
|
|
|
|
|
# feeds. People should be able to subscribe to a devlog without visiting it.
|
|
|
|
|
DEFAULT_PAGINATION = 15
|
|
|
|
|
FEED_ALL_ATOM = 'feeds/all.atom.xml'
|
|
|
|
|
FEED_ALL_RSS = 'feeds/all.rss.xml'
|
|
|
|
|
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml'
|
|
|
|
|
CATEGORY_FEED_RSS = 'feeds/{slug}.rss.xml'
|
|
|
|
|
TRANSLATION_FEED_ATOM = None
|
|
|
|
|
AUTHOR_FEED_ATOM = None
|
|
|
|
|
AUTHOR_FEED_RSS = None
|
|
|
|
|
|
|
|
|
|
# The eight sections are the navigation, the way a file manager shows directories.
|
|
|
|
|
DISPLAY_CATEGORIES_ON_MENU = True
|
|
|
|
|
DISPLAY_PAGES_ON_MENU = False
|
|
|
|
|
MENUITEMS = [
|
|
|
|
|
('ARCHIVES', '/archives.html'),
|
|
|
|
|
('TAGS', '/tags.html'),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# No nl2br. The recovered bodies are hard wrapped at roughly 70 characters, so it
|
|
|
|
|
# turns every source line into a forced break and the prose stops reflowing.
|
|
|
|
|
MARKDOWN = {
|
|
|
|
|
'extension_configs': {
|
|
|
|
|
'markdown.extensions.tables': {},
|
|
|
|
|
'markdown.extensions.footnotes': {},
|
|
|
|
|
'markdown.extensions.codehilite': {'css_class': 'highlight'},
|
|
|
|
|
'markdown.extensions.extra': {},
|
|
|
|
|
},
|
|
|
|
|
'output_format': 'html5',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DELETE_OUTPUT_DIRECTORY = True
|
|
|
|
|
CACHE_CONTENT = False
|