skladER — cross-dock warehouse system
Web CRM for the office and an Android app for warehouse staff: receiving, pallets, shipping and AI invoice recognition
The problem
A wholesale distributor tracked receiving and shipping in Excel and on paper. The system became the single source of truth for deliveries, pallets and shipments: goods are received on a phone, sorted by destination and loaded by scanning.
What we built
- Mobile receiving: camera barcode scanning, counts in boxes or units, damage, shortage and surplus with photos, discrepancy report as PDF
- Invoice recognition from photos (Russian TORG-12/UPD forms): AI drafts the delivery, matches the supplier by tax ID and creates products; the office just reviews
- Allocation matrix (item × destination) with conflict highlighting
- Pallet building with server-side destination checks, scan-to-load shipping, manifests and packing lists
- PDF labels for pallets and products (thermal and A4 sheets), Excel exports
- Roles and permissions, audit log, office notifications, the CRM embedded in the app with one-tap sign-in
Engineering
Offline-safe queue: retries never double-count
- Offline-tolerant operation queue on the phone: each operation carries a UUID, retries are never double-counted, and stock changes are applied as increments inside row-locked transactions
- Self-learning product matching: confirmed invoice-line mappings are remembered; the LLM model and a monthly spend cap are configurable in the CRM
- NestJS 11
- PostgreSQL 17
- TypeORM
- Next.js 16
- shadcn/ui
- TanStack Query
- Expo / React Native
- zod
- MinIO (S3)
- pg-boss