Inspiration

Card breaks and live auctions on TikTok move fast. A card flashes on screen, the host says a number, and you have about five seconds to decide whether it's a deal. Collectors end up with a second phone open to eBay, typing card names while the stream keeps rolling. I wanted the price to come to you instead of the other way around.

What it does

WhatPrice tells you what a card is worth the moment you see it.

  • Camera scan: point the camera at a Pokémon card, a graded PSA/BGS/CGC slab, or a sports card and get a market price, recent eBay sold comps with photos, and 7- and 30-day trends in seconds.
  • Live scan: start a Live session and WhatPrice reads cards straight off a TikTok LIVE, Whatnot or any stream on your screen. Prices land in the Dynamic Island and a floating Picture-in-Picture window, so you never leave the stream.
  • Graded slabs: the label is read automatically and the card is priced at that exact grade, with sold comps for that grade only.
  • Collection: inventory, portfolios, wishlist, purchase price and gain/loss, plus a history of every card you have scanned, ready to re-price any time.
  • Dynamic Island actions: recheck a price or add a card to your collection without opening the app.

How I built it

WhatPrice is a native SwiftUI app with three targets: the main app, a ReplayKit Broadcast Upload Extension, and a WidgetKit extension for the Live Activity.

  • Screen capture: the broadcast extension grabs about one frame per second, downscales it, and hands it to the main app through an App Group container. The PiP window keeps the app alive in the background so the pipeline can keep running while TikTok is in front.
  • Identification: frames go to a Supabase edge function that routes by what you're scanning. Raw TCG cards are matched by image against a card catalog graded slabs have their label read by a vision model, and everything else goes through an OpenRouter vision model that returns an item name and an eBay query. On-device Apple Vision OCR is the fallback.
  • Pricing: a second edge function pulls real sold listings and card catalog market prices and trends (Scrydex). A shared price cache means any user's fresh lookup is reused by everyone for an hour, which keeps API credits in check.
  • Island updates: the price function pushes to the Live Activity over APNs, so the Dynamic Island updates even when the app isn't in the foreground.
  • Monetization: RevenueCat is the single source of truth for who is Pro. Every purchase routes through a RevenueCat purchase controller so the two never disagree. Pro gates Live scanning, the on-screen overlays, and full portfolio history, on monthly and annual plans.

Challenges I ran into

  • Keeping content on the Dynamic Island during a TikTok LIVE. Static island content would blank out while a LIVE was playing. The fix was a minimal animated glyph plus push-driven alerts, which iOS keeps drawn.
  • Recognizing the right card. Cards in the background would replace the card in the host's hand, and image match couldn't place every card. I added a confidence gate and fall back to reading the card's name when the match is unsure.
  • Memory and battery during Live scan. A broadcast extension has a tight memory ceiling, so frames are downscaled aggressively and recognition runs at most every five seconds, with re-pricing capped at every five minutes.
  • Two-phase pricing. Catalog prices from a card ID are instant; comps take longer. The island shows the catalog price immediately and swaps in the median when it arrives, so there is never a blank wait.

Accomplishments that I'm proud of

  • WhatPrice is live on the App Store with a working Pro subscription.
  • Live scan actually works on real streams, hands-free, with prices on the island in seconds.

What I learned

  • How far you can push ReplayKit, Live Activities, and PiP together to build an overlay iOS doesn't officially give you.
  • Shared caches and confidence gates matter more than model choice when you're paying per call.

What's next for WhatPrice

  • Price alerts and a watchlist with target prices (the schema is already there).
  • More categories beyond cards: sneakers, vintage, and anything else that gets held up to a camera.
  • Android, and a web view of your portfolio.

Built With

Share this project:

Updates

Submission history