Media, broadcast & mission
A 24/7 radio station with a scheduling brain of its own.
An 'app-as-brain' rotation engine over a broadcast stack: song-lifecycle logic and DMCA compliance enforced in code.
An internet radio station was running on a website frozen since 2019: a decade-old WordPress install with two page builders fighting each other, no working analytics since 2023, and a separate legacy audio stack driving playout. The music rotation and the listener requests that make the station distinctive lived trapped inside that aging system.
We split the station into two systems: a broadcast engine running six channels off one ~41,000-track library, and a purpose-built “brain,” a Next.js/Postgres application that decides what plays next on every channel at each track boundary. The brain is a real scheduling system: a nightly weighting model, a song-lifecycle state machine (audition → current → recurrent → gold → rested → retired) with an append-only audit trail, intraday momentum and fatigue auto-rest, artist separation, a multi-armed-bandit exploration lane, and, enforced inside the selection code, DMCA §114 rotation limits plus a “never sell airplay” firewall that fails the build if ad data ever touches the scoring path. Around it: a listener web experience with a “why is this playing?” explainer, an account-based request economy with a free daily credit floor (never pay-to-play), and an SDK-free Stripe checkout with zero PCI surface. We migrated 26,803 legacy listener accounts and 3.4 million historical requests.
- The station can measure and safely change its own product for the first time since 2019, off a frozen WordPress and legacy-audio stack and onto infrastructure built for it.
- Fairness and legal compliance, DMCA §114 limits and never-sell-airplay, are enforced in code, so the station can’t accidentally violate its own rules.
- Rotation quality jumped measurably: short-window repeats of top songs fell from ~23% to near zero, and a request-padding exploit (one source casting 17% of “votes”) was eliminated.
- 26,803 listener accounts and 3.4M requests migrated intact. The audience relationship and history carried forward, not reset.
tracks, six channels
listener accounts migrated
historical requests migrated
short-window repeat rate
Client name and identifying details withheld by design. Every figure here is drawn from the system we actually delivered.
More case studies
All workMembership & advocacy · Organization-wide platform
One operating platform for a 600,000-supporter organization.
ReadData architecture · Coordinated back-office systems
Four department systems that finally agree on who someone is.
ReadCommunications · Deliverability engineering
A self-hosted email operating system, built to survive Gmail.
ReadYour work would get the same discretion.
Tell us what's breaking. We'll tell you whether we've solved something like it. And if we take it on, your name stays yours.
Start with a diagnostic