Your lists, your game
Paste the link of a public Spotify playlist and there is a game, up to a hundred songs per list. Sign in with Google or Apple and your lists and your streak follow you to any device.
Playable demo · Web game
Name the song on as little as you can bear
Sonatch is a guessing game. It starts with two tenths of a second, and every miss buys you a longer snippet, up to twenty. Whoever needs the least time wins. Play it alone, play the one song everybody gets that day, or open a room with a five letter code and throw in everyone’s Spotify lists.
Everything here comes out of the app running. The screens are one real game photographed as it went, and the snippet below is real audio, cut the way the game cuts it.
Try it here
This is the Sonatch ladder, working. Press play and you get two tenths of a second. Search the song in the box and pick it, the same way the app does it. If it says nothing to you, miss it or skip, and the next rung gives you more. The bar under the number takes you back to any point of what is already open.
0.2 s is all you hear right now
0.0 s 0.2 s
Nothing here matches. It is one of four.
Four songs here, and the catalogue is the whole of Spotify in the real game. What plays is the 30 second preview Apple publishes, asked for by your own browser: this site does not host a second of it.
The ladder is always the same. What changes is who else is climbing it and whose phone the song comes out of, and that is the difference between a game you play on the bus and a game five people play around one table.
Pick a list and rounds come one after another with nobody to wait for. Your misses pile up beside the ladder, each one marked with the rung it fell on.
Nobody else on screen: the ladder is yours alone.
Same room or three cities apart. The song is the same for all of you and it plays on every phone, but each of you opens the seconds you need, so the one who is sure early pays less for it.
Three players, three rungs: everyone is somewhere different.
For when you are all in the same place: the song plays on the host device only and everyone guesses from their own. The ladder is the room’s, so it climbs when nobody is left to answer, or when the host forces it.
One ladder and a vote to move it: nobody climbs alone.
Paste the link of a public Spotify playlist and there is a game, up to a hundred songs per list. Sign in with Google or Apple and your lists and your streak follow you to any device.
Pressing play does not start anything yet: first you say whether you are on your own or opening a room. That fork is the one the three modes hang from.
The same track for the whole world and a single go at it. Every rung you open adds seconds to your count and giving up costs thirty, so the good game is the short one.
Get it right and the song shows up whole, with its cover and a way to hear it in full. Your misses stay listed beside it, each one marked with the rung it fell on.
Everyone joins from their own phone and brings their own lists, so the pool is the three of you mixed together. It is also where the host says how it will sound, one phone each or all around a single device, and how long each round lasts.
At the end the seconds each player spent are added up and the smallest number takes it. The game itself is not filed anywhere: when the room closes, it is gone.
The browser is never told what is playing. The server holds the answer, hands out nothing but the audio behind an opaque address, and checks the guesses itself. The title travels once the round is resolved, which is when it stops mattering. Rooms work the same way with everyone else: what your phone shows is what the server decided to tell you, so nobody wins a round by reading the network tab.
the title crosses once the round is resolved
Which playlist the daily song is drawn from is in neither the code nor the site. It lives in a server variable, because knowing the list is knowing what today could be.
Next.js with React on the front and a server that owns every game. Rooms run in real time over server sent events, with no polling. The exact cut of a snippet is Web Audio work: a timer overshoots, and at two tenths overshooting doubles the clip. PostgreSQL keeps the bare minimum, two tables. One holds the accounts, which are optional and only know your lists, your streak and the name Google or Apple gives, never the email. The other holds the daily draw. It ships as containers behind a Caddy that terminates TLS, with a per IP request budget on every route.