Skip to content
Ercan Labs
← All workDESKTOP · PRIVATE · shipped

Customer Order Tracking

Order → production → collection tracking for a manufacturing workshop. Windows, offline.

725
Tests
145
Dart files
v3.13.0
Version

How this was measured: 725 tests executed and verified. In production use.

Architecture725 tests
  1. CLIENT
    • Flutter desktopWindows
  2. STATE
    • sipariş durumukısmi tahsilat
    • lisansoffline doğrulama
  3. STORE
    • yerel veritabanı
  4. OUTPUT
    • fiş
    • rapor
Partial payment is not a separate table but rows of the same order; the balance is always derived.

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

01

Offline first, no cloud

All data in local SQLite. No network, no privacy concern, fast start.

Cost: No multi-computer use. Deliberate.

02

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.

03

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.

04

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.

Stack

FlutterDartSQLiteWindows