A Warehouse App Where a Pallet Cannot Be Put in the Wrong Place

Alton's floor staff work in gloves, holding a scanner, often unable to look at a screen while working through a receipt. Every pallet move is now scan-driven and validated by the server before it is accepted.

Start your project

The build

Alton is the mobile front end to the Alton Warehousing platform, built by Aipxperts in Flutter from a single codebase for iOS and Android.

It puts the full pallet lifecycle, inbound receiving, outbound picking, double-checkout verification, shipping and pallet lookup, onto a handheld device paired over Bluetooth with Koamtac KDC laser scanners. It reached version 2.1 after roughly a year of continuous releases.

The problem

Warehouse mistakes are quiet. A pallet received against the wrong order or staged to a location that does not exist does not announce itself. It surfaces weeks later as stock that cannot be found, and by then nobody can reconstruct which of a hundred movements went wrong. The specific failure points on this floor:

Rack location, part number, pallet ID, quantity or weight and FIFO date were all entry points where a typo becomes an inventory discrepancy.

Outbound picking had no verification gate, so an error left the building.

The operation is multi-tenant

Alton serves 3PL clients, Veritiv among them, and each client has different rules about whether pallets are counted by quantity or weight, whether part numbers are pre-filled, and what a worker is allowed to type rather than scan.

Devices are shared, which is a session security problem before it is a usability one.

There was also a physical constraint that shapes the whole design. A worker on a warehouse floor is holding a scanner, wearing gloves, and often cannot look at a screen while working through a receipt.

What we built

The governing rule of this build is that data enters by scan, and the server decides whether the scan is valid before anything is accepted.

Inventory Queue with separate inbound and outbound flows

Scan-and-get-order, barcode lists, rack-level search, put-on-stage, accept inventory and pallet replacement.

Double Checkout

A supervisor-authorised verification gate with order freeze and staging, so outbound accuracy is checked by a second person before anything ships.

Pallet Information

A location finder and pallet relocation, which is how a misplaced pallet gets found rather than written off.

Bluetooth scanner pairing

Live connection status for the KDC scanner, with camera-based scanning as backup.

FIFO date capture

Recorded at the point of receipt, where the information actually exists.

Client-specific configuration driven by server config

Quantity versus weight, pre-filled part numbers, PO numbers, typing permissions and characters to skip on scanned quantities all vary per client without separate application builds.

Session protection

A thirty-minute inactivity timeout, because these are shared devices passed between shifts.

The outcome

One codebase serves multiple 3PL clients with genuinely different counting rules, driven by server configuration rather than separate builds. The app reached version 2.1 through roughly a year of continuous releases.

Before
manual, error-prone pallet handling, with location, part number, pallet ID, quantity and FIFO date all typed by hand on the floor.
After
every step is scan-driven and server-validated before it is accepted. A pallet cannot be staged to a location that does not exist or received against the wrong order, outbound goes through a supervisor-authorised double-checkout gate, and a worker can run a full receipt without touching the keyboard or looking at the screen.

Tools and Technologies

Flutter
Dart 3.6
Custom Koamtac KDCReader plugin
BLoC and Cubit
GetIt
SQLite
REST API v2
Bluetooth
iOS and Android

Planning something similar?

If your floor still types what it could scan, the errors are already in your stock figures.

Start the conversation