← All projects

Playable demo · Web game

Sonatch app icon

Sonatch

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.

Open the game

Try it here

How little do you need to place a song?

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

  1. 0.2s
  2. 0.5s
  3. 1s
  4. 2s
  5. 5s
  6. 10s
  7. 20s

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.

Three ways to play 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.

01

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.

02

The first question is who with

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.

03

One song a day for everyone

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.

04

The moment you get it

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.

05

A room behind five letters

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.

06

The one who listened least wins

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.

Who knows the answer

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 server
the answer audio only

the title crosses once the round is resolved

The daily list is not shown either

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.

How it is built

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.