Stack
From a shoebox of cards to a catalogue
The idea was to take photos of trading cards and automatically produce the structured product data you need to sell them: the name, the set, the condition, the attributes that matter to a buyer. Doing this by hand for a large collection is mind-numbing and error-prone, which made it a perfect candidate for an image-to-data pipeline.
A pipeline, not a single prompt
The mistake would have been to throw the whole image at a model and ask for everything at once. Instead I broke it into stages, each doing one clear job, so I could test and fix each stage independently. A clean pipeline is far easier to debug than one giant prompt that is either right or wrong with nothing in between.
- Stage one identifies the card; stage two extracts attributes; stage three normalises them into the product schema.
- Each stage outputs structured data the next stage consumes, so failures are localised and visible.
- Ambiguous cards are flagged for review rather than guessed, because a wrong listing is worse than a missing one.
Normalisation is where the value is
Reading a card was the flashy part. The genuinely valuable part was normalisation: making sure the same set is always spelled the same way, the same condition grades map to the same values, and the output always fits the product schema exactly. Buyers and downstream systems do not care how impressive the vision step was; they care that the data is consistent. I learned that an image-to-product pipeline lives or dies on its boring normalisation layer, and that splitting the work into small, testable stages is what made the whole thing trustworthy enough to actually list real products from.
Lessons learned
- Break image-to-data work into small, testable stages instead of one giant do-everything prompt.
- Normalisation is where the real value lives. Consistent output matters more than an impressive extraction.
- Flag ambiguous cases for review. A wrong product listing is worse than a missing one.
- A staged pipeline localises failures, so you fix one stage instead of debugging a black box.
