The problem

Unredeemed gift cards, vouchers and coupons are one of the largest silent transfers of consumer money to retailers. It's not a fraud problem - it's a filing problem. The value sits in a WhatsApp thread from six months ago, a screenshot buried in the camera roll, a plastic card in a drawer. By the time you remember it, the expiry date has passed. Some keep a spreadsheet of their vouchers, and the manual entry time and effort tend people to drop or forget it.

What Pocket does

Pocket is a mobile wallet for coupons, vouchers, gift cards and store credit. The core interaction is: share a message or take a photo - the card files itself.

Then Pocket does the one thing that turns filing into money:

  • It warns you before the money evaporates. Seven days out. Three days out. Tomorrow. This is the feature people tell their friends about, because it's the moment the app hands you back cash you had already mentally written off.
  • It knows what's left. A gift card you've used twice isn't worth its face value anymore. Pocket tracks partial spends, so you know what you're actually carrying.
  • It tells you where to spend it. Every card is matched to real store locations, so when you're out, you can see which of your money is spendable within a few minutes' walk.
  • It works at the register. Barcode on screen, scanned, done.

Gemini is the whole product, not a feature

The extraction problem is genuinely hard and it is what killed every previous coupon wallet. Gemini reads the image or the text and returns a complete card: which store it's for, what it's worth, what's left on it, the code, the barcode, and - the field that actually matters -when it dies.

How we built it

React Native and Expo on the front end, so one codebase ships to both platforms. Supabase for the backend, with per-user data isolation enforced at the database layer rather than trusted to app code. Gemini 2.5 Flash handles every card capture, called server-side so the key never ships inside an app binary — and the same call that reads your card is the call that enforces the free-tier limit, which means the AI and the business model are literally the same code path. Google Places turns every merchant name into real, mappable store locations. Subscriptions run through RevenueCat; product analytics through PostHog, with a hard rule that card numbers, PINs and codes never enter an analytics pipeline under any circumstance.

Business model

Free tier is the whole useful app: unlimited cards, manual entry, balance tracking, nearby map, expiry notifications, JSON export, and 10 AI scans per year. PRO unlocks unlimited AI scans, ad-free, premium themes, and advanced reminders. The anchor is unlimited scans, because scans are our only real variable cost - the price of the product tracks the price of the AI. Later lanes are a single non-hostile banner on free at scale, and merchant/affiliate placement targeted from aggregate data only. User-level data is never sold or shared.

Challenges

The failure that cost us the most time was invisible: Gemini's default reasoning budget was quietly eating the response allowance and truncating longer cards mid-output, everything looked healthy right up until the data silently wasn't. Switching it off for a pure extraction task fixed the truncation and cut our cost per scan at the same time. Good bug, expensive lesson.

The second was more philosophical than technical: designing a data model where a user's own deleted items stay visible to them and invisible to everyone else, without ever weakening the isolation guarantee that makes a wallet trustworthy in the first place.

The third was learning to measure before rewriting. A chunk of what we assumed was our app being slow turned out to be the physical distance between our servers and our users. Measuring first saved us from rebuilding something that wasn't broken.

What's next

Turn on Play billing and convert the 60 users already in the funnel; ship iOS; gift-network catalog and move themerchant side from catalog to partnership, using aggregate most-tracked-store data to target affiliate BD.

Built With

Share this project:

Updates