Listening to a CB channel is often passive: you park on a frequency, do something else, and snap to the mic when you hear your call or a interesting skip. On desktop that is easy. On iOS, Safari treats background web audio as a privilege, not a default. Lock the phone, switch apps, or let the tab idle and the stream you were monitoring can stall or vanish. Parked listening is GCCR’s answer — a deliberate mode for staying on channel when the platform would rather you were not.
The problem
Mobile Safari aggressively suspends timers, throttles JavaScript, and reclaims audio resources for foreground
apps and native media. A keyed radio client cannot rely on “just keep the WebSocket open.” Users expect
lock-screen controls, headphone button behavior, and recovery after an incoming call — the same survival
skills native streaming apps learned years ago. Without parked listening, iOS operators experience false
silence: the channel is still live, but their tab stopped playing it. That erodes trust faster than any
feature gap.
What GCCR does
- Parked listen mode. An explicit operator choice to prioritize staying on channel audio over background tab dormancy — with clear UI when you are parked versus actively keying.
- Playback survival. The client fights AudioContext suspension and stalled decode paths using platform-appropriate media strategies, then resumes when iOS allows.
- Lock-screen and headset cues. Where iOS exposes media session hooks, GCCR surfaces transport state so you know the channel is still live without staring at the tab.
- Graceful recovery. After interruptions — calls, route changes, Bluetooth handoffs — the app attempts to rejoin live audio instead of leaving you on a dead line.
- Honest limits. When Apple kills audio anyway, you get visible status rather than silent failure; re-tap and recover instead of guessing.
Why this is hard in a browser
Native apps own AVAudioSession; PWAs rent it under rules that change between iOS versions. You cannot assume
one trick works on every phone: silent switches, Low Power Mode, and tab discarding all interact. Parked
listening is a continuous negotiation with the OS — not a checkbox. We combine media element lifecycle,
user-gesture unlock paths, and reconnection logic so monitoring feels like tuning a radio, not babysitting a
fragile web experiment.