Client
Service
Industry
Stack
eCoshop runs a network of local grocery and household goods stores across three cities. Their existing ordering process was a mix of phone calls and a poorly optimized mobile website that timed out under load. Drivers had no real-time visibility into their routes, dispatch was done manually over WhatsApp, and order status updates had to be relayed by hand. They needed a native Android app that tied together the customer-facing storefront, driver dispatch, and warehouse picking in one coherent system.
We built a native Android app using Kotlin with Realm for local offline storage, so orders and product data stay accessible even with patchy connectivity in warehouse environments. Dagger 2 handles dependency injection across the driver, picker, and customer modules. RxJava drives the real-time order feed so drivers get route updates without polling.
The app is split into three role-scoped modules behind a single login. Customers browse, add to cart, and track delivery on a map. Pickers get a warehouse queue sorted by aisle so they can batch efficiently. Drivers get an optimized route that updates as new orders come in. Realm syncs the local database in the background so the app stays functional in areas with weak signal.

Dispatch moved from WhatsApp threads to a structured queue. Drivers stopped calling in for address corrections because the route updates automatically as orders are added or cancelled. The picking module cut average order prep time by removing the back-and-forth trips caused by unsorted pick lists.

eCoshop needed three different user experiences in one app without the codebase becoming a mess. Dagger 2 kept the modules independent enough that the driver and picker flows could be iterated separately. Realm was the right call for a logistics context where connectivity is never guaranteed.