Case study 03

SnaQ

A food delivery app designed for how ordering actually works in Accra: landmarks instead of street numbers, mobile money before cards, and the full price before you commit.

Type
Self-directed
Platform
Mobile web
Status
Working prototype · 2026
Role
Product design, UI, build

Context

Delivery apps here are built for somewhere else.

Ordering food in Accra runs on conventions the big delivery apps do not have a field for. You pay with MoMo, not a card. You tell the rider you are opposite the Shell station, because the street number will not help him. The kitchen sometimes finishes the tilapia before your order reaches it. SnaQ is a full prototype of a delivery app that treats those as the normal case rather than the edge case, built screen by screen and clickable end to end.

Three SnaQ screens: the intro slide, the home screen with offers and dishes, and the menu.
Intro, home and menu

Problems

The hurdles, named plainly.

Four things get in the way of an order arriving correctly.

Challenge

Design an ordering flow where the rider can find you, the money moves the way people already pay, and nothing about the price or the food changes after you tap order.

Approach

Design principles

01

Local first, not localised

Landmarks, GhanaPost GPS, MoMo and cash are fields in the model, not strings swapped at the end. The prices are in cedis and the menu is food people actually order.

02

Say the number early

Every fee is computed in one place and shown in the cart before checkout. The receipt repeats the same figures, so the app can never quietly add anything.

03

Let people decide

When something goes wrong, the app asks rather than choosing: swap or refund, MoMo or cash, now or at half past twelve.

Browsing

A menu you can read at arm's length.

The menu opens on full-width category banners rather than a grid of thumbnails: a photo of the food on one side, the category and its delivery time on the other. Tapping one opens that category under a header built from the same photo, so the transition is continuous. Search replaces the banners in place instead of opening a separate screen.

The SnaQ menu: category banners, a category page with a photo header, and the dish grid.
Category banners, a category page, and the dish grid

Ordering

Each dish asks the right question.

A rice plate and a bowl of soup are not priced the same way, so they do not ask the same thing. Rice comes with every sauce and the shito free, and says so. Soup includes the soup and charges for the meat, so the meat is a required choice and the button stays disabled, reading "Choose your meat", until one is picked. The running total sits on the button itself, where it cannot scroll out of view.

Two dish pages side by side: a rice plate with free sauces, and a soup with a required priced meat choice.
Free sauces on rice, a required meat on soup

Introducing

A checkout that commits to its own number.

The cart lists subtotal, delivery, service fee and any discount as plain rows, each one tappable for a single line explaining what it pays for. Payment comes after the order button, not before it: the sheet opens already on the customer's default method, which is MTN MoMo out of the box, sends a mock approval prompt to the phone, and can split the bill between MoMo now and cash to the rider. The address the order is going to carries the landmark and the directions, because that is what the rider reads.

The SnaQ cart showing items, the fee breakdown with a promo code applied, and the saved addresses screen.
Cart, the charges in full, and saved addresses

After the order

Proof, not promises.

Tracking plays a thirty-minute delivery out in about a minute. At "Order packed" the rider's photo of the sealed order appears, which is something concrete to point at if an item is missing later. If the kitchen runs out of a dish, tracking asks the customer to choose a swap at the original price or a refund, and either outcome is written onto the receipt. Once it arrives, the rider can be tipped on the same MoMo number.

Order tracking with the rider's packed photo, the delivered state with tipping, and the receipt.
Tracking, the tip after delivery, and the receipt

Live prototype

This one actually runs.

The frame holds the real React build, not a recording. Add a dish and the button turns into a stepper. Enter a promo code and the discount appears in the breakdown. Place the order and the payment sheet opens on MoMo, sends a prompt to the phone, and the button grows into the confirmation screen.

The cart, addresses, loyalty stamps and reviews are all saved on the device, so leaving and coming back picks up where you left off.

Open it full size for the same build with an index of every screen.

Where it got to

24 screens, clickable end to end: browse, order, pay, track, tip and review, with the state saved between visits.

Alternatives

The routes not taken.

The menu began as the usual search bar over a grid of cards, which looked tidy and told you nothing: every category was a word in a scrolling row of chips. The banners cost more vertical space and earn it by showing the food. Kitchens nearly became a filter rather than a place, too, until it became clear that opening hours and a loyalty card need somewhere to live.

A kitchen page with opening hours and a loyalty card, next to the dish grid it replaced as a destination.
Kitchens as places, not filters
The receipt's charges, and the delivered tracking screen with the tip and order history.
The receipt repeats the cart, exactly

Reflection

Project takeaways.

Final notes

SnaQ is a prototype, not a live service: payments, the rider photo and the delivery clock are simulated so the whole path can be walked through without a backend. Everything else, from the loyalty stamps to the written reviews, works and persists on the device.