← Back

AI Systems

PokeGrade

2026-07-06

A physical-world arbitrage problem

Professional card grading is a real economic decision wrapped in a slow, analogue process: pay a fee, wait weeks, and find out whether the card was worth submitting at all. PokeGrade is built around that decision for Pokémon cards specifically. Submit a card that comes back lower than expected and the grading fee is a straight loss, sometimes worse, since a low grade can mark a card down against its raw value. That's a computer-vision and judgement problem before it's anything else, and I wanted to see how far you could get automating the first call: is this card worth the cost of grading.

PokeGrade verdict screen for a Pikachu ex: front and back photos identified with high confidence, and a clear Skip verdict reading "Don't pay to grade this one", limiting pillar centring

The output is a decision, not a number: submit, check in hand, or skip, with the limiting pillar named and the confidence stated.

What it measures, and what it doesn't

PokeGrade splits card condition into two categories that get treated very differently.

PokeGrade mid-screen: a staged pipeline detecting the card edge, measuring centring, reading the card, then ruling corners, edges and surface before weighing the verdict

Centring is a hard pillar: it can be measured directly and deterministically from a photo, so the app does exactly that, no model judgement involved.

Measured centring overlay on the card photo: 58.5/41.5 on the worse axis with detected borders drawn, flagged at medium confidence and mapped to roughly a PSA 9 on centring

Surface, edges and corners are soft pillars. They resist a clean measurement and need a human-style judgement call, so PokeGrade hands them to a Claude Opus 4.8 adjudicator instead of pretending a formula can substitute for an eye.

Every grading call runs through an EV/verdict ledger, so the reasoning behind a grade is traceable, not just the output. That's the difference between a tool that estimates a grade and one that actually supports a submit-or-skip decision.

PokeGrade inspect-in-hand checklist and expected-value ledger: targeted checks for surface, corners and edges, then card value, grading fee and the 9-to-10 spread netting out the upside of submitting

When the photo can't settle a pillar, the app says so and hands you a targeted in-hand checklist instead, with the expected-value maths laid out beside it.

The rule that matters most

A single flat photo cannot support a confident top grade, so PokeGrade is built to refuse one. It will not hand out a 10 on the strength of one image, no matter how clean the card looks. Knowing when a system should decline to answer turned out to be a harder and more useful design problem than getting the easy calls right, and it's the decision that actually makes the arbitrage call trustworthy. A tool that always gives you a number is easy to build and easy to be misled by.

Status

Live, tested against 71 cases, grading real submissions.

Stack

Next.js frontend, local FastAPI engine, Claude Opus 4.8 for the judgement calls.

github.com/AdenCJM/PokeGrade

Building something where this would help? I'm easy to reach.