Private Reserve
A palate log that has to survive a dark, loud bar — and private club rooms where the verdicts get argued out.
- Year
- 2026–
- Role
- Design + Development
- Live
- Website

Private Reserve is a spirits log with a memory. You record what you drank and what you made of it, and later you can actually find it again — which is the part most tasting notes never reach, because they end up in a notes app nobody opens. It also has Speakeasy rooms: private clubs where a group logs the pours going around and pins the verdicts worth arguing about. SwiftUI and Supabase underneath, with a Pro tier through StoreKit.
The capture flow is the product
The context matters more than it seems from a desk. A bar is dark, it's loud, you're standing, one hand is holding a glass, and the person across from you is mid-sentence. You have a few seconds of socially acceptable phone time before you become the person on their phone.
Every tasting app we looked at was designed as though the user were sitting down with time to spare. Long forms, required fields, a rating scale plus a nose section plus a finish section, all presented as one wall to be filled in. That design produces a log that stops after the first night, which is why so many people have three tasting notes and a lot of forgotten whiskey.
So the constraint that shaped everything else: a pour has to be capturable in seconds, standing, one-handed, and enrichable later. Get it in now with a name and a gut reaction, add the rest at home if you feel like it. An entry that never gets finished is still a better artifact than an entry that never got started.
Fast in, detailed later
Capture opens straight into the thing you need: what it is and how it landed. Name the pour, mark the reaction, done — that's a complete entry, and the app treats it as complete rather than nagging about empty fields. Everything else lives on the same screen, further down, optional, reachable without switching modes or opening a second sheet. Nothing blocks on a lookup, either; if a bottle isn't recognized, the name you typed is the name, and it can be reconciled later.
Context fills in what it can. Time, place, and the room you're in if you're in one, so the entry has enough scaffolding to be findable later without anyone typing it. A photo takes one tap, and a bottle shot turns out to be the most reliable memory aid in the app — people recognize a label months after they've forgotten every word they wrote about it.
The enrichment path matters as much as the capture path. Two days later, on a couch, the entry is still there and still editable, and that's when the real note gets written, the one with an actual thought in it. Splitting capture from reflection is the only version of this that survives contact with a bar.
A private room is a different object than a feed
Speakeasy rooms are closed groups: a set of people, a shared log of what's being poured, and a place to pin the verdicts worth arguing about. No public feed, no discovery, no followers. That sounds like a smaller version of a social app, and it isn't — it's a different object with a different set of problems.
What you gain is shared context. In a room where everyone was there, a note can be three words and still land, because the group already knows which glass you're talking about. A public feed can't do that. It has to explain itself to strangers, and explaining yourself to strangers is how a personal log turns into performance.
What changes is the surface you're responsible for. A public feed needs ranking, reporting, blocking, and somebody to answer for what's on it. A private room needs membership and revocation to be exactly right — who can invite, what a removed member can still see, what happens to their entries — and it needs those enforced in the database rather than in a view, because the entire appeal is that what's said in the room stays in it. Smaller surface, but what's left of it is unforgiving.
Modeling taste without turning it into a form
Taste is subjective, structure is what makes it retrievable, and those two facts pull against each other. Free text is what people will actually write and is nearly useless six months later. A rigid schema — pick your nose from this list, rate the finish one to ten — is searchable and is precisely what people abandon by the third entry.
What we landed on keeps a small structured spine and lets the rest be prose. A handful of fields that are cheap to fill and worth a lot at query time — what it was, roughly what kind, how much you liked it, where you were — and then an open note that can be a paragraph or a single word. Search runs over both, so a half-remembered adjective gets you back to the entry.
It's a compromise and it shows at the edges. Two people describing the same pour will file it under different words, and no amount of schema fixes that. The bet is that a log full of loose, honest entries beats a rigorous one that's empty, and that the structured spine is enough to get you back to where the real thought lives.
The honest version of a paywall
Pro runs through StoreKit. The question that took longest wasn't technical — it was what genuinely belongs behind it versus what has to stay free for the app to make any sense at all.
The rule we settled on is that your own log is never paywalled. Logging pours, searching your history, and getting your data back out are what the app is for, and metering them turns a personal record into a hostage. Pro is for things that extend the app rather than restore it: deeper club-room features, photo avatars, and the parts carrying a genuine per-user cost, like stored images.
That's a narrower paywall than the standard playbook, which is to cap entries and count on the sunk cost. It converts worse and it's the only version we'd want to use ourselves. A tasting log's value compounds with age, and an app that holds your history behind a lapsed subscription has quietly become a worse notes app.

