Customer Order Tracking
Order → production → collection tracking for a manufacturing workshop. Windows, offline.
How this was measured: 725 tests executed and verified. In production use.
- CLIENT
- Flutter desktopWindows
- STATE
- sipariş durumukısmi tahsilat
- lisansoffline doğrulama
- STORE
- yerel veritabanı
- OUTPUT
- fiş
- rapor
Problem
The workshop owner tracked which stage an order was in and who still owed money in a paper notebook. Orders had many line items, production stages differed per customer, and partial payment was normal: one order could receive three separate payments.
The critical constraint: there is no constant internet at the workshop and the user is not technical. A cloud solution does not work there.
Constraints
- No constant internet → offline is a first-class requirement.
- Non-technical user → setup and backup must be part of the solution.
- Production stages differ per business → cannot be hard-coded.
Architecture decisions
Offline first, no cloud
All data in local SQLite. No network, no privacy concern, fast start.
Cost: No multi-computer use. Deliberate.
User-defined production stages
Stages are not hard-coded; defined per line item and advanced in order, so the workshop's own process fits the software.
Cost: Validation load on stage transitions sits in the app.
Partial payment is a first-class citizen
Payment attaches to a collection, not to the order; the balance is a derived value. A single "paid" field would be easy, but it lies on the first day of a three-part payment.
Cost: Every balance query is an aggregation; in return the report is never wrong.
Licence verified offline
A token signed with the server's private key is verified locally with a public key embedded in the app. The licence is valid without internet; one connection is enough for activation.
Cost: Key distribution and version management need care.
Proof
- Tests725 (executed and verified)
- Dart files145
- StatusIn production, v3.13.0
- PlatformWindows 10/11 x64, Flutter desktop
Known limits
- Single computer; no concurrent multi-user writing.
- No cloud backup; backup is a local file.
- Source is in a private repo.
What I learned
"Is it paid?" is not a field, it is a relationship. Put the field in and you move fast; on the first day of a three-part payment that field lies to you. Thinking about the data model before the screen is cheaper than writing the migration later.