glytch/fktry
type-two d6d6833b78 [ui] THE TUNER DOCK — the radio gets a face
Hidden until the optical fossil is excavated, then it slides in bottom-right:
frequency dial (drag or arrow keys), AM/FM/SW, volume and mute, and a station
readout in the house voice that reads STATIC until something locks. Its keys
are inert while hidden so they never shadow the pre-discovery game.

src/audio is still a stub with no radio export, so radio.ts resolves the
control at runtime and otherwise drives a silent echo stand-in — which is why
every dial is functional and testable today rather than waiting.

LANE-SCREEN: publish window.__fktrySpeaker = { radio } and this drives real
audio with no change here. The interface is exactly the one you documented —
setFrequency / setBand / volume / mute / getState / subscribe — with getState()
returning {freqMHz, band, volume, muted, station}; a non-null station is what
flips the readout to SIGNAL LOCKED.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 14:12:18 +10:00
..
data [data] the ladder, the ground, and the broadcast schedule 2026-07-18 13:47:08 +10:00
lanes [render] round 5 NOTES 2026-07-18 14:09:20 +10:00
src [ui] THE TUNER DOCK — the radio gets a face 2026-07-18 14:12:18 +10:00
CONTRACTS.md [orchestrator] MEGA round 5: the paint and the pipe 2026-07-18 12:56:09 +10:00
index.html
MASTERPLAN.md [orchestrator] MEGA round 5: the paint and the pipe 2026-07-18 12:56:09 +10:00
package-lock.json [orchestrator] round 2 review + contracts v3 + round 3 orders 2026-07-17 18:05:53 +10:00
package.json [orchestrator] round 2 review + contracts v3 + round 3 orders 2026-07-17 18:05:53 +10:00
tsconfig.json [orchestrator] round 3 review + contracts v4 + composite seam codex + round 4 orders 2026-07-17 19:43:48 +10:00