Multi-Channel Card Commerce Engine
A full commerce backend that runs a real sports-card business across four sales channels—keeping thousands of cards priced, listed, and in sync, with AI parsing receipts and turning phone photos into finished listings.
The Challenge
The Break Room sells trading cards across eBay, TCGplayer, Whatnot, and the Loupe marketplace—plus its own storefront. Every channel has a different API, or none at all. And the moment a card sells in one place it has to disappear everywhere else, instantly, or you oversell a one-of-one item you no longer have.
The Approach
I built a Next.js + Supabase backend that became the single source of truth for inventory, cost basis, and listing state. A sale on any channel triggers atomic cross-channel delisting; a self-healing reconciliation job enforces one simple, bulletproof rule and recovers on its own when a session dies. Where a channel had no public API—TCGplayer, Loupe—I drove it with headless-browser automation. Claude vision parses order-confirmation emails into cost basis and turns an iPhone photo of a card into a complete eBay listing: player, year, set, grade, title and all.
The Outcome
Thousands of cards stay synced across four channels with effectively zero oversells. Listing a card dropped from minutes of manual data entry to seconds. The same database powers the public storefront, live sealed-box "break" reservations, and accounting sync—a one-person operation running like a team.
Key Details
- Single source of truth in Supabase: holdings, listings, sales, FIFO cost basis
- Atomic cross-channel delist on sale (eBay, TCGplayer, Loupe, storefront)
- Self-healing reconciliation jobs prevent overselling one-of-one cards
- Headless-browser automation (Playwright) for channels with no public API
- Claude vision: receipt → cost basis, and phone photo → finished eBay listing
- Dozens of scheduled jobs for sync, health monitoring, and price refreshes
- Provably-fair randomization for live sealed-box "break" slot sales
- Stripe checkout, QuickBooks accounting sync, and Klaviyo lifecycle automation