System
What this thing is made of, for anyone who wants to know whether it is real.
The grid
columns 80 fixed
rows 25 fixed
cells 2000
cell 8x16 pixels, at the font's native size
palette 16
The grid does not change. On a 4K panel and on a phone the system is 80 by 25; what changes is how many device pixels one cell occupies. There is no fit function anywhere in this codebase that reports a column count back from the viewport, and there is a test that fails if a screen ever composes past cell 80.
The fit is done by choosing a font size, not by scaling: a transform would resample every glyph, and the text is noticeably sharper without one.
The grid fills the window. It cannot fill it exactly — 80x25 is proportioned about 1.6 to 1 and a monitor is nearer 1.9 — and no single size both fills the screen and keeps the type small, so that trade is yours:
zoom out one step smaller
zoom in one step larger
zoom 70 seventy percent of the window
zoom reset fill it again
The choice is remembered. What never changes is the 80 by 25.
The font
WebPlus IBM VGA 8x16, from The Ultimate Oldschool PC Font Pack by VileR
(int10h.org), under CC BY-SA 4.0 and redistributed unmodified. It is the face
an IBM PC drew text with in 80x25 mode, recovered and reconstructed from the
hardware.
The "Plus" charset rather than the pure CP437 one, for a specific reason: CP437
has ç and á but no ã. That is why a Brazilian reading a board in 1994 saw
cora‡Æo, and it is not a bug worth reproducing.
Width
Nothing here measures text with string.length. Horizontal space is measured
in cells, taking account of grapheme clusters, combining marks, East Asian
double-width characters, and ANSI escape sequences that occupy no space at all.
That is why coração and 日本語 both land where they should.
The parser
The screen is fed an ANSI byte stream and understands the subset that this
system emits and that classic .ANS art uses: SGR colour and attributes,
cursor movement, erase in line and display, save and restore. Anything it does
not recognise is dropped rather than guessed at.
The shell
RunawayShell. Commands are entries in a table. There is no eval, no host
process, no socket, and no path from anything typed here to anything running
anywhere. The filesystem is a tree of objects built when the site was compiled.
If a command is not in the table, the answer is no.
The content
Markdown files in a repository, parsed to an AST at build time and rendered to terminal lines: headings become rules, lists become bullets with hanging indents, links become numbered references with a table at the end, code becomes a railed block that is never re-wrapped.
The art
Original textmode work, authored as data so that its width can be checked by the same code that measures everything else. Third-party pieces carry a registry entry naming the artist, their group and the terms — and if the terms are unclear, the piece is marked reference-only and does not ship.
SAUCE records are read and kept.
Underneath
A static site. Every entry has its own URL and its own HTML, every list has a feed, and the sitemap is real. The terminal is the interface, not an excuse to break the web.
astro static build, real routes
typescript the whole system
no backend nothing to run, nothing to breach
no analytics nothing to collect
Themes
theme dos the default: IBM colours on black
theme amber monochrome amber
theme green monochrome P1 phosphor
theme mono white on black, no colour at all
Every screen is designed to be legible in mono. Colour is emphasis here, not
information.