Four Connected Products: Merchant, driver and sales-rep apps from one Flutter codebase, plus a Next.js admin dashboard for operations.
Project 02
Waslha
Post a delivery. The nearest driver takes it.
A complete delivery platform where anyone posts an order and nearby drivers claim it — merchant, driver and sales-rep apps in one Flutter codebase, plus an Arabic admin dashboard.
Try it

Why this exists.
Sending a package across town shouldn't mean calling a courier company, waiting for someone to arrange it, and haggling over the price. Waslha turns a delivery into a post: set pickup and drop-off, see a fixed price up front, and let the closest driver with the right vehicle take it. It works for shops shipping every day and for anyone who needs something delivered urgently.
Inside the build
Thought through, end to end.
Nearby Dispatch: Open jobs are filtered by distance from the driver's live location and by vehicle type — bike, motorcycle, car or van.
Paste-a-Link Locations: A shared Google Maps link resolves to coordinates, a road route and a readable Arabic address in seconds.
Trust by Design: Document review before drivers can work, merchant approval of each driver, ratings, and one-star blocks.
Built-in Revenue: Per-merchant commission, referral codes for sales reps, and payouts with receipts — all calculated automatically.
Arabic-First UI: Full right-to-left interface in Cairo type with an in-app switch to English.
The hard parts
Constraints I designed around.
The features that look effortless were the ones that fought back.
- 01
Prices no one can tamper with
The obstacle
Fee maths on the phone can be edited, and negotiating every delivery kills trust between merchants and drivers.
How I solved it
Orders are only created through Cloud Functions that read the live pricing config, price the job from real road distance plus a fixed timing surcharge, and write the document. Firestore rules block clients from writing orders directly.
- 02
Proving the delivery happened
The obstacle
A simple "Delivered" button invites fake completions and disputes about who received what.
How I solved it
Every order carries a one-time QR code the recipient shows. The driver's scan closes the order on the server, so earnings and commissions only count after a real handover.
- 03
Bulk orders that stay consistent
The obstacle
One pickup with several drop-offs means partial accepts, single-leg cancels and prices that no longer add up.
How I solved it
Modelled a bulk order as one document per drop sharing a batch ID. Drivers claim all-or-nothing, and cancelling one leg re-prices the remaining legs in a single server call.
Product tour
A closer look inside.
Swipe through the real product screens and the details that make the experience feel complete.












