Skip to content
All work

ERPSole developer, end to endAug 2025 - Now

Target Operations

The mobile client for a multi-tenant ERP (sales, purchasing, warehouse, POS, CRM and accounting), on phones and Sunmi POS handhelds.

41
Feature modules
88
Screens
230
REST endpoints

My contribution

Sole developer over roughly 13 months: 41 feature modules, 88 screens and 230 REST endpoints, on a feature-sliced clean architecture (data, domain, presentation) with BLoC/Cubit and a single get_it container of 242 registrations that keeps 78 feature controllers independent and testable. Localised across English, Arabic and French with full RTL. I own the release pipeline too: Android and iOS builds, signing, Crashlytics, push and Google Play submissions.

The hard part

One binary has to behave like a different product for every tenant. A server-driven permission layer gates each module and each CRUD action from the ACLs returned at login, and subdomain-based base-URL switching points the same build at whichever backend that tenant runs.

What it is

Target Operations (T-OPS) is the Flutter mobile client for a multi-tenant ERP platform, giving field sales reps, warehouse staff and cashiers the operations they would otherwise do from a desktop web app. It ships on Google Play and on Sunmi POS handhelds, where it drives the built-in thermal printer.

Core functionality

  • 41 feature modules across sales invoicing, quotations, purchase bills, inventory transfers, POS, CRM and accounting
  • Server-driven per-screen permissions gating show, add, edit, delete and print per tenant role
  • Multi-tenant runtime configuration with subdomain-based base-URL switching
  • Centralised Dio service mapping transport failures to typed domain exceptions, with auth and logging interceptors
  • On-device diagnostic logging for debugging in the field
  • Thermal receipt printing over two hardware paths: Sunmi built-in printers and Bluetooth ESC/POS devices, including Arabic receipts
  • Paged search across every list
  • English, Arabic and French with full RTL support

Testing

I wrote an end-to-end harness that runs Flutter integration tests against the live backend while a Playwright agent reads the web ERP in parallel, cross-checking that mobile writes land identically on the web client. It caught several vendor-side API defects before release.

  • Target Operations, screen 1 of 13
  • Target Operations, screen 2 of 13
  • Target Operations, screen 3 of 13
  • Target Operations, screen 4 of 13
  • Target Operations, screen 5 of 13
  • Target Operations, screen 6 of 13
  • Target Operations, screen 7 of 13
  • Target Operations, screen 8 of 13
  • Target Operations, screen 9 of 13
  • Target Operations, screen 10 of 13
  • Target Operations, screen 11 of 13
  • Target Operations, screen 12 of 13
  • Target Operations, screen 13 of 13