A request arrives with an optional story and enters a published five-song lineup; the DJ summarizes the story over the intro. Everyone connected hears the same song at the same point, and when nothing is queued a curated catalog fills the slot.
No audio is served. Nothing is streamed or proxied. Each client opens the official YouTube embed of the current song and seeks to the position the server reports. The server holds a playback time, a five-song lineup and a DJ script.
The service runs on a static catalog file and a hosting platform with no scheduler and no persistent process. The architecture follows from those two constraints.
The client is a single HTML file with no build step. It polls the server every ten seconds and acts on the response in four ways.
The base score is minutes waited, which on its own is first come, first served. Conditions add to it, so a later request can be scheduled earlier; waiting time keeps accruing, so every request is eventually played. The weights are read from a table at scheduling time, and every decision records its winning score. An operator pin overrides the order for one song.
| Condition | Weight | Rationale |
|---|---|---|
| Minutes waited | +1 / min | The base term. Alone, it is first come, first served |
| Has a story | +40 | Stories go first. Fixed by policy |
| Requester is listening now | +30 | A story goes out while its sender can hear it |
| Same song requested by several | +10 each, cap 30 | Played once; every requester is named |
| First request from this sender | +15 | Newcomers are scheduled ahead of repeat requesters |
| Song not aired for a week | +10 | Variety |
| Same sender aired in the last two songs | −20 | Prevents one sender from dominating the lineup |
| Same song aired in the last twenty | −50 | No near repeats |
Current values. Because each decision logs the score that won, the weights are re-tuned from the log.
A request is a song plus an optional story and an optional name to be called by. Whatever form the song arrives in, it is resolved to an embeddable video before it can enter the lineup, and the requester never picks the video.
The DJ speaks over the first seconds of a song while the music is ducked. The script is generated in Korean and English in one call, and every listener hears the language of their interface. The voice is synthesized on the server and cached, so every listener hears the same take. Listeners who prefer music alone switch the DJ off on their device.
The figures below are fetched from the live catalog file when this page loads. They are the pool the server schedules from when the queue is empty.
Lists: My Play List 241, Apple Music 531, My K-Pop 90. Every entry carries performer, lyricist, composer, a note in Korean and English, and its source. Lengths come from the curation sheet, not from the player.
Scripts, voices and story screening all depend on external services. If any of them fails or does not answer, the song still plays on schedule, because every step has a fallback.
Shared listening over embedded video has hard edges. Below is where they are.