03 / Retail & POS

KwaMnquhe

The public site, the offline-first till and the Mnquhe Card prepaid wallet for a grocery shop that started in a shipping container.

Year
2026
Status
In build and in use at the shop.
The KwaMnquhe site: 'Shop from your couch. Send anyone to fetch it.' with the yellow Mnquhe Card and its QR.

The problem, stated properly

The till has to work when the network doesn't. Load-shedding, a dropped LTE signal, a tablet in a container with thick walls: none of that can stop a sale. So the device holds the product master, the tiers, the customers and an outbox in IndexedDB, and syncs batches when it can. Everything downstream of that decision follows from it.

The site has a single call to action, pay less with card, and every page either supports it or gets cut. Prices are the whole reason someone visits a shop's website, so the price list is the product, not a sub-page. Prices live in one JSON file the owner edits; no rebuild, no developer.

The rule that shaped it

Stock and the wallet are append-only ledgers. A balance can never go below zero.

These are constraints in the database, not conventions in the app. All money is integer cents. A wallet adjustment without a reason is refused. A gateway reference can be credited once. A card holds no balance, only an id, so a lost card is voided and replaced without touching the money.

The Mnquhe Card page.
The card page: what it is, how to get one.
A member's card, balance and loads.
My card: balance, QR, loads.
Member prices beside normal prices.
Member prices: the normal price, then the card price. Prices live in one JSON file the owner edits.
The POS staff PIN pad on the shop tablet.
The till, installed as a PWA on the shop tablet. A staff PIN to start; Preact, so it feels instant on a mid-range Android.
The find-us page with the map.
Find us. The shop, the hours, the WhatsApp channel.

What it is built from

  • Next.js 16 static export
  • Preact + Vite PWA for the till
  • Dexie / IndexedDB
  • Supabase with row-level security per shop
  • Edge functions for sync, OTP and top-ups

Known limits

Stated plainly, because a client should know what they have.

  • Offline sync, shifts, cash-up and reports are still being built.
  • One shop today; the data model is keyed for many.

Need something like this to run on?

A thirty-minute call, then a written scope within five business days. No obligation either way.

Start a project
Call
30 minutes
Scope
5 business days
Build
Weeks, in the open