Client Project
Khady's Kitchen: Bakery Shop & Bake School Platform
Online shop and bake school for a Kumasi patisserie: guest checkout, class applications, Paystack payments, receipt-code tracking, and a role-gated admin console with a payment ledger.
Overview
Two businesses in one platform for a Kumasi patisserie, built in seven weeks. Customers browse products, check out as guests, and pay via Paystack or on pickup; prospective students browse classes, apply, and pay the full fee or 40 percent up front. Staff run products, orders, classes, admissions, and a unified payment ledger from a role-gated admin console.
The Problem
Orders and class enrolments were handled informally over chat, with no single place to publish, take applications, or collect fees. Customers and students had to be able to pay without creating an account. Fee handling had to be correct and auditable: no double-charging, no lost payments, and a clear trail of who changed what, with only senior staff allowed to delete records or issue refunds.
The Solution
- Guest checkout by phone number; orders and applications tracked by KK-O and KK-A receipt codes. - Applications snapshot fee lines at apply time, so later price changes never rewrite records; admission and payment are independent status axes. - All money in integer pesewas; the Paystack reference is the idempotency key, so duplicate webhooks cannot double-record. - Three payment confirmation paths (webhook, payer return, six-hourly reconciliation sweep), added after two real production incidents. - Refunds flip the ledger before calling Paystack and roll back on rejection, so two concurrent refund clicks cannot issue two refunds. - JWT auth in httpOnly cookies, email-code 2FA, three roles, and an append-only audit log of every admin change.
Outcome
The bakery sells products and fills classes from one system, with staff managing everything from an admin console. Payments and refunds are idempotent and auditable. The backend is covered by about 187 integration tests with real webhook signature verification, gated by GitHub Actions CI, and ships as a lean multi-stage Docker image on Koyeb.