Case Study - Your music taste gives you away.
Quem Botou Essa? turns the call’s playlist into a file of suspeitos. A realtime music party game on the web and in a native SwiftUI client, connected to the same room.
- Client
- Quem Botou Essa?
- Year
- Service
- Product design, web and iOS development

Overview
One playlist. A room full of suspeitos.
In Quem Botou Essa?, 3 to 12 friends on a call pick songs in secret. In Classic mode, each preview plays for 30 seconds: the group points at a suspeito, but only learns who is culpado at the reveal.
A correct guess earns one point. The person who picked the song earns one per correct guess — but zero if everyone gets it right. Dixit-style scoring rewards a choice that says something about you without giving everything away.
- Quem Botou Essa?
- Realtime room
- Web + native iOS
- Motion + Motion+
Process
From the call to a file of suspeitos.
Playful noir
A near-black stage, an amber spotlight and cream cards with riso grain. Coral for the verdict, acid lime for the vote. Bricolage Grotesque, Geist and Geist Mono give the file its voice.
One shared room
Convex holds picks, votes and scores. Live presence and reclaiming a seat with the same nickname let returning players keep their song and accumulated score.
The game in a browser
Next.js 16 takes the group from the lobby to Apple Music search, from a preview to a guess. A song’s owner only reaches the clients at the reveal.
A native SwiftUI client
The iOS app uses convex-swift to join the same room as the web. Creating, choosing, voting and following the reveal all use the same game state.
Time becomes vinyl
The record’s ring drains the 30 seconds. The needle lifts when voting closes; the next record drops in. Motion and Motion+ choreograph the carimbo, titles and scoreboard reordering.
In the browser
From the first song to the last carimbo.

Open the room

The suspeito lineup

Pick in secret

Time on vinyl

The culpado carimbo

Who acertou?
Mobile web · native iOS
The same room, in your hand.
The screens below show the web at 390 × 844: lobby, vinyl and reveal. The composition rearranges to keep the suspeitos and voting within reach of a thumb.
The native client is built in SwiftUI on the same Convex backend. Web and iOS players join together; the app plays audio with AVPlayer, pauses in the background and resumes at the current point in the turn.

Suspeitos in your hand

Vinyl on a phone

Verdict on a phone
Stack & rules
Convex holds the room. Music keeps the time.
Friends on the same call, on web or iOS
The vinyl ring counts down in Classic mode
An original cast shared by web and iOS
who-put-that.mellofattura.com
Technologies
- Next.js 16
- Convex
- Motion
- Motion+
- Apple Music API
- SwiftUI
- convex-swift
- Vercel
Convex owns authoritative state, transitions and presence. Next.js 16 and SwiftUI are clients of the same room. Search uses Apple Music API in production and iTunes in local development. Motion and Motion+ set the pace on the web, hosted on Vercel.