A hub-as-runtime client. Reads api/v1/state.json, sends user steer + practice events back. Phase 2.
api/v1/state.json
Stub. Will populate with Web Audio API + ACF2 pitch detection (matching music-transcription-monitor) once Phase 2 ships.