All work

Multi-vendor delivery

SoldOut

Flutter developer · freelance
2025
SoldOut preview

2 roles

customer and driver

OSRM

multi-stop driver routes

AR / EN

bilingual UI

GetX

state, DI, and routing

The brief

Ordering from several local shops in one checkout

SoldOut connects customers with local vendors and the drivers who deliver for them. One cart can hold products from several markets, and the app handles everything from browsing to the doorstep.

  • Phone number and OTP sign-in, with separate flows for customers and drivers.
  • Search across products and markets, with infinite-scroll pagination.
  • Duplicate requests are dropped, so fast typing doesn’t flood the API.
  • Favorites, saved addresses, payment cards, and product ratings.
SoldOut customer home with the active cart and most requested products
Customer home, with the active cart up front.
SoldOut product details with vendor availability
Product details and which vendors stock it.

How an order moves

01

Cart

Stock is checked before an item is added, so nothing unavailable reaches checkout.

02

Pending

Address and payment method are confirmed, and the order is split across its vendors.

03

In delivery

The driver gets every pickup and drop-off as one route on a live map.

04

Delivered

The customer follows each status change, and the order lands in their history.

The hard part

One sensible route instead of stops in random order

A driver carrying orders from several vendors shouldn’t visit them in whatever order they happened to be assigned. The driver dashboard sends every market waypoint to the OSRM Trip service, gets back the best visiting order, and draws that route on an OpenStreetMap layer.

  • Waypoints sorted by OSRM, not by assignment order.
  • The route decoded from a polyline and drawn with flutter_map.
  • The driver’s location tracked live with geolocator.

The result: fewer wasted kilometres for the driver, and a more accurate arrival time for every customer waiting at the other end.

SoldOut cart with items, delivery address, and price breakdown
Cart review with address and totals.
SoldOut driver map with the delivery route and order items
The driver’s route, drawn on the map.

What I’d change next

SoldOut is an earlier project than the other four, and it shows in the networking layer. Before extending it, I’d rebuild that layer with typed failures and a proper retry policy — the pattern my later apps use. The multi-stop routing is the part worth a closer look.

Stack

FlutterGetXClean Architectureflutter_map + OSRMGeolocatorFirebaseSharedPreferences