Skip to content

PulseDeck

Tech stack: Rust, Ratatui License: (see repo)

PulseDeck is a terminal-native internet radio player styled as a retrowave cassette deck. The main window is laid out like a tape unit — a large PULSE DECK header with an A-SIDE panel that “plays” the currently selected stream — and the rest of the chrome (library browser, signal/visualizer pane, status row) hangs off that central metaphor. The aesthetic does real work: the deck/tape/signal vocabulary tells you what each pane is for before you read a single label.

  • Strong visual metaphor as the organizing principle. The whole UI commits to the cassette-deck conceit — header type, pane names, even the labels for actions. KN-86 has a comparable opportunity: the “Deckline” identity is right there in the name, and rows 0/24 are already chrome we control. Treat the firmware status/action rows as the device’s “tape labels,” not as generic header/footer text.
  • Three-way layout cycling (b). Split / Library-Focus / Signal-Focus. Same content, three working modes. Maps cleanly onto KN-86’s 80×25 grid: e.g. split (mission board + cart pane), focus-mission, focus-cart. One key, three modes, no menus.
  • Audio visualizers as a first-class surface (v). RTA spectrum + an oscilloscope (real on a buffered source, simulated when the source can’t supply samples). For KN-86 this is the CIPHER-LINE OLED’s natural job — a YM2149 register/level visualizer there would land hard.
  • 6-theme system. Retrowave + four Catppuccin flavors + an ANSI-following “Terminal” theme that defers to the user’s term colors. KN-86 is monochrome amber, so the palette part doesn’t transfer, but the structure (a named theme registry the user can cycle) does — for KN-86 think of it as glyph/box-art treatments and CIPHER-LINE animation profiles, not colors.
  • Preview-before-commit UX. Space auditions a stream; Enter saves+plays. The “audition vs. commit” split is widely applicable — cart preview before insert, mission preview before accept.
  • Resilience patterns.
    • Circular buffer for the signal pane so the visualizer never starves.
    • Fade transitions across state changes so swaps don’t feel abrupt.
    • Undo (u).
    • Compact-screen protection below 80×24 — explicit guard rail, not a “may break” hope.
    • Graceful error recovery (network dropout doesn’t kill the deck).
  • Persistent session state. Last station, last theme, last layout — restored on launch. Aligns with KN-86’s Universal Deck State concept.
  • Keyboard-first. Single-key bindings carry most of the UI: b cycles layout, v cycles visualizer, u undoes, Space previews, Enter commits.
  • Layout cycling instead of windowing. No tile-manager complexity. The user gets three pre-composed working modes and rotates between them.
  • Audition / commit split. Distinct keys for “let me hear it” and “make it the current thing.” Reduces accidental state changes.
  • Cassette-deck chrome. PULSE DECK masthead, A-SIDE panel, tape-labeled panes.
  • Box drawing for structure. Heavy use of Unicode box-drawing as actual UI scaffolding, not just decoration.
  • Visualizers in-pane. RTA bars and oscilloscope traces rendered with block / braille characters inside the signal pane.
  • Theme registry covers palette + accent treatment. Themes change more than the base color — they change the overall feel of the deck.

PulseDeck cassette deck UI

  • The CIPHER-LINE OLED is the obvious home for a PSG-driven visualizer (spectrum or scope). Worth scoping as a non-cart firmware surface — the Bare Deck Terminal could host it on the SYS tab.
  • KN-86’s monochrome amber means PulseDeck’s palette work doesn’t transfer literally, but its theme-as-aesthetic-mode idea does. Candidate KN-86 “themes”: glyph treatment (Press Start 2P at 1×2 vs. native 12×24), box-art density, CIPHER-LINE animation profile, scanline / ghost overlay strength.
  • The “compact-screen protection below 80×24” rule is a useful framing for KN-86: the 80×25 grid is fixed on device but the desktop emulator is resizable. Mirror PulseDeck’s rule — refuse to draw below the canonical grid, show a “WINDOW TOO SMALL” card instead of degrading.