Jake's Garage
← All projects
Software

Bandston

Most of what's on this site is stuff I've built with my hands: wires, drill bits, lenses. This one's different. Bandston is a mobile trivia game I built for Android, and the workbench was a laptop instead of a vise.

The premise is simple. You're shown a name, and you have three choices: City, Band, or Both. Most names are obviously one or the other. The whole game hinges on the ones that aren't.

Bandston home screen showing Play and Daily Challenge buttons
The home screen. Play, or the Daily Challenge if you want to compare your score against everyone else that day.

The hook

Boston is a city. Boston is also a classic rock band. Chicago, same deal. Those are the easy ones. The game gets interesting once you throw in names like Tomahawk (a city in Wisconsin, and a Mike Patton-fronted rock supergroup) or Phoenix (Arizona's capital, and a French indie pop band from Versailles). There are 566 of these "both" names mixed into the rotation, and they're deliberately the rarest of the three categories, so landing on one feels like a small event.

Bandston reveal screen for a Both answer with a gold glow effect
The reveal screen gets special treatment (a gold glow, a bigger fact callout) whenever the answer turns out to be Both.

The data problem

The city side was the easy part, since there's a real, public dataset of roughly 25,749 world cities to pull from. The band side had no equivalent, so building a list of a few thousand real, recognizable-but-not-too-obvious band names ended up being most of the actual work.

The first pass came from MusicBrainz's open metadata (an actual music database, not a scraped guess), filtered down to names that could plausibly be mistaken for a place. Once that source was tapped out, the rest came from systematically working through Wikipedia's band-by-genre and band-by-decade categories, pulling a name and a one-line fact for each entry automatically, then filtering out the obvious mismatches (redirects that land on the wrong page, facts that get truncated mid-sentence, that kind of thing). Between the two sources, the roster ended up at 3,528 band-only names plus those 566 "both" names, a little over 4,000 in total.

Daily Challenge and the leaderboard

Every player gets the same 25 questions on a given calendar day, seeded off the date itself rather than anything random, so there's no way to reroll a bad question by backing out and trying again. Scores feed a same-day leaderboard, backed by a small PHP/MySQL API I run on regular shared hosting, nothing fancier than that.

Bandston stats screen showing lifetime accuracy and a badge grid
Lifetime stats and a shelf of badges, most of which keep leveling up the more you play instead of unlocking once.

There's no account system: no email, no password. Each install gets a random device ID the first time you touch the Daily Challenge or Cloud Backup, and that's the entire identity. Optional cloud backup works off an 8-character recovery code instead of a login, so restoring progress on a new phone is just typing in a short code rather than remembering credentials for a game.

It's built in Flutter, Android only for now. If you want to see the both-or-neither problem for yourself, it's up at bandston.com.