~/home~/about~/projects~/ventures~/contact
[← back to projects]

</poke ai>

────────────────────────────────────────
[COFOUNDER][iOS APP][LIVE]
swiftuiios 17+swiftdatasupabasedeno edge functionspostgresqlstorekit 2stripeapnsposthogclaude visionnext.jsvercel

</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.

[← back to projects]