← All projects

BopBattle

A sing-along party game for two teams, played on a TV with the host on their phone.

2026 JavaScript, Cloudflare Workers

Play it →

The BopBattle start page, with numbered tiles hiding words and buttons to create or join a room.

Beat for Beat is a Norwegian TV music show where teams compete in song games. In one round, a line from a song is hidden behind numbers. The teams take turns picking a number to reveal a word, then have to sing a song that contains it.

For her Halloween party, my sister made her own version of that round, with the words written on pieces of paper and hidden behind numbers. It was great fun, but it took her ages to prepare. So for next time, I made a version that needs no preparation.

The board goes on a TV or laptop. One person scans a QR code and hosts from their phone, which shows the answer, a hint and the scoring buttons. Fitting other revealed words into your song earns bonus points, and singing the mystery song itself scores the most. There are 15 song packs to mix, from 90s and emo to Disney Channel and Christmas.

The main screen of a new room, showing the room code, a QR code, the rules and both team scores.

A few decisions I’m happy with

  • A way out of bad songs. If the host thinks a song won't work for this group, they can swap it for another one without the turn moving on.
  • No repeats. Songs a room hasn't played yet come first, so a second game on the same night doesn't replay the first.
  • Built for real phones at a real party. Accidental double taps are ignored, so the host can't skip a turn by mistake. If the host's phone dies, the TV can hand hosting to someone else.
  • Lyrics that are actually right. Every song follows a few rules, like the lyric line not giving away the title, and the tests check all of them. A separate script checks each line against a lyrics database, because a misremembered lyric spoils a round. The song list stays out of the public repo, since it contains lyrics.
  • Settled the look before building. I mocked up a few visual styles, and later the Christmas theme options, as static pages to compare side by side before building the real thing.

It has no dependencies and runs on Cloudflare Workers, with one Durable Object per room. Lookups are rate limited, so guessing room codes is slow.

Source code on GitHub

Next: Dr. Zerg