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. Built and tested on real Rox order formats; ready to run alongside an existing process.
I've worked closely with Jack for three years at Rox Hospitality, and he's played a big role in the growth of Rox playing a key role in how we operate, across operations, inventory and business development. He implemented a number of systems and process that were integral in keeping the day to day operations running smoothly. He's hardworking, sharp, and great with people. I was sorry to see him go, but I'm excited to see him bring that same practical mindset to helping other businesses with automation.
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. On a test set of real order emails, it correctly matched or flagged every line. The automated test suite runs against synthetic fixtures with the model calls stubbed, so it costs nothing to run and never touches live data.
For a business of Rox’s size, that would mean about 5 to 10 hours a week of order entry nobody has to do by hand.
The same confidence-gated review queue applies anywhere a model proposes and a person must confirm: invoice coding, lead qualification, contract clauses.
Proof

