These are the real Figma prototypes, embedded live, so they need a stable connection and can still feel slow or skip a step. For the full picture, open the Figma file. Every screen, state, the design system and the components are there.
Loads on tap, not on scroll
Keeps this page fast for everyone who only reads the case study.
01Overview
A marketplace where every order passes through four people.
klik delivers food, groceries, parcels, medicine and more across Ethiopia. The core idea of this work: whatever a customer tells us, like an allergy, travels with the order to whoever is holding it next.
02The problem
The hard part of a marketplace is the handoffs.
A customer with a garlic allergy was sent food containing it. The allergy was saved in the customer app, but nothing carried it to the person cooking the order.
Saved
Customer
Saves “Garlic” in Preferences
→
Lost here
Vendor
Sees the items, not the allergy
→
Too late
Rider
Hands over a sealed bag
03Research
What we assumed vs what we found.
Sources:Vendor callsSupport ticketsRider feedbackInformal, no formal study
We assumedWe found
01Customers would put allergies in the order note.
Vendors pack from the item list. At rush hour nobody reads the note.
02One spinner is enough while payment runs.
Mobile money confirms on a separate USSD prompt, so people thought the app had frozen.
03Each app could be designed on its own.
The handoffs between apps are where things break: allergies, payment status, parcel handover.
04What we learned
Three things kept coming up.
Notes get skipped
At rush hour, vendors pack from the item list. Free text at the bottom of an order rarely gets read.
Waiting feels like failing
With no sign of what is happening, a pending payment looks exactly like a frozen app.
Handovers need proof
Riders and customers both needed a clear moment when a parcel changed hands.
The rule we took into every app
If a detail matters to the customer, it has to reach whoever is holding the order.
05What I changed
Declared once, met twice.
The customer declares allergies once. The vendor meets them twice: as tags on the incoming order before accepting it, and as a Critical alert while packing it.
Vendor app - New orders
The problem
Vendors packed from the item list. An allergy the customer saved in Preferences never reached the kitchen.
The fix
The allergy now rides on the order. It shows as tags before the vendor accepts, and again as a Critical alert while packing.
Core decisions
Tags appear before accepting, so a vendor can turn down an order they can’t make safely.
A Critical alert repeats it at the moment it matters: packing.
Tags come from the customer’s Preferences, not free-text notes.
06Four apps, one job each
Each app is built for the person holding it.
Drivers clock in at stations, run multi-stop parcel routes with a call before arrival and a photo at handover, and see a weekly ranking. Vendors accept orders against a timer. Businesses send parcels in bulk.
Customer
Order, track, rate
Driver
Stations, routes, handover photo
Vendor
Accept on a timer, pack, hand off
Business
Bulk parcels and team accounts
07Paying with mobile money
Designing around a wait the app can’t see.
Customer app - Mobile money checkout
Paid: the order is already on its way to the vendor
Failed: try again or change the method, in the same spot
The problem
Mobile money confirms payment on a USSD prompt outside the app. The app was waiting on something it couldn’t see, behind one spinner.
The fix
Processing, paid and failed each get their own state, so the customer always knows where to look next.
Core decisions
Processing points you to your phone, where the action is.
Failed offers a retry or another method in the same spot.
Paid confirms the order is already on its way to the vendor.
08How it changed
Three versions, one designer.
I designed klik from its first release. Each version answered what the last one taught us, so the screens below are the same product growing up.
v1.0The first release
Customer and business apps, built fast to prove that Addis would order this way.
v2.0Four apps
Vendor and driver apps joined. Each one grew its own patterns, and the handoffs started to break.
v2.1One system, now
One design system across all four apps, light and dark, with allergies carried from order to kitchen.
09Results
Shipped, and rated well by the people using it.
100,000+customer app downloads in 7 months of launch
4.7on Google Play
4.8on the App Store
4 appson one design system
Did it work?
Allergy alert
Allergy complaints dropped after the tags and Critical alert shipped.
Payment states
Fewer “did my payment go through?” support tickets once each state had its own screen.
Vendors
Vendors started pointing to the allergy tags themselves when packing.
On the stores
The listing screenshots I designed for the App Store and Google Play. Nine frames, one feature each.
The system underneath
klik v2.1, built on Figma variables. One set of tokens drives all four apps, light and dark, with a Brand mode that switches between Customer red and Business blue.
Colour: primitives, semantic tokens and brand modesTypography: the Urbanist scaleActions: buttons, chips and pillsNavigation: tab bars, headers and sheetsMotion: how screens and sheets moveFeedback: toasts and bottom sheets
The design file
See all of klik Delivery App in Figma.
Every screen and state, the components and the design system, in the file I designed it in.