The challenge
A third-party warehousing operator was receiving inbound shipments against printed manifests. A team checked pallets on the dock, marked quantities in pen, and someone keyed the sheet into the stock system later — sometimes the same day, sometimes not. Any discrepancy between what the manifest promised and what actually arrived was noted in a margin, and whether it reached the client depended on whether anyone remembered to raise it.
Putaway had the same gap. Stock physically moved to a rack location that only the person who moved it knew, so picking depended on institutional memory and searching. Cycle counts were done against a printout, which meant the count itself was a snapshot of a system state that had already moved on by the time the sheet was reconciled.
The warehouse building was the practical constraint: connectivity is unreliable deep in the racking and on the dock, so any solution that assumed a live connection at the moment of scanning would fail exactly where the work happens.
Our approach
We built an offline-first mobile app for handheld devices covering receiving, putaway, transfers, and cycle counts. The app holds the working set of data it needs locally and records every action as a queued, timestamped event, so a receiving team can work through an entire inbound shipment deep in a dead zone and have it applied in order once the device reconnects. Nothing in the workflow waits on the network — the scan is confirmed against local data and the sync happens behind it.
Conflict handling was the design problem worth solving properly. Because events carry the device time they occurred at and a unique identifier, replaying a queue is idempotent and ordered, and an event that can no longer be applied cleanly — a location that was reassigned while the device was offline, a count against a since-adjusted quantity — surfaces to a supervisor as a resolvable exception with its full original context, rather than being applied blindly or discarded.
Receiving is checked against the expected manifest line by line, so a short, over, or damaged quantity is recorded as a structured discrepancy with a reason code and a photo taken at the dock, attached to the receipt itself rather than written in a margin. Putaway captures the destination rack location at the moment stock is placed, making location a recorded fact rather than something a picker has to know. Cycle counts are performed as blind counts against a system-generated task list, so the counter records what is on the shelf without being shown the expected number first.
Outcome
Receiving, putaway, and counting now happen on the device where the work is done, and the stock system reflects them as soon as the handheld reconnects rather than after a keying step. Discrepancies are captured at the dock with a reason and a photo attached to the receipt, and rack locations are recorded as stock is placed instead of relying on the memory of whoever moved it.


