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.

Dwaso Rye Lane billboard with wordmark, semicircle pattern and food photography
Dwaso Tottenham Court Road tube panel advertising grocery delivery
Dwaso social layout about needing palm oil on a Sunday
Dwaso social layout promoting Sunday soup essentials

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.

Dwaso mobile shop home with usuals, dish bundles and product categories
Dwaso first-run screen for setting a default substitution rule
Dwaso offline ordering screen with locally saved basket and shop closure notice

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.

Dwaso shop counter showing on-hand, held and sellable stock

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.

Dwaso product screen with a saved substitution rule
Dwaso timed substitution decision with product photo and choices
Dwaso order update showing three substitutions resolved together

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.

Dwaso trade ordering screen with case quantities and account pricing
Dwaso desktop grocery shop with live products, usuals and basket

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.

Dwaso mobile dish bundle scaled by number of people
Dwaso mobile basket with collection and delivery choices

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.

Dwaso click-and-collect code screen
Dwaso mobile orders and account screen with collection status

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.

Dwaso picker screen showing the active pick list by bay
Dwaso picker screen for resolving a stock shortage