Phase 1 backend and thin admin. The live shop stays mineral-manzi.co.za.
This app is the Phase 1 order backend. The marketing site at mineral-manzi.co.za is unchanged and is not served from here.
Guest path: catalog → server cart → checkout → card (Yoco) or EFT (Ozow). If those keys are missing, checkout is a labeled MOCK payment. Paystack is not used for this one-time purchase.
See FRONTLINE.md. Public routes the existing storefront can fetch:
GET /api/catalogPOST /api/cart then POST /api/cart/:id/linesPOST /api/checkout with method: "card" or "eft"POST /api/payments/mock-complete only when the response says mock: trueGET /api/orders/:id for the confirmationMerchant sign-in is cookie-based and same-origin at /admin. It is not for the public site.