background
All Cases

eCoshop - Android Delivery App

Project Info

Client

eCoshop Club

Service

Mobile Development

Industry

Retail, eCommerce

Stack

Android, Kotlin, Realm, Dagger 2, RxJava
Overview

The Problem

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.

What We Built

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.

  • iconNative Android app in Kotlin
  • iconRealm for offline-first order and inventory storage
  • iconReal-time driver dispatch with RxJava event streams
  • iconDagger 2 for modular dependency injection
  • iconSeparate driver, picker, and customer flows in one app
  • iconPush notifications for order status at every stage

The Build

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.

icon

Role-based modules: customer, picker, and driver views

icon

Offline-first with Realm, syncs when connection resumes

icon

Live route updates pushed via RxJava without polling

icon

Aisle-sorted picking queue cuts warehouse time per order

eCoshop app

The Result

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.

icon

Dispatch fully moved off manual WhatsApp coordination

icon

Customers get live order tracking from pick to door

icon

Fewer failed deliveries from outdated route information

icon

App works in low-signal warehouse environments without crashing

eCoshop driver view

Takeaway

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.

icon

Offline First

Realm handles local persistence so the app keeps working when signal drops in the warehouse or during a delivery run.

icon

Real-Time Dispatch

RxJava streams push route and order updates to drivers the moment they happen, no manual refresh needed.

icon

Modular Architecture

Dagger 2 keeps customer, picker, and driver flows decoupled so each can be updated independently without breaking the others.

background