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.
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.
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.
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.
