Dwaso — ordering system
The branding
Dwaso means market in Twi. It is the rebrand of Comfort’s, an Afro-Caribbean grocer on Rye Lane that has traded fifteen years, taken online by the founder’s daughter without giving up the shop.
The identity was settled before this work started: a colour-blocked route with a chunky wordmark, a geometric semicircle pattern and generous photography. Nothing here redesigns it. The job was to prove it survives a phone screen, which is the test a billboard identity never gets.
The rule I worked to: the brand is bold and the interface is calm. Colour does the shouting on the outside of the shop. Inside the app it appears in blocks and moments, not everywhere.
The marks
Three of them, doing different jobs.
The wordmark is chunky and close to hand-painted, which is where market signage lives. It goes on the shopfront and the top of the app.
The secondary lockup puts SHOP above the name, and the D block turns the capital into a frame with DWASO running down the side. That one is for small spaces: the bag, the app icon, the corner of a poster.
The semicircle is the pattern and the mark at once. Stacked it reads as bowls, tiled it becomes the ground the whole identity sits on. It goes from a texture you barely notice to the loudest thing on a billboard without changing.
The PWA
She shops on her phone on a commute. Mobile is the product, desktop is secondary, and the justification for a progressive web app is specific rather than fashionable.
It works without signal. Basket, usuals and substitution rules are held on the phone itself. A dead spot costs nothing and the order sends itself when signal returns. Fresh counts carry the time they were taken rather than being presented as fact, because the shop has been trading since.
It reaches her fast, when it matters. The substitution decision is the one time-critical message in the system, and on iOS a web app can only send it if it has been added to the home screen. So install is a designed screen rather than a browser banner, it arrives after the first order rather than before it, and turning it down gives SMS instead. The feature is never held hostage.
It is not an app store install. No download, no update cycle, no 40MB for a grocery shop. The shop ships changes the same day.
The ordering system
Right now ordering happens by direct message. A customer finds the shop on social media, sends her list, collects in store. It works and it does not scale past the person reading the phone. Five problems had to be solved before anything was styled.
1. One stock, two shops
The shop floor and the app sell the same yam. The counter runs on three numbers rather than one: on hand, held for orders, can sell. A basket holds fresh stock for twenty minutes and then lets it go, long enough to check out and short enough that the floor is not starved. A till sale writes down before the next order can claim it.
2. Substitution
The screen the whole thing turns on, and the reason the rest of the system exists.
Substitution is decided before the picker reaches the shelf. Every volatile item carries a rule the customer sets once, defaulted by category and remembered after that: swap for anything close, only within this variety, leave it out and refund, or ask me. The picker never invents a substitute. She gets a ranked shortlist built from that rule and live stock, and taps one, so in the ordinary case nothing interrupts the customer at all and the swap lands with a photo of the thing actually in the bag.
Only when no pre-approved match exists does the customer get pinged, once, with a photo, a price and a window that runs while the order is being picked. No answer inside it falls back to her standing rule, never the picker’s judgement.
Two rules make it safe to say yes. A substitute never costs more than the original, and she can refuse it at the counter or the door, refunded there and then rather than three days later.
Volume sits upstream of all this: fresh is picked first so shortages surface while she is still awake, and the listing is honest when something is down to the last few.
3. Retail and wholesale
Trade is an account type resolved at sign-in, not a toggle on a shelf. Same stock, cases and sacks, agreed prices that are not public, thirty day terms, a standing van day. One rule inverts the retail logic: never substitute on a trade line. A restaurant would rather know the real number before the van loads.
4. Reorder
The brand’s own billboard says “your suya spice is running low, reorder?” That is a product feature written as an advert. It ships as usuals and one-tap reorder from a past order, with prediction switching on per customer once there is enough history to be right. Fifteen years of trade sits in a till, not in accounts tied to people, and telling someone their suya is low the week after they bought it is worse than saying nothing.
5. Buying by dish
Nobody wants eleven separate items, they want jollof for six. Hand-built baskets curated by the shop, scaled by covers, every item removable, and the total moves with it. No method, no content, nothing that makes a busy woman engage with a community to buy rice.
Click and collect
Its own state, sitting between the two sides: ordered, picked, waiting, collected. Collect is the default rather than the exception, because the message-and-collect habit already exists and the shop has no delivery fleet. Delivery is the thing being introduced, not the thing being assumed.
Three surfaces
The customer, on a phone. A calm shop that happens to be loud on the outside. Seventeen screens including the ugly ones: three swaps in a single order, a driver at the door holding something she did not agree to, no signal, and the shop shut.
The picker, on the floor. Dark, dense, built for fluorescent light and one hand. Fresh first. She taps rather than types. Dearer substitutes go in at the customer’s price and the difference is logged against the shop.
The counter, on a screen. Live stock, the collection shelf, the trade queue, and the sales happening on the floor right now, so staff can see the two shops are one.


