back to the projects

Music Bingo

A bingo grid on every phone. Who won is still settled out loud.

Music Bingo screenshot
Music Bingo
the paper grids kept running out

Overview

Music Bingo is a multiplayer blind test for real parties. One person creates a game, picking a theme, a grid size and a win rule, and shares a QR code. Everyone else joins from their phone with a first name and gets their own grid of band names. The presenter plays the tracks from a console and the others tick their grids. It's a paper bingo card on a phone, and it stops there on purpose. The app doesn't detect wins, doesn't stop cheating and doesn't store accounts. Anyone can shout BINGO, and the room decides.

Why I built this

We used to play this at parties with printed grids and a marker, and the paper always ran out before the evening did. I wanted the same game on phones, without an app that referees for you. The software deals the grids and plays the music, and the humans keep the arguing.

Features

  • Game in three taps. Pick a theme, a grid size of 3×3, 4×4 or 4×5, and a goal, one line or a full card. Then share a QR code or a 4-character code.
  • One grid per phone. Every player joins with a first name and gets their own draw from the theme's pool. There's no account, password or email, and identity is a random token in localStorage.
  • Presenter console. A separate screen plays the tracks, keeps the play history and shows every player's card and BINGO claim in one place.
  • Humans decide who won. The app never declares a winner. The console only flags ticked bands that were never played, and the presenter rules out loud.
  • Themes are data. Each theme is one JSON file. The rock / pop-punk one has 63 bands with YouTube IDs and start offsets. Adding a theme means adding a file, with no code change.

Tech stack

Frontend

React 19 TypeScript Tailwind 4 Vite vitest

Backend

Node 22 node:http node:sqlite Zero npm deps

Infrastructure

Docker Nginx Caddy GitHub Actions