Suprimentos (WMS)
Grupo Coagro's WMS in Flutter: inventory, receiving, checking, picking and slotting on Android data collectors, replacing the ERP vendor's app.

// Overview
Coagro's warehouse module: lot management, logistics data, picking addresses, inventory, receiving, checking, picking and auditing — on Android data collectors, on the web and on Windows.
// The challenge
The warehouse ran on the ERP vendor's data-collector app, a black box that was hard to adapt to the operation. Replacing it meant faithfully reproducing what it did, routine by routine, before improving anything — without stopping the warehouse.
// Constraints
Faithfully reproduce the ERP vendor's collector, routine by routine, before improving anything — without stopping the warehouse — and run on Android collectors, the web and Windows.
// Engineering decisions
Rules in the database
- Choice
- all data access goes through Postgres RPCs.
- Why
- the rules hold for any client — Android collector, web and Windows — without being rewritten in each.
- Trade-off
- business logic lives in SQL, outside the Dart code.
// The solution
A Flutter app with Riverpod and feature-first Clean Architecture, sharing theme, components and telemetry with CRM Loja. All data access goes through Postgres RPCs, so the rules live in the database and hold for any client. Workflows are barcode-driven, with blind counting and checking and accent-insensitive product search; distribution is by OTA APK updates, with no store.
My role
Lead developer (about 98% of commits): architecture, app, database (169 migrations), tests and distribution. A Grupo Coagro system, in partnership with NWERP.
Tech stack
// Screens



// Outcome and evidence
In use in the warehouse, with inventory, checking and picking already in production, at version 1.50 and with about 290 test files.
- test files
- ~290
- Supabase migrations
- 169
- of the commits
- ~98%