PickIt puts everyone in one room, gives them the same deck, and lets them swipe in private — then shows the group what they actually agree on. This is the story of how it got made.
It's a familiar evening. A group of us, a sofa, four streaming apps open, and forty minutes gone. We weren't struggling because there was nothing to watch — we were struggling because there was too much, and no fair way to find the thing everyone could live with.
What struck me is that the failure wasn't taste. It was process. Someone suggests a film, someone else pulls a face, and the suggestion dies before anyone admits they'd have been happy with it. The loudest opinion sets the anchor. The quietest person agrees to something they don't want. Everyone's tired by the time a decision arrives.
So I stopped asking "how do we find a better film?" and started asking a different question: how does a group hear everyone without it turning into a meeting? That one reframe changed the whole thing — from a recommendation problem into a coordination problem.
Opinions arrive one at a time, so each one anchors the next. Debate, not decision.
Someone still has to write the options — and that person quietly shapes the outcome.
Slow, and everybody sees your choice. Nobody votes honestly with an audience.
Once it was a coordination problem, the shape of the answer fell out quickly. I worked through it in a few moves.
Left for no, right for yes. Zero explanation needed. But instead of using swipes for browsing, they become a private input to a group calculation.
The maths only means something if everyone voted on identical options. The host picks the category and filters; the room hands the exact same cards to every phone.
Simultaneous and hidden kills the anchoring problem. No one sees anyone else's answer until the room reveals the overlap.
No accounts, no profiles. A short room code and an emoji is enough for something you're doing right now, in the same room. Every room disappears after 24 hours.
This was the real lesson. A perfect match is lovely and rare. Most of the design effort went into what happens when the group doesn't agree.
Everyone liked it. Confetti, and you're out the door.
More than half agreed. The mob has spoken.
A quick head-to-head re-vote between the joint leaders.
Reshuffle, widen the net — or let fate roll the dice and end it.
I'm not a Flutter developer. I designed PickIt and then built it conversationally — describing what I wanted, reading what came back, testing it on a real phone, and correcting course. Hundreds of times.
That turned out to be a real design constraint, not a shortcut. Because I could get a working screen in minutes, I ended up designing in the running app instead of in a static mockup — which is how the awkward states got caught. Things you only notice when it's in your hand: what happens when someone joins late, when a person leaves halfway through, when the room is full, when the API returns nothing.
The parts that took longest weren't the swiping. They were real-time sync (everyone must see the same deck and the same progress), the failure paths (reconnects, ghosts, stragglers, empty results), and the unglamorous release grind — icons, store metadata, privacy strings, and a few rejections to learn from.
Every room code maps to a single Cloudflare Durable Object. It owns the deck, the members, the votes and the result — so all the phones stay consistent, and there's no database to keep in sync.
Films come from TMDB; restaurants try Google Places, then OpenStreetMap, then bundled data. The deck degrades quietly rather than showing an empty screen.
Create a room, share the code, everyone swipes, the room decides.


Built and working
Not claimed
I'd rather show a real product with honest gaps than invent a results slide.
Free. No account. Nothing saved.