← All workCommerce
Sabibu Africa
Years of WooCommerce moved onto a modern stack. Not one record retyped.
- Client
- Sabibu Africa
- Role
- Migration and build
- Year
- 2025

- data types migrated by script
- 6data types migrated by script
- records re-entered by hand
- 0records re-entered by hand
The problem
A growing spirits store had outgrown WooCommerce. The catalogue was slow, the storefront looked like a template, and years of products, orders, customers and editorial content were locked inside a WordPress database that nobody wanted to retype.
What I built
- 01Wrote the WordPress to Payload migration scripts covering products, categories, blog, media, customers and orders, the whole history moved by code, verified, and repeatable rather than hand-copied.
- 02Rebuilt the storefront headless on Payload CMS 3 and Next.js, with product families (Moran and Symba), category browsing, cart and checkout.
- 03Kenya-first payments through M-Pesa and Pesapal, alongside the usual rails.
- 04Cloudinary for media so a catalogue of bottle photography loads fast on a phone.
- 05Deployed to a VPS under PM2 rather than serverless, matching the client's hosting constraints.
Stack
- Next.js
- Payload CMS 3
- PostgreSQL
- TypeScript
- Cloudinary
- M-Pesa
- Pesapal
Result
A premium dark-and-gold storefront on a modern stack, with every historical record intact. The migration scripts mean the move is reproducible, a dry run, a verification pass, then the real thing, instead of a one-way leap of faith.