KN-86 Inspiration Set
This folder is reference material, not engineering spec. The aim is to give every future spec / ADR / design conversation a shared corpus to point at — so “make it feel like X” lands with the same meaning across writers. Nothing here is a committed feature; promotion to a spec or ADR is a separate step.
The folder lives at the repo root (outside docs/) so it isn’t rendered by the Starlight sync (scripts/sync-from-docs.mjs) into the four-pillar reference site — but it is versioned in git and travels with the repo.
The set is organized in four groupings here in inspiration/ plus two sibling folders for build- and research-level references:
- Batch 1 — TUI software references. UX patterns, layout discipline, resilience instincts.
- Batch 2 — Hardware and aesthetic references. Physical devices, community moodboards, palette resources for KN-86’s visual identity, form factor, color story.
- Batch 3 — TUI apps and retro software. The contemporary keyboard-driven music players, dashboards, and recreations that define KN-86’s UX bar, plus the foundational retro-software touchstones (VisiCalc, Civilization 1991, Gorillas QBASIC) that are the historical anchors.
- Sister-product research — Design references for KN-9x products other than KN-86 (the KN-90S Statline, KN-90T Toneline, KN-92 Gridline).
Sibling folder ../prototype/ carries concrete build references — the TUI frameworks and libraries that are candidate tech-stack choices (Bubble Tea, Lip Gloss, termbox2, asciinator) plus the physical-build hardware references (QRPπ, Pelican 1170 print models, the Printables cyberdeck search).
Sibling folder ../research/ carries the Batch 4 implementation-technique references — TUI widget libraries (termui, blessed-contrib), minimalist C rendering cores (tuibox), the Lisp-to-terminal bridge (cl-termbox2), the “make a Lisp” blueprints (mal, BuildYourOwnLisp), Emacs-derived keyboard philosophy (EXWM, webmacs, xiki, history.el, writeroom-mode, emacs-request, pallet), retro effects (BOOTSTRA.386, NES.css, no-more-secrets, loopy), and runtime patterns (game-programming-patterns).
The three-folder split: inspiration tells you what the device should feel like; prototype tells you what to build it from; research tells you how to build the pieces in between (the rendering pipeline, the scripting layer, the keyboard model, the signature effects, the runtime patterns).
Batch 5 records a major hardware-path decision: the KN-86 will use a Ferris Sweep rather than a fully custom keyboard. See ../prototype/keyboard-decision.md for the decision and its rationale. The Batch 5 entries add the Sweep (../prototype/ferris-sweep.md) and the holykeebs Buyer’s Guide (../prototype/holykeebs-buyers-guide.md) to the build path; archive the custom-keyboard knowledge (GOLEM hub, plate manufacturing, KMK firmware, KMK guide, universal60plate) to research/ as background; and add three cyberdeck/macropad STL references to inspiration/ for shell aesthetic (Adamow cyberdeck, TechNIK cyberdeck, Stream Deck macropad).
Batch 6 introduces a fourth sibling folder, ../effect/ — visual-effect / rendering-technique references and KN-86-internal specs. The central deliverable is the KN-86 ASCII Effect Spec distilled from react-video-ascii’s prop matrix and libcaca’s engine reference. The four-folder split now reads inspiration (feel) / prototype (build) / research (how) / effect (visual-effect grammar). Batch 6 also adds two Ferris Sweep hardware reinforcements to prototype/ — a printable case for the Sweep v2 and an ergonomically sculpted Choc keycap set — confirming the Batch-5 keyboard decision with concrete supporting parts.
Batch 1 — TUI references
Section titled “Batch 1 — TUI references”| Project | Tech | One-line | File |
|---|---|---|---|
| PulseDeck | Rust / Ratatui | Retrowave terminal radio player with a cassette-deck UI. | pulsedeck.md |
| Gloomberb | TypeScript / OpenTUI | Bloomberg-style finance terminal with a mnemonic command bar. | gloomberb.md |
| NetWatch | Rust | Network-forensics TUI with a nine-tab numbered dashboard. | netwatch.md |
| Golazo | Go / Charm stack | Live football-match TUI built around a master/detail + headline-scoreline pattern. | golazo.md |
| Perkins | Go | Braille-character pixel-art editor with sub-cell resolution and a ? help overlay. | perkins.md |
| BAE | Python | Minimal two-column bash-alias editor — friction-removal as a feature. | bae.md |
| Cowsay in C++ | C++ | Classic cowsay port — captured for the ASCII speech-bubble primitive only. | cowsay-cpp.md |
| OpenTUI | Zig core + TS bindings | TUI framework (the substrate for Gloomberb and OpenCode), evaluated as a potential KN-86 foundation. | opentui.md |
| Zork | MDL (Lisp) → Z-machine bytecode | The 1980 Infocom interactive-fiction archetype — the historical precedent for Lisp-authored carts on a portable bytecode VM. | zork.md |
| Vehicle TUI Concept | Anonymous community concept image | TUI applied to a fixed-envelope automotive infotainment screen — the closest visual analogue to KN-86’s own situation (a TUI that is the product UI). | vehicle-tui-concept.md |
Batch 2 — Hardware & aesthetic references (KN-86)
Section titled “Batch 2 — Hardware & aesthetic references (KN-86)”| Reference | Type | One-line | File |
|---|---|---|---|
| Penkesu Computer | Open-source hardware | Pi Zero 2 W + 1280×400 ultrawide + 48-key ortholinear Kailh Choc handheld in a GBA-SP-hinged off-white clamshell. | penkesu.md |
| The Cyberdeck Cafe | Community gallery / blog | The cyberdeck-builder scene’s de facto moodboard — neon-on-dark, rugged panels, “Surviving the Sprawl” lifestyle posts. | cyberdeck-cafe.md |
| Casio Organizer Retrofit | Hackaday article / build | 1995 Casio SF-5580 retrofitted with a Pi Zero + 480×800 LCD + Pico-driven 82-key membrane. Function-key-as-domain idiom. | casio-organizer-retrofit.md |
| OS Models | Pixel-art / palette reference | Imgur album of animated OS-themed Python-TUI palette demos. Named palettes, ANSI grids, color-picker UIs, amber-on-black. | os-models.md |
Batch 3 — TUI apps & retro software
Section titled “Batch 3 — TUI apps & retro software”Contemporary TUI applications worth studying for UX, plus the historical software anchors that established the keyboard-first idioms KN-86 inherits from. Pairs with the prototype-tech-stack candidates in ../prototype/.
Contemporary TUI apps
Section titled “Contemporary TUI apps”| Reference | Tech | One-line | File |
|---|---|---|---|
| rs-pug | Rust / Ratatui | YouTube/SoundCloud/local music player with Lua plugins, 5 JSON themes, SQLite storage, Smart Queue autoplay. | rs-pug.md |
| audium | Rust / Ratatui | Keyboard-first music player; 15 themes with live preview + transparency, plain-JSON portable library, LRC lyrics overlay. | audium.md |
| cliamp | Go / Bubble Tea | Winamp-inspired terminal music player with real spectrum visualizer, parametric EQ, Lua plugins. | cliamp.md |
| AetherTune | Rust / Ratatui | Internet radio TUI with real 16-band FFT visualizer (~94 fps), CRT boot/power-off animations, 8 themes including default CRT, fully remappable keybinds. | aethertune.md |
| octoscope | Go / Bubble Tea | Tabbed auto-refreshing GitHub dashboard. 7 themes including phosphor and amber CRT — direct lineage for KN-86’s amber. Drill-in detail views, live “change pulse” border flashes. | octoscope.md |
Retro / historical software (UX touchstones — referenced not run)
Section titled “Retro / historical software (UX touchstones — referenced not run)”| Reference | Era | One-line | File |
|---|---|---|---|
| l123 | Modern (recreates 1993) | Faithful Rust recreation of Lotus 1-2-3 R3.4a for DOS — slash menus, three-line control panel, 13 live modes, first-character input rule, F-key workflow, optional DOS/green/amber CRT themes, modern .xlsx engine underneath. Single strongest keyboard-first interaction-model reference in the entire corpus. | l123.md |
| VisiCalc | 1979 | The original spreadsheet — keyboard-driven grid UI archetype. | visicalc-archive.md |
| Sid Meier’s Civilization | 1991 | Dense 16-color DOS strategy UI — information-density discipline. | civilization-1991.md |
| Gorillas QBASIC | 1990 | Bundled with MS-DOS QBASIC; chunky-DOS-game aesthetic + “source code shipped with the app” learnability model. | gorillas-qbasic.md |
Retro music-hardware aesthetic
Section titled “Retro music-hardware aesthetic”| Reference | Type | One-line | File |
|---|---|---|---|
| 4TRK | Compact desktop music workstation | Tracker / groovebox music workstation — 8 drum + 3 flex tracks, tape FX, many themes + theme editor, dual screen modes (studio 640 / classic 320), deep CRT effects. Strongest single aesthetic match for KN-86’s Deckline identity. | 4trk.md |
| x0xb0x Synth Kit | DIY hardware synth | TB-303 clone PCB kit by Ladyada (Limor Fried) — DIY-kit / open-hardware ethos and panel/PCB aesthetic lineage. | x0xb0x.md |
Batch 5 — Hardware build decision (cyberdeck STLs + macropad)
Section titled “Batch 5 — Hardware build decision (cyberdeck STLs + macropad)”The Batch 5 aesthetic references — printable STL cyberdecks and a macropad — that inform the shell language the KN-86 enclosure should land in. The actual build-path decisions and the archived custom-keyboard knowledge live in ../prototype/ and ../research/ respectively.
| Reference | Type | One-line | File |
|---|---|---|---|
| My Cyberdeck (Adamow) | Free Printables STL | Tactical-cyberpunk silhouette STL; reference for the KN-86 Pelican-1170 bezel insert aesthetic. | cyberdeck-adamow.md |
| TechNIK Cyberdeck (Nik Reitmann) | Free Printables STL | Alternate-silhouette cyberdeck — different hinge geometry, different screen-mount; the second of two STL references that triangulate the KN-86 shell aesthetic. | cyberdeck-technik.md |
| Stream Deck / Macro Keyboard (Dante) | Free Printables STL | Auxiliary macropad form-factor; optional v2+ accessory alongside the Ferris Sweep, bound to KN-86-application verbs. | stream-deck-macropad.md |
Batch 7 — Tactical sports sims + database UX archetype (2026-06-07)
Section titled “Batch 7 — Tactical sports sims + database UX archetype (2026-06-07)”Three inspiration entries from Batch 7 (../synthesis.md §10): two tactical OODA-loop football sims that cluster with the existing Strat-O-Matic CFB as KN-90S Statline inputs, plus a 1988 menu-driven database tool that doubles as a candidate KN-9x “DM Sidearm” sister-product concept.
| Reference | Era / Publisher | One-line | File |
|---|---|---|---|
| NFL Challenge | 1985 / Xor Corporation | Earliest mature tactical OODA football sim. Menu-driven play-calling, text play-by-play + minimal X’s-and-O’s, editable plain-text rosters. Historical anchor of the tactical-sports-sim cluster. | nfl-challenge.md |
| NFL Pro League Football | 1991 / Micro Sports | Refined tactical OODA UX — formation grid × play menu call-sheet. Reads cleanly as a screen-design-rule reference. | nfl-pro-league-1991.md |
| Dungeon Master’s Assistant Vol I | 1988 / SSI/TSR | Menu-driven D&D-DM database tool — 1000+ encounters, 1300+ monsters, editable. UI archetype for KN-86 cart database surfaces (AUDIT, The Vault, Black Ledger). Also a candidate KN-9x “DM Sidearm” sister-product concept. | dungeon-masters-assistant.md |
Batch 8 — Deckline-core TUI corpus (2026-06-12)
Section titled “Batch 8 — Deckline-core TUI corpus (2026-06-12)”The largest single capture: 49 production TUIs across inspiration/, research/, and effect/, distilled into two synthesis docs — ../synthesis-batch8.md (UI pattern catalog / single-color adaptation / ambient mode / LISP integration) and ../synthesis-batch8-architecture.md (library shortlist verdict + (draw-keyboard) / (draw-framebuffer) proposals + libuv pattern-only). The 36 inspiration/ entries are grouped by cluster below; the research/ and effect/ entries live in their sibling indexes (../research/index.md, ../effect/index.md). Canon throughout: 128×75 per ADR-0027.
Data / grid / table
Section titled “Data / grid / table”| Reference | Tech | One-line | File |
|---|---|---|---|
| csvlens | Rust | less-style CSV viewer — read-only table rendering + selection-mode cycling + frozen columns. | csvlens.md |
| sc-im | C / ncurses + Lua | Vim-modal spreadsheet with an embedded Lua interpreter driving the grid — the architecture anchor for “how a scripting language wires into a cell-grid app.” | sc-im.md |
| sheetsui | Rust / Ratatui | Console spreadsheet (sc-im-inspired) — the clean engine/UI split reference (ironcalc engine under a Ratatui front-end). | sheetsui.md |
| VisiData | Python | The fullest terminal tabular multitool — typed-column indicators, sheet-stack navigation, transformation pipeline. | visidata.md |
| logradar | Rust | Multi-source log-stream TUI — the corpus’s highest single-color value: Unicode-block sparklines + glyph status icons + a named-color-role (Mono) theme. | logradar.md |
Productivity / calendar
Section titled “Productivity / calendar”| Reference | Tech | One-line | File |
|---|---|---|---|
| caps-log | C++ | Terminal journaling on a calendar — the cleanest multi-panel calendar layout + six named border styles. | caps-log.md |
| calcure | Python | Calendar + task TUI — month-grid + task-panel split, icon-from-keyword convention. | calcure.md |
| chronos | Go / Huh | Vim calendar with a zoomable intraday time-grid — the batch’s density-control reference (zoom-as-row-semantics) + form-based event editing. | chronos.md |
| clipse | Go / Bubble Tea | Clipboard-manager TUI — the list + preview-pane + top-filter pattern and a clean JSON theme schema. | clipse.md |
| mynav | Go | Workspace/session navigator — two-panel navigator + live-preview launcher + breadcrumb hierarchy. | mynav.md |
| mcfly | Rust | Neural-ranked shell-history search — the full-screen ranked-result overlay (the command-palette pattern). | mcfly.md |
Readers / browsers
Section titled “Readers / browsers”| Reference | Tech | One-line | File |
|---|---|---|---|
| hackernews-TUI | Rust | Terminal Hacker News browser — the cleanest hierarchical drill-in/back-out nav + link-overlay reading. | hackernews-tui.md |
| newsboat | C++ | Terminal RSS/Atom reader — 3-level list→item→reader hierarchy, unread badges, filter-query language. | newsboat.md |
| w3m | C | Text-mode web browser + pager — HTML→text table/frame rendering in a constrained grid; inline-image protocol concept. | w3m.md |
| browsh | Go / Firefox | Text-mode browser rendering full web pages — the half-block pixel-rendering reference (brightness per half-cell). | browsh.md |
| bookokrat | Rust | Terminal EPUB/PDF/DJVU reader — split library/TOC + reader layout, TOC-tree navigation, zen/focus mode. | bookokrat.md |
Editors
Section titled “Editors”| Reference | Tech | One-line | File |
|---|---|---|---|
| micro | Go / Lua | Modern terminal editor — strongest reference for the context-sensitive bottom key-hint bar + a clean namespaced Lua plugin layer. | micro.md |
| Microsoft Edit | Rust | DOS-Editor homage — the dropdown-menu-bar / dialog system AND a from-scratch immediate-mode framebuffer TUI on a plain C ABI. | microsoft-edit.md |
| maki | C | Minimal modal editor — the NAV/INS mode toggle and an explicitly battery-conscious design thesis. | maki.md |
| nino | C | Tiny kilo-lineage editor — a minimal-C core that grew tabs/splits/file-explorer without losing the kilo shape. | nino.md |
| orbiton | Go | Config-free VT100-limited editor — hard terminal-capability constraints, a “portal” cross-file cut/paste primitive, a built-in mini-game. | orbiton.md |
| durdraw | Python | ASCII/ANSI/Unicode art and animation editor — the strongest model for a KN-86 cart-art authoring tool (canvas + ░▒▓█ palette + frame timeline). | durdraw.md |
Games / files / windowing
Section titled “Games / files / windowing”| Reference | Tech | One-line | File |
|---|---|---|---|
| Brogue: Community Edition | C | Minimalist ASCII roguelike — the single most valuable single-color reference in the corpus (glyph/inversion/shading grammar). | brogue-ce.md |
| PHP Terminal GameBoy Emulator | PHP | Full GameBoy emulator rendering to a terminal — direct proof-of-concept for KN-86’s “the terminal runs a real handheld game” premise. | php-gameboy.md |
| Midnight Commander | C / ncurses | The canonical dual-panel file manager — the reference for KN-86’s F-key bar (Row 74) and dual-panel layout. | mc.md |
| desktop-tui | Rust | A TUI “desktop environment” with overlapping windows + taskbar — window-management reference for single-color chrome. | desktop-tui.md |
| tvterm | C++ / Turbo Vision | Terminal-emulator-in-terminal — the canonical retro windowed-TUI framework study. | tvterm.md |
| maze-tui | Rust | Maze build/solve visualizer — box-drawing wall-style catalog + step/speed animation controls. | maze-tui.md |
Audio / Toneline
Section titled “Audio / Toneline”| Reference | Tech | One-line | File |
|---|---|---|---|
| line | C++ / Lua-LPeg | CLI MIDI sequencer + live-coding pattern language — the LISP-integration apex (a line phrase maps one-to-one onto a Fe s-expression); primary Toneline sequencer reference. | line.md |
| cmus | C | Console music player — numeric view-switching, compact status bar, library/queue separation. | cmus.md |
| upiano | Python / Textual | A playable piano keyboard in the terminal — the Toneline piano/keyboard widget + slider components reference. | upiano.md |
| waves | Go | TUI music player — F-key multi-view switching, library hierarchy, queue + undo/redo. | waves.md |
| asak | Rust | Cross-platform audio recorder/player — mode-selector splash, waveform-with-playhead, live-monitor recording workflow. | asak.md |
| valveFM | Go | Vintage FM internet-radio TUI — the tune-dial / tuner UI metaphor for audio controls. | valvefm.md |
Addendum — typing / on-screen-keyboard
Section titled “Addendum — typing / on-screen-keyboard”| Reference | Tech | One-line | File |
|---|---|---|---|
| Typeinc | Python / ncurses | Typing-speed game whose signature affordance is an on-screen keyboard widget mirroring the physical keys — the A4 (draw-keyboard) source. | typeinc.md |
| typing-game-cli | Node | Typing game with a race-against-a-fast-robot mode — the ghost-competitor mechanic + a KN-86 typing-game cart concept. | typing-game-cli.md |
Sister-product research
Section titled “Sister-product research”References in this folder that target a KN-9x sister product, not KN-86 itself. Captured here because the inspiration folder is the right home for not-yet-spec design references regardless of which product they target — when each sister product gets scoped, the relevant entries should be linked from its concept doc.
| Reference | Target product | One-line | File |
|---|---|---|---|
| Strat-O-Matic CFB | KN-90S Statline | Sports-sim dense-data-table UI — the closest contemporary digital analogue to what the Statline’s fantasy-sports management UX needs to be. | strat-o-matic-college-football.md |
| NFL Challenge + NFL Pro League Football (also Batch 7 entries above) | KN-90S Statline | Tactical OODA-loop sports-sim cluster — completes the trio of Statline UX references. | nfl-challenge.md + nfl-pro-league-1991.md |
| Dungeon Master’s Assistant Vol I (also Batch 7 entry above) | Candidate KN-9x “DM Sidearm” concept (no concept doc yet) | Tabletop RPG DM database sidearm — a portable rugged single-purpose tool that runs all night without distraction. | dungeon-masters-assistant.md |
Cross-cutting reference:
- features-matrix.md — every recurring pattern as a row, every Batch 1 project as a column, with a “KN-86 aspirational?” verdict on the right. Batch 2 and sister-product references are aesthetic/hardware moodboard material rather than TUI-feature patterns, so they are referenced from the visual-identity brief below rather than from the matrix.
Synthesis
Section titled “Synthesis”The set splits in two. Zork (and the Z-machine) is the architectural north — the 1980 precedent for everything KN-86 is doing structurally: a Lisp dialect for authoring, a portable and memory-disciplined runtime (KN-86 realizes this as a tree-walking interpreter; the AOT-bytecode half is deferred), a cartridge artifact carrying the work, and a taut text voice that is the UI. The other eight are contemporary UX reference — what good TUI craft looks like in 2025–2026, what patterns recur, what the bar is for keyboard-first, theme-aware, resilient terminal interfaces.
Reading across the contemporary eight, a few patterns keep showing up — these are what should define the KN-86 Deckline identity at the surface:
- Keyboard-first command model. All eight commit to keys over menus. KN-86 is already there by hardware constraint (31 physical keys, no pointer), but the framing — every surface is a keymap, the keymap is discoverable in-band — is the doctrine to commit to.
- Multiple focus / layout modes. PulseDeck cycles three layouts on one key. NetWatch tabs by digit. Golazo swaps focus with
Tab. KN-86 should pick a small, fixed set of modes per surface and a single key to cycle them — not freeform window management. - First-class theme system. PulseDeck (6) and NetWatch (7) both make themes a named, cyclable, persistent setting. KN-86 is monochrome amber, so this becomes “aesthetic modes” rather than “color themes” — glyph treatment, CIPHER-LINE animation profile, scanline/ghost overlay — but the mechanism (a registry, a cycle key, a persisted choice in
nosh-config.toml) transfers. - Visualizers + sparklines as inline primitives. PulseDeck’s spectrum/scope, NetWatch’s sparkline/heatmap/Gantt rows, Golazo’s stat bars. None of them are separate “graph mode” — they live inside the data view. CIPHER-LINE is KN-86’s natural home for the heavier visualizers; the main 80×25 grid can carry sparklines and stat bars with box-drawing + braille.
- Resilience / graceful degradation as doctrine, not feature. NetWatch surfaces capability tiers in-band and never crashes. PulseDeck buffers, fades, undoes, and refuses to draw on a too-small terminal. KN-86 has analogous states (no cart, no microSD, coprocessor offline, low battery, emulator window too small) — they should be handled with the same posture: show what you have, label what you don’t.
- Persistent session state. PulseDeck, NetWatch, Gloomberb, BAE — all of them survive a restart. KN-86 already has Universal Deck State (ADR-0011); the inspiration set reinforces that scope (handle / credits / reputation / cartridge history / phase chain) is exactly right.
- Plugin / extensibility story. Gloomberb is the heavy example; OpenTUI is the substrate. KN-86 has the capability-cartridge model, which fills the same niche through different mechanics — but the vocabulary (pane / tab / command / status-widget / data-provider) is useful for sharpening the Bare Deck Terminal brief.
North stars
Section titled “North stars”Eighteen projects closest in spirit to where KN-86 should land. The first is historical and architectural; the rest are split between contemporary UX (Batches 1 + 3), physical-build prototype (Batch 3 hardware refs + Batch 5 keyboard decision + Batch 6 case/keycaps reinforcement), implementation-technique research (Batch 4 + Batch 5 archived custom-keyboard knowledge), and visual-effect grammar (Batch 6).
- Zork (and the Z-machine) (Batch 1) — the deepest single architectural resonance. Lisp-authored carts on a portable, memory-disciplined runtime; pure-text experience on a fixed-grid terminal; cartridge / box / feelies as part of the work; second-person, present-tense, taut prose voice. KN-86’s KEC Lisp + Fe interpreter + cart-shell + CIPHER stack is the Z-machine pattern, four decades on — though KN-86 tree-walks Lisp source rather than compiling to bytecode (the AOT-bytecode half is deferred; see ADR-0004 amendment). Cite explicitly in ADR-0001 and ADR-0004 background sections.
- l123 (Batch 3) — the single strongest keyboard-first interaction-model reference in the entire corpus. Slash menus, three-line control panel, 13-mode indicator, first-character input rule, F-key verb workflow, F1 context help (824 pages shipped in the binary), authenticity contract backed by 232 acceptance transcripts, optional DOS/green/amber CRT themes, strict layered Rust architecture. Read end-to-end before touching KN-86’s runtime interaction model.
- AetherTune (Batch 3) — the single strongest runtime-architecture reference of the contemporary apps. Real 16-band FFT visualizer pipeline at ~94 fps (CAVA-inspired), CRT boot + power-off identity animations, 8 themes, fully remappable keybindings, graceful capability degradation (simulated visualizer when audio capture absent), clean
src/ui/module split. The CIPHER-LINE visualizer should be modeled on this pipeline. - 4TRK (Batch 3) — strongest single aesthetic match for KN-86’s Deckline identity. Compact desktop music workstation, dual screen modes (
studio 640/classic 320), many themes + theme editor, deep CRT effects, tape-emulation FX. Read the screenshots, then read them again. - PulseDeck (Batch 1) — the deck identity, the theme registry, the audition/commit split, the visualizers, the resilience instincts. Borrow most heavily here for the cassette-deck visual lineage.
- NetWatch (Batch 1) — the numbered-tab dashboard, the graceful-degradation doctrine, the sparkline-everywhere aesthetic, the live-cycle-and-persist theme model. The Bare Deck Terminal should feel like NetWatch’s Dashboard tab, in amber.
- Gloomberb (Batch 1) — the dense multi-pane discipline and the mnemonic command bar. The TERM key should feel like Gloomberb’s
Ctrl+P. - QRPπ (Batch 3,
../prototype/) — the single closest physical-build reference. All-in-one weatherproof digital-mode radio deck in a Pelican 1170 case with three 3D-printed inserts (bottom keyboard, top panel, screen bezel), unmodified shell, ortholinear keyboard, display in the lid. KN-86’s hardware build structure should follow this almost line-for-line. - mal — Make a Lisp (Batch 4,
../research/) — the canonical blueprint for building a small embedded Lisp. 11 steps, 89 host-language implementations, the lingua-franca curriculum for “implement a Lisp in language X.” Direct prior-art citation for ADR-0001 / ADR-0004 / ADR-0005. The scaffold for KN-86’s cart-authoring tutorial. - EXWM + webmacs (Batch 4,
../research/) — the strongest contemporary statements of the “keyboard-driven everything, one environment” philosophy. EXWM at the WM level, webmacs at the per-application level. The north star for the universal-verb-set + nEmacs REPL surface (ADR-0016). - termui + blessed-contrib (Batch 4,
../research/) — the widget-catalog reference. Sparkline, gauge, plot, table, tabs, braille canvas, carousel, LCD display, rolling log, donut. The inventory NoshAPI should expose to cart Lisp as drawing primitives. The carousel idea (auto-rotating dashboard views) is the standout single takeaway — pilot for the Bare Deck Terminal idle state. - BOOTSTRA.386 (Batch 4,
../research/) — the aesthetic + boot-animation identity reference. DOS WIMP re-skin + configurable ANSI-art boot/flyby animation. Direct cite for the v0.1 KN-86 boot animation in AMBER + Press Start 2P + CP437, with configurable speed and repeat behavior innosh-config.toml. - Ferris Sweep — holykeebs (Batch 5,
../prototype/) — the keyboard. 34-key split, RP2040 controller, hotswap sockets + diodes, low-profile choc spacing, MBK low-profile keycaps. Replaces the custom 31-key keyboard plan from ADR-0024. Order from holykeebs as a soldered kit per the Buyer’s Guide BOM checklist. - holykeebs Buyer’s Guide (Batch 5,
../prototype/) — the BOM. The configuration matrix turned into the actual order checklist (build tier, controller, sockets, switches, pointing device vs OLED constraint, plates, case). - GOLEM (Batch 5,
../research/) — the custom-keyboard knowledge base (archived as background per the Sweep decision) and the vintage-terminal-keyboard gallery (actively used as KN-86 keycap-legend / TUI typography reference). Reuters ‘85, Tatung ‘84, IBM 5155 Model F, Kaypro 10, Epson HX-20/40, DEC LK-201. - Adamow + TechNIK cyberdecks (Batch 5,
./) — the shell aesthetic. Two free Printables STL cyberdecks that triangulate the tactical-cyberpunk silhouette family the KN-86 Pelican-1170 bezel inserts should land in. - react-video-ascii + libcaca (Batch 6,
../effect/) — the ASCII visual language. react-video-ascii is the interaction-grammar north star (its prop matrix distills into the project-wide ASCII Effect Spec); libcaca is the on-device engine reference. The whole TUI shares one ASCII grammar defined here. - Ferris Sweep v2 Case + Sculpted Choc keycaps (Batch 6,
../prototype/) — the case + the touch. Bubbleology’s printable Sweep v2 case is the actionable enclosure for the chosen keyboard; mugika9’s sculpted Choc caps are the documented ergonomic alternative to canonical MBK. Both reinforce the Batch-5 Sweep decision with concrete supporting parts.
Tertiary but specific:
- Golazo (Batch 1) for master/detail + headline-glyph identity object — a screen-design rule.
- Perkins (Batch 1) for braille sub-cell rendering and the
?overlay — a primitive and a runtime feature. - OpenTUI (Batch 1) as the reference component inventory, not as a substrate.
- Vehicle TUI Concept (Batch 1) for the Row 0 + Row 24 + bottom-bracketed-nav pattern realized at fixed-envelope hardware scale — the closest visual analogue to what KN-86 itself is.
- octoscope (Batch 3) for the direct
amberCRT theme lineage citation and the tabbed-dashboard reference architecture. - VisiCalc (Batch 3) as the historical anchor of the keyboard-first-grid lineage that runs
VisiCalc → Lotus → l123 → KN-86. - Penkesu Computer (Batch 2) and Casio Organizer Retrofit (Batch 2) for hardware silhouette / function-key-as-domain validation.
- tuibox (Batch 4) for the dirty-bit render-cache pattern and the C-core alternative path.
- cl-termbox2 (Batch 4) as the proof-of-concept bridge from embedded Lisp to a real terminal — structural validation for ADR-0001 + ADR-0005.
- xiki + history.el (Batch 4) for the expandable-tree-with-non-destructive-history REPL interaction model.
- no-more-secrets (Batch 4) as the signature text-reveal transition effect — the third signature animation alongside the boot animation and CRT power-off.
- Game Programming Patterns (Batch 4) — the runtime-pattern reference (Game Loop, Update Method, Command, Observer, State, Dirty Flag, Object Pool, Service Locator).
- Stream Deck macropad (Dante) (Batch 5) — optional v2+ auxiliary input module bound to KN-86-application verbs; not part of the canonical v0.1 deck.
- KMK firmware (Batch 5) — firmware fallback reference; KN-86 uses QMK + Vial on the Sweep’s RP2040 instead, but two specific KMK ideas (drag-drop CircuitPython workflow UX, NeoPixel diagnostic color codes) carry forward.
KN-86 visual identity brief (Batch 2 synthesis)
Section titled “KN-86 visual identity brief (Batch 2 synthesis)”Distilled from the five hardware / aesthetic references. Not a spec — a directional brief for the visual identity, color story, form factor, typography, and data-density discipline KN-86 should ship behind. Where a value is already canonical (per CLAUDE.md’s Canonical Hardware Specification), the brief reinforces rather than restates.
Screen aspect ratio and layout proportions
Section titled “Screen aspect ratio and layout proportions”- Canonical: primary display is 1024×600 (~1.71:1), 80×25 text grid, 12×24 physical cells. Locked.
- Direction (not a re-spec): the Penkesu Computer (1280×400, 3.2:1) is much more extreme than KN-86’s panel, but its existence validates the deck-style genre — most of the action happens horizontally, not vertically. Read every KN-86 screen layout as “spend the budget across, not down.” Long status strips on Row 0 and Row 24. Side-by-side master/detail in Rows 1–23. Wide stat-bar pairs. The Penkesu is the layout-discipline citation; the 1024×600 panel is the actual target. See penkesu.md.
- CIPHER-LINE OLED (256×64 auxiliary, per Canonical Hardware Specification) is the truly ultrawide surface (4:1) — the Penkesu lesson applies hardest here.
Color story and aesthetic-mode direction
Section titled “Color story and aesthetic-mode direction”- Canonical default: amber
#E6A020on black#000000. Locked. Monochrome on the primary display. - Genre lineage: amber is inside the canonical cyberdeck palette family alongside cyan and magenta — see cyberdeck-cafe.md. When someone asks “why monochrome amber?”, the answer is “because it’s one of the colors the scene runs on,” and the Cyberdeck Cafe gallery is the evidence. Direct visual confirmation:
os-models-3.pngin os-models.md is essentially what KN-86 looks like. - Aesthetic-mode direction (not a v0.1 commitment): when KN-86 ships named aesthetic modes (the patterns from pulsedeck.md, netwatch.md, os-models.md), candidate roster, scoped tight:
AMBER— the canonical default (#E6A020 / #000000).AMBER— warmer, more saturated red-orange shift; warm-mode reference isos-models-1.png.CIPHER— slightly desaturated mid-luma amber for sustained reading sessions.
- Aesthetic-mode mechanism: named, cyclable, persisted in
nosh-config.toml. Adopt the OS Models “named palette as the unit” framing. Picker UI lives on the Bare Deck Terminal SYS tab, modeled onos-models-4.png(six-row two-column with asaverow). - Aesthetic mode is not just color. On a monochrome device, “mode” means glyph treatment (Press Start 2P at 1×2 vs. native 12×24, ADR-0014 F1), box-art density, CIPHER-LINE animation profile, scanline / ghost overlay strength. See pulsedeck.md.
Form factor, materials, and silhouette
Section titled “Form factor, materials, and silhouette”- Tactical-cyberpunk side, not domestic-DIY side. Pelican-1170 shell + 3D-printed inset panels reads as member of the cyberdeck community and lands in the tactical/utilitarian lineage. Penkesu’s off-white “pencil case” is the other legitimate retro-handheld lineage; KN-86 is the tactical sibling, deliberately. Worth being explicit about which side of the line we sit on in marketing.
- The silhouette is the affordance. Per the Casio organizer retrofit: the external shape should communicate the device before the screen does. The 14-function-key + 16-key phone-layout numpad + TERM key layout (Canonical Hardware Spec) is a retro-organizer / dispatch-deck silhouette, not a generic keyboard.
- Photograph lived-in, not staged. Both the Cyberdeck Cafe lifestyle posts and the Casio retrofit’s photo style point at the same thing — KN-86 marketing images should look like the device is owned, not vacuum-cleaned. Coffee rings, desk patina, hand grease. This is a directive for marketing-plan.md and pr-faq.md.
Typography
Section titled “Typography”- Canonical: Press Start 2P + CP437 box-drawing, 8×8 bitmap source, 12×24 physical cell. Locked. (ADR-0014, ADR-0014 F1 for the native 12×24 glyph table.)
- Genre fit: the retro pixel-font commitment is part of the cyberdeck genre’s vocabulary — every device in the Cyberdeck Cafe gallery that has a screen renders monospace pixel-fonts as the default. The choice reads as in-genre.
- Function-key-as-domain typography (from the Casio retrofit): keycap legends carry the domain vocabulary (
CALENDAR,SCHEDULE, …). KN-86’s keycap legend manifest is locked in ADR-0022; the retrofit confirms the idiom works and is recognizable to the audience.
Data-density discipline
Section titled “Data-density discipline”- The stat-sheet is a sanctioned cart-UI mode. Any KN-86 cart whose job is to be a stat sheet — faction standings, mission logs, dispatch tallies, reputation ledgers — should look like one without apology or decorative panes. Worth promoting to a first-class cart-authoring pattern in
ui-patterns.md. - Three rules: (1) box-drawing borders, (2) monospace alignment, (3) color / intensity delta carries meaning, not vibe.
- 80×25 is exactly the right size for tables in this idiom. The grid does the work a spreadsheet does on a PC.
- (Note: the Strat-O-Matic entry in this folder is research for the KN-90S Statline, not KN-86 — but the data-density discipline above is the general lesson worth carrying over to KN-86 from a TUI craft perspective.)
Tie-back to Batch 1 TUI patterns
Section titled “Tie-back to Batch 1 TUI patterns”The aesthetic / hardware direction above lines up directly with several already-noted Batch 1 patterns. The pairs to ship together:
| Batch 1 pattern | Batch 2 evidence |
|---|---|
| Theme-as-aesthetic-modes (pulsedeck.md, netwatch.md) | Named palettes (os-models.md); AMBER / AMBER / CIPHER roster from the brief above |
| Bare Deck Terminal “useful in 5 seconds” + SYS tab (netwatch.md) | SYS-tab aesthetic-mode picker UI modeled on os-models-4.png |
| CIPHER voice style (zork.md failure-state prose) | “Surviving the Sprawl” lifestyle voice (cyberdeck-cafe.md) — two reference corpora for the CIPHER tone target |
| Row 0 + Row 24 chrome contract (vehicle-tui-concept.md) | Horizontal-density discipline (penkesu.md) — spend the budget across |
| Function-key-as-domain (already canonical; ADR-0016) | Casio retrofit as the historical idiom citation |
What should ship in v0.1
Section titled “What should ship in v0.1”A tight reading of the brief, restricted to what’s plausibly v0.1:
- AMBER aesthetic mode only. Don’t ship AMBER / CIPHER yet — but architect the runtime to accept named modes from
nosh-config.toml(no hardcoded palette constants outside the mode registry). - Stat-sheet UI pattern documented in
ui-patterns.mdwith three rules + worked example. - Horizontal-density discipline added to
screen-design-rules.mdas “Layout proportions” — “spend the budget across, not down.” - Marketing brief separate PR. The photographic direction (lived-in, not staged) belongs in marketing-plan.md / pr-faq.md, not engineering docs.
Unified Deckline brief (Batch 3 synthesis)
Section titled “Unified Deckline brief (Batch 3 synthesis)”Two consolidated recommendations distilled from Batches 1, 2, and 3 together — one for the software north star, one for the hardware prototype path. Not a spec — a directional brief intended to be promoted into ADRs and runtime specs in follow-up PRs.
1. Software north star
Section titled “1. Software north star”Application framework: Bubble Tea + Lip Gloss (Charm stack). Go runtime, Elm-style architecture (Model / Init / Update / View), cell-based renderer with diff, integrated keyboard + mouse + focus handling, adaptive/downsampled color so the same code renders correctly on the desktop emulator (true-color terminal) and on the device (Pi Zero 2 W framebuffer VT). Composable child models for the Bare Deck Terminal tabs, mission board, cart-content panes. Fallback path: termbox2 if Go integration costs prove too high or if we want to merge the application binary into the existing kn86-emulator/ C11 codebase.
Interaction model: l123 is the reference.
- Slash-menu (
/or TERM-key) as the universal command surface — first-letter descent,Escback, no chords. (l123) - Three-line control panel mapping onto KN-86’s Row 0 / Row 24 chrome contract, with the addition of a live mode indicator (
READY/EDIT/MENU/WAIT/ etc.) in Row 0 or Row 24. (l123) - First-character input rule — the first character typed in a context-free input decides what the entry is (verb → English imperative parser, Zork-style; expression → REPL; address → navigation hint). (l123 + Zork)
- F-key workflow where every function key is a verb. KN-86’s 14-FN + TERM hardware is already this; l123 is the contemporary reference for how to design it well.
- One key per action ethos. Every meaningful action is a single keypress; chords are reserved for power-user features. (audium)
- Universal
Ctrl-Break-equivalent abort. One key, any mode, back to READY.
Theme system: named aesthetic modes, persisted in nosh-config.toml, picker + editor on the SYS tab.
- Roster sketch:
AMBER(default — the canonical #E6A020 on #000000),AMBER(warmer red-orange shift),CIPHER(mid-luma desaturated for sustained reading). Architecture accepts arbitrary additions; v0.1 ships AMBER only. (Batch-2 visual-identity brief + OS Models) - Picker pattern modeled on AetherTune’s
tcycler with live preview (AetherTune) and the 4TRK / OS Models color-picker UI for the editor. - CRT-theme lineage directly cited from octoscope’s
phosphorandamberthemes — KN-86’sAMBERmode is in the same naming family by intent, not by accident. - Aesthetic mode means more than color on a monochrome device — glyph treatment (ADR-0014 F1’s 12×24 native vs 8×8 scaled), CIPHER-LINE animation profile, scanline / phosphor-bleed overlay strength. (4TRK’s deep CRT-effects layer is the reference.)
Real-time visualizer pipeline: AetherTune’s 16-band FFT at ~94 fps, with CAVA-style gravity fall-off and automatic sensitivity — but driven by PSG output from the Pico 2 coprocessor (ADR-0017), not by system audio loopback. The CIPHER-LINE OLED is the natural home. Secondary visualizer surfaces (sparklines, A-vs-B stat bars) inside the main 80×25 grid use box-drawing + braille per PulseDeck / Perkins / NetWatch. Cross-link to cliamp for the in-band-not-modal placement discipline.
Tabbed dashboard layout for the Bare Deck Terminal: octoscope and NetWatch are the dual reference. Number-key-addressable tabs (1–5 for STATUS / CIPHER / LAMBDA / LINK / SYS, matching the phone-numpad input model), drill-in detail views from list items, live “change pulse” border flashes on new data arrival (octoscope), capability-tier badge in chrome for graceful degradation (NetWatch).
Plugin / extensibility story. KN-86 cartridges are not plugins — they’re capability modules (ADR-0001). But the contemporary references (rs-pug, cliamp) converge on Lua as the desktop-tooling extension language. Adopt Lua for desktop tooling around KN-86 (cart authoring helpers, emulator debug-overlay extensions, F12-style panel plugins) — not for the on-device runtime.
Persistence: human-editable text formats throughout (audium). nosh-config.toml for config; JSON for portable exports; plaintext for log/history; per-cart save files on the SD card (already specified in ADR-0019); Universal Deck State on the device microSD (already specified in ADR-0011). No binary blobs where a text format suffices.
Image rendering: asciinator’s halfblock-▀-with-fg-bg-color technique for the desktop emulator; shade-mode rendering against the amber palette on the device (monochrome). NoshAPI primitive: (draw-image path :mode 'shade).
Reference architecture: AetherTune’s src/ui/ split + l123’s strict layered Rust workspace. KN-86’s runtime should isolate ui/ from data sources behind a stable trait (NoshAPI is already this for cart Lisp; the application should follow the same discipline internally). Engine-agnostic UI; UI-agnostic engine.
2. Hardware prototype path
Section titled “2. Hardware prototype path”Chassis: Pelican 1170 Protector Case (Canonical Hardware Spec — locked). The closest single existing build is QRPπ — read that entry end-to-end before committing any further bezel work.
Inserts: three to five custom 3D-printed inset panels seated on Pelican foam, case unmodified. Pattern from QRPπ:
- Bottom: 31-key key plate insert (custom — KN-86’s phone-layout numpad + 14-FN + TERM)
- Lid: primary display bezel (1024×600 Elecrow IPS panel)
- Body: CIPHER-LINE OLED bezel (256×64 SSD1322, mounted above the keyboard)
- Body: cartridge-slot retainer (SD-card-in-sled per ADR-0019)
- Top/side: port cutout panel (power, programming, optional aux)
Print material: PETG preferred over PLA for travel resilience, per community consensus across pelican-1170-prints.md references. Material remains TBD per Canonical Hardware Spec until bring-up validation.
Parametric starting point: the Printables “Pelican Case 1170 Insert Template — Parametric” (../prototype/pelican-1170-prints.md). Fork it and override the component cutouts rather than authoring from a blank file.
Pelican foam carries the internal volume. Pi Zero 2 W, Pico 2 coprocessor, the battery pack (3× 18650 on a Waveshare UPS Module 3S per ADR-0038), internal USB hub bridge for the SD-card-as-USB-mass-storage cartridge interface (ADR-0019), cabling. Printed inserts carry only the user-visible surfaces.
Keyboard: custom 31-key mechanical PCB per ADR-0018, Kailh Choc v1 switches + MBK keycaps, Adafruit KB2040 controller (ADR-0024) running QMK. Penkesu Computer validates the small-form ortholinear Choc + MBK pairing at handheld scale.
Silhouette identity: tactical-cyberpunk, not domestic-DIY. The Cyberdeck Cafe + QRPπ + Printables cyberdeck gallery converge on the same posture — visible fasteners, integrated antenna stubs (if applicable), rugged panel surfaces, deliberate exposure of hardware. KN-86 belongs in this lineage. (Penkesu’s off-white “pencil case” aesthetic is the other legitimate retro-handheld lineage — KN-86 deliberately doesn’t go there.)
Open-hardware / DIY ethos as a downstream commitment (x0xb0x). By v1.0 or shortly after: published BOM, buildable-from-instructions documentation, sled openable for SD-card service, system image flashable from a standard SD card, no special tooling required.
3. v0.1 ship list (consolidated)
Section titled “3. v0.1 ship list (consolidated)”A tight reading of the brief, restricted to what’s plausibly v0.1:
- Application stack: Bubble Tea + Lip Gloss; one Bubble Tea binary running on the device VT and the desktop emulator equivalently.
- AMBER aesthetic mode only, but the runtime accepts named modes from
nosh-config.toml— no hardcoded palette constants outside the mode registry. - Slash-menu (TERM key) entered universal verb dispatch, with the meta-command verb set (
SAVE,LOOK,INVENTORY,SCORE) from the Batch-1 Zork synthesis. - Mode indicator in Row 0 or Row 24.
- Stat-sheet UI pattern documented in
docs/software/cartridges/authoring/ui-patterns.mdwith three rules + worked example. - Horizontal-density discipline added to
docs/software/cartridges/authoring/screen-design-rules.md— “spend the budget across, not down.” ?universal help overlay as a runtime-internal affordance (Perkins).- Numbered-tab navigation on the Bare Deck Terminal mapped to the phone numpad (NetWatch + octoscope).
- CIPHER-LINE PSG visualizer modeled on AetherTune’s FFT pipeline.
- CRT boot + power-off animations as identity branding (AetherTune).
- Hardware prototype: QRPπ-derived insert structure seated in Pelican 1170 foam, three printed panels at minimum, no case modification.
- Authenticity contract for the runtime, written in
docs/software/runtime/and backed by acceptance transcripts underkn86-emulator/tests/(l123’s discipline applied to KN-86).
KN-86 build brief (Batch 4 synthesis)
Section titled “KN-86 build brief (Batch 4 synthesis)”The Batch-3 synthesis above committed to Bubble Tea + Lip Gloss as the application stack, AetherTune’s FFT pipeline as the visualizer reference, and QRPπ as the hardware build template. Batch 4 extends those commitments with the how-to-build-it layer — the rendering core’s design pattern, the embedded scripting layer’s structure, the interaction model’s keyboard discipline, the signature aesthetic effects, and the runtime patterns that compose the whole.
1. Rendering core — confirmed: Bubble Tea + Lip Gloss; widgets from termui / blessed-contrib inventory
Section titled “1. Rendering core — confirmed: Bubble Tea + Lip Gloss; widgets from termui / blessed-contrib inventory”The Batch-3 recommendation stands: Bubble Tea + Lip Gloss as the primary stack (Go, Elm architecture, cell-based render-with-diff). Batch 4 strengthens the recommendation by providing two specific alternatives and a widget inventory:
- Compared to a C core (tuibox + termbox2 + KEC Lisp bindings via cl-termbox2 pattern): the C path is real and viable, particularly because cl-termbox2 demonstrates the Lisp-to-terminal bridge works end-to-end. But the C path requires hand-rolling widgets, hand-rolling event dispatch, hand-rolling theming, hand-rolling color downsampling. Bubble Tea + Lip Gloss ships all of that. The C path stays in the doc as the fallback for if Go integration costs prove too high, with tuibox’s UI→Screen→Box dirty-bit render cache as the structural model.
- Compared to widget libraries (termui, blessed-contrib): termui is Go, blessed-contrib is Node. Neither is the right substrate — Bubble Tea + Lip Gloss is more modern and more actively developed. But the widget inventories of both are exactly the right reference for what NoshAPI (ADR-0005) should expose to cart Lisp.
Widgets to adopt (in NoshAPI surface design, sourced from termui + blessed-contrib catalog):
| Widget | Source | Use case |
|---|---|---|
| Sparkline | termui + blessed-contrib | Battery curve in Row 0, reputation history in cart surfaces, FFT band history on CIPHER-LINE |
| Gauge | termui + blessed-contrib | Mission progress, cart resource bars, battery |
| Braille canvas | termui | Sub-cell rendering escape hatch (cf. Perkins precedent) |
| Table | termui + Lip Gloss | Stat-sheet UI pattern (per the Batch-2 data-density discipline) |
| Tabs | termui | Bare Deck Terminal tab strip |
| Plot (line/scatter) | termui | Cart-content time-series surfaces |
| LCD display | blessed-contrib | Big-glyph headline identity object (cf. Golazo) |
| Rolling log viewer | blessed-contrib | Mission event log, dispatch transmissions, CIPHER history |
| Carousel (standout) | blessed-contrib | Bare Deck Terminal idle-state auto-rotation through STATUS / CIPHER / LAMBDA / LINK / SYS tabs |
The carousel is the standout single takeaway: a Bare Deck Terminal that idles into a slow auto-rotation across its tabs gives the device an ambient information-radiator quality. Pilot it. Make it configurable in nosh-config.toml (rotate-interval, rotate-disable). Compose with octoscope’s live “change pulse” border flash on data arrival — the carousel rotates, the change-pulse interrupts and flashes when something needs attention.
2. Scriptability — embedded Lisp config/macro layer
Section titled “2. Scriptability — embedded Lisp config/macro layer”The Batch-3 brief committed to KEC Lisp as the cart-authoring language (ADR-0001 / ADR-0004). Batch 4 confirms and extends:
- Pedagogy reference: mal. The 11-step structure is the right scaffold for the KN-86 cart-authoring tutorial. Cite mal directly in the ADR-0001 / ADR-0004 / ADR-0005 prior-art sections.
- C-implementation reference: BuildYourOwnLisp. The fallback path if Fe ever proves wrong-fit. The
mpcparser-combinator library is also worth knowing about independent of the Lisp decision. - Structural validation: cl-termbox2. Proof-of-concept that a small embedded Lisp + cell-based terminal renderer + FFI between them composes into a working TUI. KN-86 Fe + NoshAPI + nOSh is the same shape with different specific libraries. Strong direct cite for ADR-0001 / ADR-0005.
- Plugin manifest: pallet-style. Hand-editable text file (TOML), declarative, version-pinned, manifest-as-source-of-truth (one-directional sync). For the desktop tooling around KN-86 — cart-authoring helpers, emulator debug-overlay extensions — not for the on-device runtime.
- Data fetching: emacs-request-style. Async HTTP from inside the Lisp scripting layer. Callback shape (
:on-success/:on-error), pluggable backend (system curl vs. built-in pure-runtime client), built-in JSON parser, headers and cookies extensible. NoshAPI surface design candidate. - Macro recording / Learn mode (l123’s
Alt-F5 LEARN+ Roro’s RPA lineage). Worth scoping as a v0.2+ REPL affordance — record a sequence of TERM-line verbs, name the macro, replay as a single verb.
3. Interaction model — keyboard-first, expandable, navigable, focusable
Section titled “3. Interaction model — keyboard-first, expandable, navigable, focusable”Building on l123’s slash-menu model from the Batch-3 synthesis, Batch 4 adds:
- The keyboard-first philosophy from EXWM and webmacs. Codify: every action a user could conceivably want has a keyboard path. There is no “well, it’s faster with the mouse” backstop. No mouse, ever. Worth a quality-bar doctrine note.
- Universal verb set commitment. TERM-line verbs (
SAVE,LOOK,INVENTORY,SCORE, plusBACK/FORWARDfrom the navigation history) are deck-wide commitments, available in every cart, not redefinable per cart. EXWM’s shared-namespace lesson, applied to KN-86. Refines promote-list item 15. - Expandable-command surface from xiki. The REPL surface (per ADR-0016) should support typing a verb and expanding its output in place, with nested expansions navigable by tree traversal. Promote: Xiki-style expandable text as the REPL’s default interaction.
- Link-hint navigation from webmacs. Every actionable item on every surface gets a single-character label; the user types the label to act on the item. Promote.
- Non-destructive navigation history from history.el. Doubly-linked-list with sliding index pointer;
BACKandFORWARDtraverse without losing entries; killed-buffer-equivalent stale entries skipped. Promote: this is a v0.1 runtime affordance. - Focus / zen mode from writeroom-mode. Single keystroke; hides Row 0 and Row 24; narrows content area to a configurable column count; centers horizontally; CIPHER-LINE dims (doesn’t silence). Promote: v0.1 ship list addition.
- Filter-expression on lists from mop. A tiny query DSL on Row 24 (e.g.,
phase:active,rep:>50), evaluated in the cart’s KEC Lisp scope. Composes with the existing NetWatch filter-DSL promote item — same destination, two independent witnesses.
4. Aesthetics & polish — themes + boot animation + reveal effect
Section titled “4. Aesthetics & polish — themes + boot animation + reveal effect”Building on the Batch-3 aesthetic-mode brief (AMBER / AMBER / CIPHER):
- DOS/CRT aesthetic precedent from BOOTSTRA.386 + NES.css. Both commit to a constrained period-correct palette and stay there. KN-86’s
AMBERmode is in the same family of “the constraint is the brand.” Cite both as visual-identity prior art. - Boot animation is now a confirmed v0.1 ship-list item. AetherTune is the runtime mechanism reference; BOOTSTRA.386 is the aesthetic commitment reference. Implementation: ANSI-art flyby in AMBER + Press Start 2P + CP437; configurable
speed,once_per_session,disableinnosh-config.toml. - Reveal animation (no-more-secrets). The Sneakers-style decryption reveal — characters flickering down to their final value column-by-column. Sanctioned as a NoshAPI primitive (canonical contract at
software/api-reference/grammars/reveal-styles.mdper ADR-0033):(reveal surface :style :char-flicker :duration 1.0 :rate 30 :trail 8). (Earlier inspiration-tier name was(reveal-text …)— superseded by the unified(reveal :style …)surface.) Natural use cases: CIPHER fragment arrival on the OLED; mission contract acceptance on the primary display; a built-inDECRYPTverb response style. Reimplement from first principles — no-more-secrets is GPL, can’t vendor. - Hand-drawn / playful exception (loopy). Sanctioned aesthetic mode for deliberately playful carts (a notepad cart, a sketchbook, a systems-thinking cart). Park as an exception to the primary aesthetic, not a default.
5. Runtime patterns — Game Programming Patterns applied
Section titled “5. Runtime patterns — Game Programming Patterns applied”From game-programming-patterns, the patterns to apply directly to the KN-86 nOSh runtime:
- Game Loop — decoupled update + render, fixed timestep. Textbook reference for the nOSh main loop.
- Update Method — each entity / cart / chrome region gets a tick callback. Trivially applies.
- Command — TERM-line verbs as Command objects (queued, undoable, replayable). Composes with the universal-verb-set commitment + the navigation history.
- Observer — state changes notify listeners. Cart state → chrome updates; battery → Row 0; new CIPHER fragment → OLED ticker.
- State — finite-state machines. The cart phase chain (orchestration) is already this pattern; codify explicitly.
- Dirty Flag — per-region change tracking; only repaint dirty regions. Directly applicable and aligns with tuibox’s per-box dirty bit.
- Object Pool — reuse fixed allocations. Matches KEC Lisp’s arena discipline.
- Service Locator — decoupled service access. NoshAPI is exactly this for cart Lisp.
- Subclass Sandbox — cart authors get a sandboxed API surface; the runtime owns the dangerous parts. NoshAPI’s whole shape.
Cite Nystrom’s patterns by name in the runtime architecture spec.
6. v0.1 ship list — extended
Section titled “6. v0.1 ship list — extended”Composing the Batch-3 and Batch-4 ship-list items:
- Application stack: Bubble Tea + Lip Gloss; one binary across device + emulator
- AMBER aesthetic mode only at v0.1, but the runtime accepts named modes from
nosh-config.toml - Slash-menu / TERM-key universal verb dispatch, with the universal verb set:
SAVE,LOOK,INVENTORY,SCORE,BACK,FORWARD(cf. EXWM/webmacs/history.el lineage) - Mode indicator in Row 0 or Row 24 (l123)
- Stat-sheet UI pattern in
ui-patterns.md - Horizontal-density discipline in
screen-design-rules.md ?universal help overlay (Perkins + webmacs live-docs)- Numbered-tab navigation on the Bare Deck Terminal (NetWatch + octoscope)
- CIPHER-LINE PSG visualizer modeled on AetherTune’s FFT pipeline
- CRT boot animation as identity branding (AetherTune mechanism + BOOTSTRA.386 aesthetic commitment)
- Hardware: QRPπ-derived insert structure in Pelican 1170
- Authenticity contract with acceptance transcripts (l123 discipline)
- Carousel idle-state for the Bare Deck Terminal (blessed-contrib)
- Non-destructive navigation history (history.el)
- Focus / zen mode (writeroom-mode)
- Reveal animation primitive in NoshAPI (no-more-secrets, reimplemented)
- Universal verb set + link-hint single-character labels on every actionable surface (webmacs)
- Filter-expression on Row 24 for list surfaces (mop + NetWatch — two witnesses)
- Xiki-style expandable REPL (xiki)
- Game Programming Patterns cited by name in the runtime architecture spec
KN-86 hardware build brief v5 (Batch 5 synthesis)
Section titled “KN-86 hardware build brief v5 (Batch 5 synthesis)”Batch 5 is, structurally, smaller than Batches 1–4 — it records one major decision and the supporting evidence around it. But the decision is load-bearing for the entire hardware bring-up.
1. Keyboard = Ferris Sweep, not custom
Section titled “1. Keyboard = Ferris Sweep, not custom”The KN-86 will use a Ferris Sweep, ordered from holykeebs, with these specific configuration choices:
- 34-key split layout (replaces canonical-spec 31 keys; the 14-FN / 16-numpad / 1-TERM canonical functions remap onto 34 keys + QMK layers, scoping work TBD)
- RP2040 controllers (holykeebs default; matches KN-86’s broader RP-family commitment per ADR-0017)
- Hotswap sockets + diodes (current PCB revision; defers the switch family commitment within Kailh Choc v1)
- Low-profile (5mm) controller socket headers — not 7.5mm machine headers; the 2.5mm height delta matters in the Pelican-1170 internal volume budget
- Choc 18×17mm key spacing (matches Kailh Choc v1 + MBK keycap commitment)
- MBK low-profile keycaps (already canonical)
- 128×32 OLED on one half for layer/WPM/mode display
- Optional trackpoint on the other half (open question — pointing device and OLED share one location per half; deferred to order time)
- 3D-printed case color-matched to the Pelican-1170 cyberdeck enclosure aesthetic
Order target: holykeebs soldered kit tier (SMD pre-populated; switch + plate + case assembly remains ours). See ../prototype/keyboard-decision.md for the full decision and ../prototype/holykeebs-buyers-guide.md for the BOM checklist.
This decision changes two values in the canonical hardware spec / ADR-0024: key count (31 → 34) and PCB path (custom preferred → Sweep decided). Follow-up spec PR aligns Canonical Hardware Spec and ADR-0024 to this decision.
2. Custom-build knowledge is archived, not actioned
Section titled “2. Custom-build knowledge is archived, not actioned”The custom-keyboard research from this batch and prior work moves to background-knowledge status in ../research/:
- GOLEM hub — the master custom-keyboard knowledge index; its custom-build content is archived as fallback, its vintage-terminal-keyboard gallery (Reuters ‘85, Tatung ‘84, IBM 5155 Model F, Kaypro 10, Epson HX-20/40, DEC LK-201) is actively used as KN-86 keycap-legend / TUI typography aesthetic reference
- GOLEM plate manufacturing — DXF/KLE tooling pipeline, plate-material rankings (FR4 / steel / acrylic / aluminum / brass / PLA), 14×14mm switch cutout + 1.5mm plate thickness facts. Archived; Sweep ships with plates.
- KMK firmware and the GOLEM KMK guide — firmware fallback only; KN-86 uses QMK + Vial. Two specific KMK ideas survive forward: the drag-drop CircuitPython workflow as a UX-target contrast, and the NeoPixel diagnostic color codes as a deck-status LED idea worth scoping for KN-86 hardware.
- universal60plate — a single concrete example of a downloadable plate DXF; reference artifact only.
3. Firmware: QMK + Vial, not KMK
Section titled “3. Firmware: QMK + Vial, not KMK”Reasoning consolidated from keyboard-decision.md:
- KMK is on limited life support as of 2026 — its repo states “no longer actively maintained / limited life support”
- QMK is the dominant ecosystem for the Sweep family — community keymaps, layer idioms, tap-dance/combo conventions
- Vial provides GUI-editable keymaps layered over QMK — simplifies the 31-canonical-functions → 34-key + layers mapping work without rebuilding firmware on each iteration
The KMK drag-drop iteration UX is still the bar to clear for documenting the KN-86 owner’s firmware-flash experience. Vial closes most of that gap for keymap iteration; cold-flash UX needs careful documentation.
4. Enclosure north stars
Section titled “4. Enclosure north stars”The KN-86 shell aesthetic draws from three Batch-5 references plus the existing Batch-3 QRPπ template:
- QRPπ (Batch 3) — the structural template: Pelican 1170 + three 3D-printed inserts + unmodified shell
- Adamow’s cyberdeck STL (Batch 5) — silhouette reference; tactical-cyberpunk family, visible fasteners, matte finish
- TechNIK’s cyberdeck STL (Batch 5) — alternate-silhouette reference; different hinge/screen-mount approach; the second witness that triangulates the design space
- Sweep 3D-printed case (Batch 5) — inner housing; color-matched to the Pelican enclosure
Optional v2+ accessory: Stream Deck macropad (Dante) — small auxiliary 6-12 key slab bound to KN-86 verbs.
5. Aesthetic thread: vintage terminals as KN-86 legend/typography reference
Section titled “5. Aesthetic thread: vintage terminals as KN-86 legend/typography reference”GOLEM’s gallery of vintage terminal/portable keyboards (Reuters 1985, Tatung 1984, IBM 5155 Model F, Kaypro 10, Epson HX-20, Epson HX-40, DEC LK-201) is directly relevant to KN-86’s keycap legends and on-screen TUI typography. The vocabulary of period-correct fonts (Univers, Helvetica, condensed sans-serifs, custom domain typefaces) and the keycap-legend printing methods (silkscreen, dye-sublimation, double-shot) of this era are the prior art for ADR-0022’s locked KN-86 legend manifest.
Ties back to:
- Batch 2 Casio Organizer Retrofit — same vintage-terminal-typography family
- Batch 3 4TRK + octoscope’s
amberCRT theme — period-correct retro aesthetic commitment - Batch 4 BOOTSTRA.386 + NES.css — the DOS / 8-bit-era typography precedents
The KN-86 Deckline identity sits squarely in this multi-decade lineage.
6. Open questions tracked from this batch
Section titled “6. Open questions tracked from this batch”Per keyboard-decision.md:
- Key-mapping layer design — how the 31 canonical KN-86 functions (14-FN + 16-numpad + 1-TERM) map onto the Sweep’s 34 keys + QMK layers. Phone-layout numpad cluster from ADR-0016 doesn’t survive split geometry literally; the spirit needs translation.
- Pointing device commitment — trackpoint vs. TPS43 touchpad vs. Pimoroni trackball vs. none. Hotswap PCB defers the decision.
- Top-plate aesthetic — slim low-profile is the direction; specific material (FR4, PC, aluminum) and color TBD.
- Sweep-as-input + Pelican-as-chassis bezel design — keyplate cutout dimensions, depth tolerance, retention strategy. Own bring-up task.
7. Spec PRs this decision implies
Section titled “7. Spec PRs this decision implies”Two follow-up changes to canonical documentation:
- Canonical Hardware Specification (
kinoshita/CLAUDE.md) — update the Keys row to “34 physical keys (Ferris Sweep split layout, 17 per half), with the canonical 14-FN / 16-numpad / 1-TERM functions distributed across the 34 keys plus QMK layers.” Cite keyboard-decision.md. - ADR-0024 — record the keyboard-PCB-path decision change (custom preferred → Sweep decided; custom moves to background-knowledge). Add Batch-5 citation. Update the controller commitment from “Adafruit KB2040 / Sea-Picro fallback” to “holykeebs RP2040 (per Sweep order).”
These PRs are separate from this Batch-5 reference PR — that’s the right discipline: Batch 5 records the decision in the inspiration corpus; spec PRs align the canonical docs to it.
KN-86 build brief v6 (Batch 6 synthesis)
Section titled “KN-86 build brief v6 (Batch 6 synthesis)”Batch 6 has two pillars: the screen (ASCII rendering) and the board (Ferris Sweep case + keycaps). Both are smaller in scope than Batches 1–4 but land concrete deliverables — one a project-wide spec, one a hardware-reinforcement pair confirming the Batch-5 decision.
1. The screen — ASCII rendering as a first-class KN-86 capability
Section titled “1. The screen — ASCII rendering as a first-class KN-86 capability”The central Batch-6 deliverable is the project-wide KN-86 ASCII Effect Spec at effect/ascii-effects.md. It distills react-video-ascii’s prop matrix into the KN-86’s interaction grammar and points at libcaca as the on-device engine reference.
The KN-86 commits to a single project-wide ASCII visual language, codified in the spec:
- Default character ramp — verbatim from react-video-ascii’s 72-character ramp:
`.',-_:!;|\"~+^lr`\/L`>t<v=Tz?icf1{sIxY*jJno}CZyVwmSXRqM$O%#9&NW0Q@ - Default rendering mode —
charMode: shape(glyph-silhouette matching, not pure luminance) - Default density —
numCols: 150(between react-video-ascii’s project default of 250 and the KN-86 80-column grid), with carts rendering full-width using 80 instead - Three interaction event types:
:hover→:brighten— the focus cell + a trailing wake brighten relative to baseline (defaults:trailLen=15,brightness=2.0,radius=0.08,duration=1.0):click→:ripple— a brightness ring radiates outward from the commit cell (defaults:speed=3.0,brightness=1.1,duration=1.0):reveal→:random— load-time reveal in random cell order (defaults:type=random,duration=0.4)
Engine: libcaca-shaped pipeline on-device (CPU-only, well-tested, no GPU dependency). The same algorithmic shape composes with asciinator’s halfblock-▀ technique (Batch 3) and no-more-secrets’s decryption-reveal (Batch 4) under a unified (reveal ...) NoshAPI primitive.
Promote items added (extending the matrix’s items 1-57):
- 58. ASCII-effect grammar shipped in v0.1 — default ramp,
charMode: shape, three event types, NoshAPI primitives per the spec - 59.
(reveal ...)NoshAPI primitive unifies the per-cell character-flicker reveal (no-more-secrets) and the ramp-by-position reveal (react-video-ascii) under one surface with a:styleflag - 60. ASCII rendering performance budget on the Pi Zero 2 W to be measured during hardware bring-up; expect 15-30 Hz for full-screen renders. Documented in the spec’s open-questions section.
2. The board — Ferris Sweep case + keycaps
Section titled “2. The board — Ferris Sweep case + keycaps”Batch 6 confirms the Batch-5 keyboard decision (Ferris Sweep over custom) with two concrete reinforcing parts:
- Ferris Sweep v2 Case (Bubbleology) — free Printables STL, dimensionally specific to the Sweep v2 PCB. Alternative to the holykeebs supplied case — the path if we print our own (likely, since we’re already printing Pelican-1170 inset bezels) or want a custom color/finish coordination with the Pelican shell.
- Kailh Choc Ergonomic Sculpted Keycaps (mugika9) — free Printables STL, sculpted Choc-spaced caps. Documented alternative to MBK (canonical commitment); operator can swap post-build via the hotswap PCB without changing the order.
The canonical commitments stand:
- Sweep PCB: ordered from holykeebs per the Buyer’s Guide BOM checklist
- Sweep case: holykeebs-supplied OR our own Bubbleology print, color-matched to the Pelican shell
- Keycaps: MBK low-profile (canonical); sculpted Choc as documented alternative
Promote items added:
- 61. Sweep enclosure decision tracked: print Bubbleology’s v2 case unmodified, or merge it with the Pelican-1170 bezel as a single printed part per half. Decision deferred to bezel-design bring-up.
- 62. Keycap-swap path via hotswap PCB is sanctioned: MBK is canonical for v0.1; operators can swap to sculpted Choc (or anything Choc-compatible) post-build without firmware or spec change.
3. Pillars compose
Section titled “3. Pillars compose”The Batch-6 pillars compose with prior synthesis at three specific places:
- ASCII rendering composes with the boot animation (BOOTSTRA.386 + AetherTune): the boot animation can hand off into the first interactive frame via
reveal:diagonalfrom the new spec. - ASCII rendering composes with the CIPHER-LINE OLED visualizer (AetherTune): the OLED gains a
(draw-ascii ...)primitive alongside the FFT visualizer surface — cart-driven imagery + system-driven audio visualization, same display surface. - Sweep hardware reinforcements compose with the Pelican-1170 bezel design (QRPπ template + Adamow + TechNIK cyberdeck STLs): Bubbleology’s Sweep cases nest inside the Pelican on a printed registration feature on the bezel; the whole assembly reads as one coherent design.
4. North stars this batch
Section titled “4. North stars this batch”- react-video-ascii — the on-screen ASCII look + interaction-grammar reference
- libcaca — image→ASCII engine reference for the on-device implementation
- Ferris Sweep v2 Case (Bubbleology) — the printable case for the chosen keyboard
- Sculpted Choc keycaps (mugika9) — the touch, as a documented alternative to MBK
Screenshots
Section titled “Screenshots”Most screenshots are in place — see screenshots/README.md for the current inventory and any items still outstanding. The per-project markdown files embed the images directly. The prototype-folder shots live at ../prototype/screenshots/; the research-folder shots at ../research/screenshots/.
What to do with this folder
Section titled “What to do with this folder”- Cite it. When writing a spec or ADR, link to the relevant project file rather than re-justifying a pattern from scratch.
- Extend it. When another TUI catches the eye, add a file in the same shape and update the matrix.
- Promote from it. When a pattern earns a real spec, link back from that spec to the inspiration file so the lineage is traceable.
- Don’t render it. The folder is intentionally outside
docs/and outside the Starlight build. If a pattern needs to reach the rendered reference site, it does so via an ADR or runtime spec — not by moving these files.