Problem, approach, outcome
01Problem
AI extraction demos usually stop at the JSON. In real use the model is sometimes wrong, and a wrong answer delivered confidently is worse than an honest “not sure.” I wanted to see what it takes to put a vision model in front of a real deliverable, an email a customer would actually receive, without letting its mistakes through.
02Approach
One vision-model call turns the photo into a schema.org Order. The output is constrained to a JSON schema and validated before it reaches the UI, so a bad read surfaces as “couldn’t read this receipt,” never as a half-filled form. The model marks every field it’s unsure of, and an arithmetic check (line items → subtotal → total) catches missed lines instead of quietly “fixing” them. A correction screen puts the photo beside every field, so a person fixes what the model got wrong before the email renders.
The model is configuration, not code: one OpenAI-compatible adapter, prototyped locally on Qwen3-VL 8B in LM Studio, now running on hosted models through OpenRouter, with a measured comparison still to pick the production model.
03Outcome
Working end to end in private preview; public launch follows model testing.


