Writing
Notes on the things I build, the problems I run into, and what I learn along the way.
11 articles
Building QuikCity: local food ordering through WhatsApp
Why I built a food-ordering platform around WhatsApp, and why vendor trust and local rider availability mattered as much as the software.
· About 4 min read
Deploying Next.js to Cloudflare Workers with OpenNext
Deploy an existing or new Next.js app with OpenNext, keep your styling choices, and optionally connect a database.
· About 19 min read
Handling duplicate Paystack payment notifications
A checkout can report the same payment more than once. Here’s how to verify it and update the order once, even when requests arrive together.
· About 7 min read
Building an IndexedDB catalogue that stays in sync
Reuse a product catalogue across visits, search and filter locally, and fetch changes through revision checks instead of downloading it again.
· About 5 min read
Migrating production data safely: validation, cutover, and rollback
Use a Flutterwave-to-Paystack billing migration to understand how to preserve live data, validate a transition, and prepare recovery before cutover.
· About 13 min read
Calculating naira prices without floating-point errors
Use integer kobo, bounded arithmetic, and explicit discount rounding to keep JavaScript price calculations predictable.
· About 6 min read
Keeping catalogue caches fresh in Next.js
Reuse public catalogue results in Next.js, refresh them when products change, and keep checkout checks authoritative.
· About 6 min read
Sending order emails with Resend: retries and recovery
Build a recoverable email workflow with a scheduled sender or durable queue, stable message identities, and a clear retry policy.
· About 9 min read
Keeping inventory consistent across online and in-store sales
What happens when an online order and a shop attendant need the same stock? A practical look at allocation, transactions, shortages, and safe retries.
· About 8 min read
Importing a product catalogue from a spreadsheet
Design a catalogue import that validates rows, explains errors, stages changes, and commits against current database state.
· About 7 min read
Building a Next.js E-commerce App: Alluring Aura Scent
How I built a Next.js e-commerce app for a perfume store, with Cloudflare Workers, IndexedDB catalogue caching, and shared online and in-store inventory.
· About 5 min read