</poke ai>
</the problem>
Pokemon TCG collectors are stuck between multi-TCG apps that go a mile wide and an inch deep on Pokemon coverage, and price-aggregator websites that aren't built for a camera-first workflow. Identifying a card, checking raw + graded comps, tracking it over time, and actually acquiring new cards takes five apps and a dozen browser tabs.
</my approach>
Built an iOS-first product that compresses the whole collector loop · identify, value, vault, watch, and acquire · into one app. Pokemon-only depth means every set, every variant, every graded tier from PSA / CGC / BGS / SGC. SwiftUI front, Supabase + 27 Deno edge functions back, Claude vision for recognition, and a provably-fair digital-pack engine that ships real cards. Live on the App Store.
</key features>
Camera-first scanning
Claude vision pipeline with a SHA-256 image cache returns the exact set and card number in seconds.
Raw + graded pricing
Live market prices across raw and PSA / CGC / BGS / SGC graded tiers, dual-source with failover.
Pack openings → real cards
Rip a digital pack in a holo reveal ceremony; the real card ships to your door. Five tiers, Stripe Apple Pay.
Provably-fair pulls
Each pool is committed to a published hash and the seed revealed after depletion · recompute any draw offline. Atomic inventory means zero overselling under concurrent rips.
Vault, decks + alerts
SwiftData vault with cross-device sync, format-legal deck building, and APNs price alerts on thresholds you set.
Earned-coins layer
Coins from rips, scans, and referrals · spent only on cosmetics, never sold, keeping the app clean of Apple's physical-goods IAP rule.
</what i learned>
Atomic Postgres locking (SELECT … FOR UPDATE SKIP LOCKED) is enough to guarantee no oversell under concurrent load · no distributed lock or queue needed for a retail-scale drop.
Splitting payment rails by Apple's own rules (StoreKit for digital, Stripe for physical) is the difference between an approved app and a rejected one · design the boundary in from day one.
Provably-fair commit-reveal buys all the trust of on-chain randomness with none of the gas, latency, or complexity. Match the mechanism to the product, not the hype.