Case study · Umthombo Creations
Umthombo Creations
A fully custom e-commerce system: storefront, admin, payments, courier shipping.

- Year
- 2025
- Timeline
- About 4 weeks
- Role
- Design · Engineering · Integrations
- Status
- See it live
The brief
A client build: a Cape Town maker of handcrafted candles, soaps, and body care, trading since 2020, running the whole business over WhatsApp. The first brief was a simple static site. It grew into the real thing: a full transactional system: storefront, customer accounts, admin, live courier rates, and online payment. Owned outright, no platform fees.
One mandate we took seriously: it must not look like a Shopify theme or a demo. The design is earthy and editorial, built around the name Umthombo, an isiXhosa word for a spring.
What we built
An end-to-end shop: an editorial storefront with filtering by category and scent, verified-buyer reviews, a bespoke-request pipeline (request → quote → deposit → build), a Markdown journal, and a full admin: orders, analytics, discounts, customers, and every integration credential managed from the dashboard, not from environment variables.

Checkout runs on real BobGo courier rates: the customer picks the option that suits them, and pays by card, instant EFT, or wallet through their choice of three gateways. Orders flow back to BobGo for fulfilment and tracking automatically.

The hard part
Making three payment providers and a courier API behave like one honest system. Each gateway verifies webhooks differently: one signs with HMAC, one uses standard webhook signatures, one echoes the payload back for validation, so we built a data-driven abstraction where the webhook is always the authority and every event is idempotent. And the server trusts nobody: at order placement, every line is re-priced from the database and the chosen courier rate is re-verified against BobGo. The client can never set a price or a shipping fee.
Outcome
Live at umthombocreations.co.za, built in about four weeks. Everything degrades gracefully: shipping off means collection-only, payments off falls back to the WhatsApp flow the business already ran on. The 10% bring-back discount rewards customers who return their containers, and it's computed server-side, per container, like everything else that touches money.
- 0
- Payment gateways, customer's choice
- 0
- Products in the launch catalogue
- 0
- Webhook endpoints, all idempotent
- 0%
- Bring-back container discount
Stack
- Next.js 16
- React 19
- TypeScript
- PostgreSQL
- Drizzle ORM
- Better Auth
- BobGo
- Yoco
- Bob Pay
- YetoEFT