Courier Android App

My Role

I’ve been tasked to create a courier application, that 100+ couriers of a company could use to deliver mats to offices.

The application is built on Flutter.


  • Routes
  • Addresses
  • Search
  • Pick up / Bring back operations
  • Hand-signature input
  • Quickly opening map
  • Offline mode
  • Syncing

The application’s backing service is built on top of the backend system that I have built for this company.

Main achievements

GPS foreground service

Due to the nature of how Flutter apps work and the modern requirements of the latest Android ecosystem, the GPS subsystem cannot be implemented in Flutter.

So for this task, I have created a custom service in Java, that is a so-called “Foreground service”, revealing information about the app, and also shows that the app is running. Through this foreground service the app is capable of acquiring high-precision location acquisition.

API versioning

The API is a versioned API, supporting incremental updates. Both the backend and the application knows what APIs are available with what version, and they negotiate which one to use. This allows separate development, update and deployment for both the backend and the application.

Older applications wouldn’t break when a new feature rolls out.

It is very easy to develop the API, as the version negotiation is automatic, based on file names and controller naming.

Feature flags

The application contains a hidden developer feature, where new features can be toggled on/off, therefore even testing of new features is possible for a control group before roll out.