Alatriste & Cortes   acmeridian·co
Talk to a person →
← Showcase   ·   Case 01 of 03
Beta · 2026   Android · Kotlin · On-device scanner

Case study · § 01 · How we work

myTCG

An Android scanner for trading-card collectors. Point your phone at a card; the app names it, prices it, files it. Six games at launch, 229,000 cards in the local catalog.

Who built it
Both of us. Every line.

Stephen: design + engineering
Mike: stress-test + product calls

What it covers
Six TCGs · 229k cards

Pokémon (EN + JP), Magic,
Yu-Gi-Oh!, Lorcana, One Piece.

How it scans
On-device. No internet.

The whole catalog and the visual
model are bundled in the app.

Where it stands
Beta · shipping 2026

Validation corpus at 92% across
six games. Final tuning live.

CAMERA · LIVE · POKEMON-EN Charizard 004 / 102 · BASE SET [ HOLO ART ] Fire / Stage 2 · 120 HP 99 / WIZARDS / FIRST EDITION MATCHED · 0.97 · COMMIT? § COMMIT · CARD IDENTIFIED Charizard. 004 / 102 · BASE SET · 1999 PIPELINE OCR — read 004/102 · BASE Catalog — 1 match in 229k MobileCLIP — cos 0.92, top-1 Variant tag — clear (standard) VALUATION (eBay-comp · 90d) $215 LOW $180 · MED $215 · HIGH $260 PROCESSED ON-DEVICE · 0.8s · NO NETWORK MODEL · MOBILECLIP-S2 · APPLE STOCK WEIGHTS TCG · POKEMON-EN · USER · STEPHEN

I   What it does

A scanner for collectors.

myTCG identifies trading cards, prices them against the open market, and files them into an inventory. Six games at launch: Pokémon (English and Japanese), Magic, Yu-Gi-Oh!, Lorcana, One Piece. 229,000 cards bundled into the app. Beta, shipping 2026.


II   What we did about the hard part

The scanner refuses to guess.

The hardest part of building a card scanner isn't reading the text. It's making sure the read maps to the right card. Pokémon has released cards with the same name and same number across dozens of sets over thirty years. A 2025 promo can collide with a 2013 reprint. When a model gets close but not exact, most scanners ship the wrong commit anyway. We built ours around the opposite rule: a wrong answer is worse than no answer.

Every scan runs entirely on the phone. On-device OCR reads the card-number corner first. A 229,000-card local catalog gets queried against the read. Apple's MobileCLIP-S2, the open-source vision model from Apple's research team, handles visual matching against per-game embedding banks built from the catalog. Standard prints commit automatically when the cosine match is high enough. The ~1% of catalog entries with parenthetical variant tags (Pokemon Center Exclusive, EB Games Exclusive, alternate finishes) route through a user-picker before commit, because the typeface stamp on those cards is too small at thumbnail resolution to disambiguate by image alone. The pipeline never silently commits a card it isn't sure of.

FIG. II · CAPTURE PIPELINE — DETECT → WARP → GATE → MODEL
01 · DETECT EDGES 02 · WARP (HOMOGRAPHY) FOCUS ✓ GLARE ✓ 03 · GATE model. MOBILECLIP-S2 04 · IDENTIFY
By the time the model sees a frame, the rest of the pipeline has half-identified it.

Holofoil glare is what most card scanners can't handle. A model trying to read reflective ink at typical phone angles fails about a third of the time. The fix isn't a smarter model; it's geometry. Every capture goes through edge detection, perspective warp, and a focus-plus-glare gate before MobileCLIP sees a frame. By the time the model is asked, the card is rectified flat and OCR has already narrowed the candidate pool.

After commit, the card files into your collection with per-finish pricing pulled from TCGplayer's SKU-level data. Master Ball Holofoils get their own market price; reverse holos are priced separately from standard prints. Six TCGs share one binder; switch between Pokémon, MTG, Yu-Gi-Oh!, Lorcana, and One Piece without leaving the app. CSV export is on every tier, no paywall. The collection belongs to the collector, not to us.

&

Want a site built this way?

Same studio. Same two people. Talk to us.

Get in touch →