Inspiration
My father is a serious whisky collector, the kind of enthusiast who can tell you the story behind every bottle on his shelf. But those bottles live at home. Whenever he was at a bar, a shop, or a friend's house, he had no way to carry his collection with him: no way to check what he already owned, remember what he loved, or easily know if the dram in front of him was one worth chasing.
Years ago I started building him something to fix that. Life and school got in the way, and it sat unfinished — one more project I always meant to come back to. About a year and a half ago I started a self-improvement journey. I had some habits I'm not proud of, so I began running, chasing the Chicago Marathon that is now just 70 days away. It taught me about discipline, and how hard work gets the job done — so when the RevenueCat Shipaton came around, it gave me the push I needed to finally finish what I started.
Whiskium is dedicated to him.
What it does
Whiskium is Shazam for whisky. Point your camera at any bottle and it identifies it instantly. No typing, no guessing. From there you can:
- Scan & identify any label with on-device OCR, barcode reading, and Claude AI vision for the hard, ornate labels.
- Build your cellar — track every bottle you own and wishlist the ones you want.
- Rate & remember — capture tasting notes, a flavor wheel, and your own palate profile.
- Discover your next favorite through a community-built catalog that grows with every scan.
- Share — a social feed, tasting events, and achievements for fellow enthusiasts.
- Blind (or not) whisky tasting — choose drams from our whisky selection, invite guests, rate the whiskies inside the app, and get detailed information.
It's the collection my father never had in his pocket, now for every whisky lover.
How we built it
- Flutter for a single, polished iOS app.
- Supabase (Postgres, Row-Level Security, Auth, Storage, and Edge Functions on Deno) as the backend.
- Claude AI (Haiku 4.5) for label recognition: a Supabase Edge Function sends a compressed photo plus the on-device OCR text to Claude with a structured-output schema, so it returns a clean, catalog-ready record — name, distillery, region, cask, ABV, and tasting notes.
- Google ML Kit for fast, free, offline OCR and barcode scanning — the AI only steps in when the label defeats OCR.
- RevenueCat for monetization: a "Reserve" subscription for power users, plus rewarded ads that grant extra scans — a fair value exchange instead of a hard paywall.
- Offline-first (read cache + a write queue that syncs on reconnect) and full i18n in English, Spanish, and French.
Challenges we ran into
Ornate labels break OCR. A dark, engraved Macallan label reads as pure garbage on-device. The fix was a hybrid pipeline: OCR + barcode first (free, instant), Claude vision as the smart fallback — and feeding the AI the OCR text so a small, cheap image is enough to identify the bottle.
Making AI recognition affordable. At first, every 1,000 scans cost about \$4–5. Anthropic bills vision by image tokens, which scale with pixel area:
$$\text{image tokens} \approx \frac{w \times h}{750}$$
So the single biggest lever was resolution. Shrinking the label photo's longest edge from $1568\text{ px}$ to $768\text{ px}$ cuts the area — and therefore the token cost — by roughly
$$\frac{768^2}{1568^2} \approx 0.24 \quad (\text{about a } 4\times \text{ reduction}).$$
Combined with handing the model the OCR text the phone had already read, and asking it for only the fields I needed, this brought the cost down to about \$1.3 per 1,000 scans — cheap enough to be a core feature, not a luxury.
Monetization + Apple review. Wiring RevenueCat and rewarded ads so free users still get a great experience, and shipping the whole thing through App Review, was painful and long — but it was well worth it.
Building the catalog honestly. This might be the biggest challenge of all. Scraping other apps' catalogs is illegal and unethical, so I refused to do it, which meant starting from scratch. To get things going, I seeded the app with my father's own collection (which is not small!). The real challenge is ongoing: getting a community of whisky lovers to keep adding the bottles the world hasn't catalogued yet.
Accomplishments that we're proud of
- A whisky app that actually recognizes bottles — even the stylized ones, end to end.
- AI vision at about \$1.3 per 1,000 scans, bounded by per-user caps and a rewarded-ad model.
- A community catalog that grows from real user scans, with automatic de-duplication.
- Offline-first, multilingual, and live on the App Store.
- And most of all: after years unfinished, I actually finished it. Whiskium is real, and that is the most important thing.
What we learned
- RevenueCat for subscriptions and rewarded ads — turning monetization into a value exchange instead of a wall.
- When to lean on the device (free, instant, offline) versus the cloud (smart, but paid) — and how to blend the two.
- The payoff of hard work and consistency, in order to finish what you start.
What's next for Whiskium
- whiskium-vision — a visual-matching engine (CLIP embeddings) to identify a bottle by its shape and label art, not just its text.
- A bigger catalog and richer social features.
- And the moment I'm building toward: handing my dad his phone, watching him point it at a bottle, and seeing his whole collection finally right there in his pocket.
This one's for you, Dad.
Built With
- admob
- anthropic-claude
- claude-haiku-4.5
- dart
- deno
- flutter
- go-router
- google-ml-kit
- postgresql
- revenuecat
- riverpod
- sentry
- supabase
Log in or sign up for Devpost to join the conversation.