Skip to content

Work

Client work

AI-Assisted Order Entry Tool

Order intake that reads the email so nobody re-keys it

Built for Rox Hospitality, the wholesaler where I ran operations. The tool is complete and tested; it is not yet in production there.

The problem

At Rox Hospitality, orders didn’t arrive in one tidy format. They came as a CSV from one customer, a PDF from the next, a photo of a handwritten sheet from a third, and plain text in the body of an email from everyone else, at random times, for next-day delivery. Every customer used their own jargon for the same products, so order entry lived in the sales manager’s head. When he forwarded an order to anyone else, it read as gibberish, because nobody else had years of history with that one customer. The re-keying was slow, and the mistakes were expensive: a wrong product on an order is a wrong product on a truck.

What I built

A small web application that watches the order inbox and does the reading, with an alias database that holds what used to live in one person’s memory: which customer calls which product what. Each email is picked up once, its attachments opened, and the order lines pulled out as structured data. Every line is then matched against the product catalogue with a confidence score, and, more importantly, against its closest alternative. A match only counts as confident if it clearly beats the runner-up. Anything that doesn’t wait in a review queue, where a person confirms the top match or picks the right one in a single click. Every decision, automatic or human, is written to an audit log with its score, so a bad match is traceable rather than mysterious. Confirmed orders are exported as a CSV in exactly the shape Cin7 imports.

The stack

Python and Flask for the application, the Claude API to read each email and extract the order lines, SQLite for the catalogue, aliases and audit log, and Docker with Caddy to run it. Cin7 is the system of record it exports into.

What changed

Orders go from inbox to a Cin7-ready import without anyone re-keying them, and nothing exports until a person has confirmed the uncertain lines. The test suite runs against synthetic fixtures with the model calls stubbed, so it costs nothing to run and never touches live data.

The same confidence-gated review queue applies anywhere a model proposes and a person must confirm: invoice coding, lead qualification, contract clauses.

Proof

WalkthroughVideo

System pipelineExtraction to export

The five-stage pipeline diagram: mailbox intake, Claude extraction, matching with score and verify, human review queue, Cin7 CSV export, with a note on each module.

Review queueHuman in the loop

The review queue: each uncertain order line shown with its best match, its score, and its runner-up, with confirm and choose-different buttons.