← Back to builds

AI Systems

PokeGrade

· 3 min read

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

Want one of these pointed at your own problem? I'm easy to reach.