Skip to content
back to selected work

Receipt Reader

C#.NET 10TypeScriptReactAzure Document IntelligenceBicepPlaywright

Receipt scanner · Azure Document Intelligence, nothing stored

LIVE

My first go at anything AI, and deliberately the smallest thing that could work: upload a receipt, get a table. What turned out to be interesting is not the reading — Azure's prebuilt-receipt model does that — it is what the app does when the model cannot read it.

We barely have receipts lying around, so the test data was whatever I could find: one very creased receipt in my wife's purse. Photographed as it sat on the table, sideways, the model scored it 0.258 against a 0.50 threshold and the app refused it. Rotated upright — same paper, same creases, nothing else changed — it came back PRIMARK, $10.00, one line item. Both are in the walkthrough, in that order, because the refusal is the more useful half.

Nothing is kept. The upload streams through memory to Document Intelligence and is never written anywhere, the extracted rows live in your browser's localStorage, and the service holds no API key to leak because key authentication is switched off on the resource entirely. There is no database, and nothing to breach.

The Primark receipt: creased thermal paper on a dark surface, reading PRIMARK, Cool Springs Galleria, one item at $10.00 with $0.00 tax.
Shown the right way up. The photograph I fed it was on its side — the whole difference between 0.258 and a clean read.
▶ play walkthrough
~24s against the live model, not a stub: the sideways receipt refused, the upright one read, the row surviving a reload, then removed. Click to pause.