Donald Cox

Five systems, one shop floor

The system
Dock intake, inventory sync, a production ledger, a shipping kiosk and a watcher, all on one self-hosted workflow engine at a precision manufacturer with an online storefront.
How it works
The model reads and code decides. Failures stop the order and go to a person. Each station is a small web app with an explicit contract.
Results
About 350 staff hours a year, estimated across seven routine automations, and the owner no longer has to be the link between systems.
My role
Architect and engineer, from design through production support.

What it replaced

People retyped part numbers between a desktop accounting system, a storefront and an operations workbook all day, and each retype could create a bad record nobody would find for weeks. The floor can't slow down, the team is small, and old and new systems have to run side by side.

How the five fit together

In. Dock intake reads pallet labels with a vision model, checks them against the supplier's packing list, and creates batch-traced stock records and accounting receipts. Pallet receiving went from 3 people to 1 on a phone, by my own count.

Counted. Inventory sync pulls stock from the accounting system three times a day and routes reorders to the right work station, which a person used to do by hand each morning, when it got done at all.

Made. The production ledger put a raw stock rack into a system for the first time, then tracks each part through stations, labels and accounting receipts. Its assistant can plan any action on the floor tab but cannot commit one: the server enforces a person's Yes.

Verified. The shipping kiosk photographs packed orders. A vision model reads what is in the box, and code compares that with the order system.

Watched. The watcher scans every five minutes in working hours for known failure classes. It looks above all for this one: the system said something was wrong and the work moved on. It reads the other systems without writing to them.

Goods move through intake, inventory sync, the production ledger and the shipping kiosk. A watcher underneath reads from all four. Dock intake Inventory sync Production ledger Shipping kiosk Watcher: read-only, raises a finding when a flag was ignored
Four systems move the goods. The fifth reads all of them and writes to none.

All five share one pattern. A self-hosted workflow engine connects everything through explicit webhook contracts. Each station gets a small web app in a container, so updating one container updates every desk. When a model reasons past evidence it read correctly, I add a deterministic check and don't reach for a better prompt, because a rule can be tested and replayed.

Results

WhatValueHow it was measuredTag
Staff hours returned per yearAbout 350Seven routine automations, on minutes per task I estimatedEstimate
Hosting avoided per year$9,000A vendor's list price for this volumeModeled
Automation runs a day1,200About, from 9,535 server runs in 8 daysMeasured
Reference intake packing slip36 of 36On real phone photosMeasured
Demand found on the wrong station101Found while designing the ledgerMeasured

Problems it surfaced, and what I did about them

A sync defect had frozen station assignments on an estimated 212 rows while looking healthy, which is why automation now stays out of columns people own. A dead AI step billed silently for 18 hours before the morning check and an audit found it, so that failure now has its own rule. Each watcher rule records the incident that created it.

Stack

Claude for vision, JavaScript, Python, Docker, a self-hosted workflow engine, a Raspberry Pi and small-form-factor PCs at the stations, and Claude Code for the build.

My role

I am the architect and engineer of these systems. I decide what gets built and how, set the guard rails, make the release calls and answer for the results in production. I direct Claude Code agents to write much of the code, and the tests, replays and watcher exist so each change is checked before and after it ships.