PrintShopKE.
Building an online storefront for Kenya's fastest-growing digital print shop — full catalogue, M-Pesa at checkout, nationwide delivery.
Where it started.
PrintShopKE is a Nairobi-based digital printing operator serving SMEs, corporate clients and events. They had strong offline relationships and a steady flow of walk-in orders, but their web presence was limited to a single contact page and a WhatsApp number.
The mandate was to build an online storefront that could accept orders 24/7, handle the full catalogue of print products (business cards, flyers, banners, t-shirts, brochures, branded merchandise), and integrate M-Pesa so customers could pay from their phones without leaving the site.
What was hard.
The catalogue is deep and deeply variable — a business card order has size, paper stock, finish, double-sided, minimum quantity, and artwork upload. A t-shirt order has size, colour, print method, and one-up-front artwork proof. Modelling all this in a clean admin the team could actually maintain was harder than any of the integrations.
Payments were the other half. Most Kenyan buyers pay with M-Pesa — putting Visa first at checkout would collapse conversion. We needed Daraja STK push on the primary path, Pesapal as an aggregator fallback, and cash-on-delivery for corporate orders. All without a third-party SDK adding 200 KB to the bundle.
How we solved it.
- 01Product system modelled in the CMSEach print product is a CMS entry with structured options. The front-end reads the schema and renders the right order form — no hard-coded product pages.
- 02M-Pesa STK push, server-sideDaraja calls happen in a Next.js API route. The client posts the order, polls for payment status, shows a receipt. No Daraja keys ever leave the server.
- 03Artwork upload with validationUsers upload PDFs and images. We validate dimensions, DPI and file type client-side, then store in S3-compatible object storage with a signed-URL handoff to the production team.
- 04County-level shippingShipping cost is calculated from county of delivery, product weight, and urgency (same-day Nairobi vs courier to Mombasa).
- 05Order tracking without a customer accountMost customers don't want to sign up. Every order gets a unique tracking URL sent via SMS — they paste it to check status, no password required.
What we built it with.
The outcome.
- Full catalogue with 40+ product types shipped, each editable in CMS.
- Checkout with M-Pesa STK as default, cards + cash-on-delivery as backup.
- Order-status SMS sent on payment, production and dispatch events.
- Admin dashboard for the production team — orders queue, artwork preview, status changes.
- Customer-tracking page at a unique URL per order.
- LocalBusiness + Product schema for SEO visibility in Kenyan searches.
“We went from taking orders on WhatsApp to a proper online store that runs 24/7. The M-Pesa flow just works.”