Warehouse Management System (WMS)
The full warehouse cycle from receiving to dispatch for a large FMCG distributor — four client apps and live sync with an external ERP.
- 1 295
- commits
- 820
- source files
- 4
- client apps
- 3
- languages
Problem
The warehouse ran on paper sheets and Excel. Stock was never visible in real time, near-expiry goods mixed freely with the rest, and a picking error only surfaced once a customer complained. Orders from the company's ERP were re-keyed into the warehouse by hand — a permanent source of delay and mismatch.
Solution
I pulled the whole chain — receiving to dispatch — into one system. Goods are received with a lot and an expiry date, picking proposes the earliest-expiring lot automatically under FEFO, and the picker scans barcodes in an app on their own phone. Exchange with the company's ERP runs in a separate worker process: orders, products and stock sync on their own, and failures retry instead of vanishing.
Key capabilities
- FEFO: the earliest-expiring lot is selected automatically, and expired goods are blocked at receiving
- Wave picking — orders are grouped into waves and the route through the warehouse is shortened
- Offline queue: the mobile app keeps working when the connection drops, then replays actions in order
- One-profile-one-device session control, plus an audit log entry for every action
- Roles — administrator, controller and picker — each with its own interface and permissions
- Two-way integration with an external ERP: orders, products and stock synced by a background worker
- Four clients: a React PWA admin, a React Native Android app, a Capacitor PWA and a Tauri desktop build
- FCM push notifications and a trilingual interface (Uzbek, Russian, English)
- Load-tested with Locust under the conditions of a real warehouse shift
Architecture
A single FastAPI service backs four clients. Exchange with the external ERP runs in a worker separate from the API, so the warehouse keeps moving even when the integration slows down.
Clients
Scanner, offline queue, push
API layer
REST, session control
Domain services
Data & background
Queue, retries, crash recovery
Stack
Backend
Web
Mobile
Infrastructure
My role
Sole developer: architecture, backend, web admin, mobile apps, ERP integration, server deployment and load testing.
Client names, domains and server addresses are withheld for confidentiality.