Chapter 8

The Kitchen Learns to Read

April 1 – April 26, 2026 • Receipt Scanner


For years, the kitchen ran on paper. Receipts went into a shoebox. Once a week, somebody — usually a volunteer with too many other jobs — would type each line into a spreadsheet. Inventory was a guess. Reimbursement was a delay. The bookkeeper got a stack of crumpled paper at month's end and made it work.

This chapter is the story of teaching the kitchen to read its own receipts.

1

PDF In, Inventory Out

From paper to parsed

A receipt PDF is dropped onto the page. ColdFusion extracts the text. A parser walks line by line, picking out store names, dates, items, quantities, prices. Items match against the kitchen inventory. The matched ones get APPLIED to the weekly snapshot. The unmatched ones offer to be ADDED as new inventory items, with a department dropdown right there.

When the regex parser failed — faded receipts, weird formatting, BJ's and Costco's peculiar layouts — Vision Parse took over. The receipt image was sent to a vision model, which returned structured JSON. The system always had a fallback. The shoebox started to empty.

2

The Three-Stage Workflow

In Review → Submitted → Complete

The original screen showed every receipt at every stage in one undifferentiated list. It worked, but it didn't guide. Late one evening John said the dashboard didn't tell him what his job was. So a new header appeared: three numbered chips — Review → Submitted → Complete | All — with a per-stage instruction line: "open each receipt, fix any items, then Mark Submitted. When the week is reviewed, the bookkeeper takes over."

The clicks dropped. The confusion ended. The workflow buttons — Mark Submitted, Mark Complete, Reopen — got placed not just on the main list but on the items review page and on the printable Match Report. No more hunting back through menus.

The Nested-Form Bug

A "Set Store" dropdown silently refused to save. The cause: it was wrapped in its own <form> tag, which sat inside the bulk-delete form. HTML5 strips inner forms without warning. Fix: convert to AJAX with green-flash feedback. A real lesson, written into the convention file.

3

The Match Report

Print, sign, reimburse

The final artifact is a printable two-column report: parsed items on the left, the live receipt PDF on the right. KPIs at the top — receipt total, item total, difference, matched/applied count. A signature block at the bottom. A status stamp in the header (In Review, Submitted, or Paid) rotated like a hand stamp.

The bookkeeper now opens a clean PDF report instead of a shoebox. The kitchen team marks Submitted with one click. The grandmother who could barely use a computer can run the whole flow from her phone — and that, more than any technical detail, is what this chapter was actually about.

What Got Built

Kitchen_Receipts + Kitchen_ReceiptItems schema, PDF text extraction pipeline, regex parser, Vision Parse fallback, Auto-Match against inventory, Apply-to-Week aggregation, three-stage workflow with stage chips, Add-to-Inventory inline review, AJAX Set Store, printable Match Report with embedded PDF, status stamps, accessibility-corrected filled buttons throughout.

The kitchen had been a paper system in a digital world. It became, in less than a month, a digital workflow that respected paper’s role — print when you need to, sign when you need to, but never type a line item again. The dreamer had pointed at the shoebox and said "make this stop." It stopped.