Selected work

Three builds, and what changed after them

Client names are withheld where the contract requires it. We are happy to walk through architecture and code on a call, including the parts that did not work first time.

3 of 3
Pharmaceutical logistics · 14 months

Cold-chain monitoring for a cross-border distributor

Vaccine shipments were being written off because temperature breaches were only discovered on arrival. Paper loggers gave no way to intervene while a truck was still moving.

We built a battery-powered logger with a two-year life, a LoRa gateway per depot, and a Node.js ingest tier that scores every reading against the product's stability profile. Dispatchers see a breach forming in the React console and reroute before the load is lost.

ZephyrLoRaWANFastifyTimescaleDBReact
Read the full case study
4,200loggers in circulation
63%fewer spoiled shipments
26 mobattery life on one cell
8 minmedian time to intervention
Utilities · 9 months

Metering platform for a regional energy retailer

The retailer inherited three meter vendors with three protocols, and a billing team reconciling exports by hand every month.

We normalised all three into one message schema at the edge, then rebuilt the ingest path in Node.js to absorb the 15-minute reporting spike without dropping a reading. Billing now pulls from a single API, and field engineers use the same console to commission new meters.

Node.jsKafkaEMQXKubernetesReact
Read the full case study
18kmeters reporting
9k/speak messages ingested
3 → 1protocols the billing team sees
4 dayssaved per billing cycle
Industrial manufacturing · ongoing

Predictive maintenance across two CNC plants

Spindle failures stopped lines without warning, and the maintenance window was booked around a calendar rather than the state of the machine.

Retrofit vibration and current sensors feed a gateway that runs a small anomaly model locally, so a machine can flag itself even when the plant network is down. Planners get a ranked worklist each morning instead of an alarm at 2am.

ModbusGreengrassTensorFlow LiteNestJSReact
Read the full case study
31%less unplanned downtime
210machines instrumented
11 daysaverage warning before failure
2plants live, third in rollout

Your project probably rhymes with one of these

Most builds are a variation on measuring something remote, moving it reliably, and putting it in front of someone who has to decide.

See engagement models