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 trivia game I built for Android and the browser, 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 719 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,357 world cities to pull from. The band side had no equivalent, so building a list of real, recognizable-but-not-too-obvious band names ended up being most of the actual work, and it kept growing well past the first working version.
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, band-by-decade, and band-by-city 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, offensive names, plain plural nouns like "Faces" or "Islands" that give the game away instantly since real cities are basically never named that way.
The real jump came from noticing Wikipedia keeps a "musical groups established in [year]" category going back to 1950, which turned out to be a much bigger and much less picked-over source than genre or nationality categories ever were. Between everything, the roster ended up at 15,119 band-only names plus those 719 "both" names, nearly 16,000 total, close to four times the size of the first working version.
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, and it runs in the browser now too, not just on Android. If you want to see the both-or-neither problem for yourself, it's up at bandston.com, or you can play it straight from the browser at bandston.com/play/ without installing anything.
