MORSE

Guide · How it was made

MORSE — rhythm keyed into the static

A fictional coast station, VKW, holding the 0200 watch on 500 kc/s. The page has one job: put a real key under the visitor's hand. Hold it and a WebAudio carrier sounds, your marks scroll down a live waterfall among the noise, and a decoder that only understands timing reads your rhythm back as text.

Palette — the radio room at 2 am

Every colour is an object in the room, and the ink/line split is enforced: valve amber is reserved for marks, lamps, and the carrier — never body copy.

#0B1418watch-night — the unlit room, ground for everything
#E6DCC3radium-dial cream — dial paint; headings and the operator's tape
#D98E32valve-glow amber — LINE/MARK only: carrier, lamps, hero code
#3FA08Cwaterfall teal — phosphor noise floor and the decoded tape
#C2CCC6derived body ink — copy at 4.5:1+, so amber can stay a mark
#A5442Eoxide red — the clock's silence sectors and failed ¿ characters

Type

Archivo Narrow (500/600/700) is the engraved equipment label: condensed, upright, all-caps with wide tracking for panel titles and the two-line hero. IBM Plex Mono is everything the machine says — the decoder tape, frequency scale, lamps, and WPM readout. The one moment of typographic bravery is the hero's second line of type: the headline re-set in its own Morse, letter by letter, as amber dits and dahs.

Techniques

The signature is the full signal chain: key → carrier → waterfall → decoder, with one shared edge pipeline so the auto-keyer, your hand, and the noise bursts are all decoded by exactly the same code path.

Iteration log

  1. Pass 1 · Craft

    Driving the decoder caught two real bugs the load-probe missed: the state probe double-counted the current tape line (decoded read "CQ CQCQ CQ"), and at low frame rates the auto-keyer applied the next key-down before gap resolution ran, merging letters. Fixed by committing gaps with exact timestamps inside key-down. Also: tightened the hero so the waterfall enters the first viewport (padding 78→54 px, headline three lines→two), shortened both figure captions to single lines, hid the spacebar hint under 640 px, and aligned the ZQD ghost to its printed 501.5 frequency.

  2. Pass 2 · Depth

    Upgraded ghost GNW from random blips to a genuine keyed VVV DE GNW loop; added ionospheric band-breathing (a 0.64–1.12× amplitude swing) and slow propagation fade to the ghosts; made the VKW·500.0 carrier label glow while the carrier is actually up. Re-drove the key after each change — a keyed ·−· still decodes as R.

  3. Pass 3 · Hardening

    Chanel rule: removed the third, unlabeled ghost station — two labeled stations carry the story. That exposed a hardcoded ghost-count loop, fixed. Final 19-check headless suite passes: auto-decode reads "CQ CQ CQ DE" from the live pipeline, keyed ·−· prints R, max QRN corrupts clean dits with spurious edges counted, no audio before a trusted gesture, 375 px shows no overflow with nav and wordmark in-viewport, reduced motion serves a fully decoded settled frame, zero console errors.

Concept in three sentences

MORSE gives the visitor a coast station's key on the international calling frequency and refuses to fake the rest. The decoder measures rhythm — two mark lengths, three silences — so what appears on the tape is genuinely what your hand sent, and what the noise floor takes from you is genuinely lost. The audience is anyone who has never felt that code is touch.