I build complex software that feels simple.
I design and engineer reliable digital products, from payment infrastructure and enterprise platforms to AI-powered applications. I work across the stack, turning complicated problems into software people actually enjoy using.
Illustrative events from systems I've built. Not live data.
Mintfa
Payments infrastructure for African businesses. A company calls one API to collect money and hold balances, gets signed webhooks back, and Mintfa keeps the books. M-Pesa is the first payment rail, with more to follow. In development: payments are tested end to end against the M-Pesa sandbox, and live payments are not open yet.
- A double-entry ledger in integer cents: every journal must balance, and database constraints guarantee available = posted − pending − held − reserved.
- Idempotency keys on every write request, so a client that retries after a timeout can never charge a customer twice.
- A pluggable payment-rail layer, starting with an M-Pesa STK push connector, plus a recovery worker that asks Safaricom about unconfirmed payments and hands stuck ones to an operator instead of guessing.
- Webhooks sent from a transactional outbox, signed with HMAC-SHA256, and blocked from reaching private networks.
- Multi-tenant from the start: each organisation's API keys, wallets and ledger accounts are split into separate test and live modes, and going live needs staff approval and two-factor sign-in. Covered by ledger concurrency tests.
Hut Yangu
A property app for Kenya. Renters browse homes neighbourhood by neighbourhood in a social-style feed with video tours, instead of scrolling classified ads. Pre-launch, with a waitlist open.
- Built the web app and the Expo (React Native) mobile app on one Supabase backend, with row-level security on every table (150+ policies).
- Search that understands plain queries like “2 bedroom in Kilimani under 30k”, ranks the results, and widens the search when nothing matches.
- A video pipeline on Cloudinary: upload, processing webhooks, reconciliation, and cleanup of orphaned files.
- AIMade the site readable by AI agents: an MCP server card and WebMCP tools let assistants like Claude look up listings. Early version.
Tija eProcurement
Procurement software for organisations: purchase requests, tenders and bids, purchase orders, deliveries, invoices and payments, each with approvals. I am one of three core engineers.
- AIBuilt the first version of Nia, the in-app assistant. Users ask questions in plain English and an LLM writes the SQL, limited to an allowlist of tables.
- AIInventory insights with LangChain and Google Gemini, and stock-transfer suggestions that rank stores by travel distance.
- Built the configurable approval engine: each organisation designs its own flows from trigger, condition, approval and notification steps, used across eight kinds of records.
- Budget reservations, so the same money can't be committed twice: submitting a request reserves funds, approval spends them, and rejection releases them. Also built the licensing module.
Strukchad
Software for construction companies: labour, procurement, inventory and project finances in one place, plus a mobile app for site teams. Built by a team at Radi Digital; my main area is the mobile app.
- Mobile app work (React + Capacitor): a virtualised task list so big projects scroll smoothly, worker data scoped to the active company, and inline form validation.
- Fixed data loading that silently dropped rows: capped parallel requests, and an approval inbox that lost price-check flags past 1,000 order lines.
- Built the first Paystack subscription billing (card setup, HMAC-verified webhooks, retries for failed charges) and Lemonade mobile-money flows for property wallets and tenant rent payments.
Signature Closet
An online store for the fashion label Signature The Brand, with an admin workspace for the team. I built it alone, from database to storefront. Pre-launch: the real catalogue and online payments come next.
- Checkout reserves stock inside a single Postgres transaction with row locks, so two shoppers can never both buy the last item.
- A database trigger releases reserved stock when an order is cancelled or expires.
- An admin workspace with 14 sections (products, orders, returns, team and more), with permissions enforced in the database.
- Next.js 16 running on Cloudflare through OpenNext.

Hi, I'm Kennedy.
I'm a software engineer from Nairobi who enjoys figuring out how things work and making them work better. I studied Computer Science at Maseno University, and over four years I've built internal tools at Airtel Kenya, procurement and construction platforms at Radi Digital, and now Mintfa, my own payments company, alongside a founding role at Hut Yangu.
I like building products end to end. Some days that means an interface that feels effortless; other days it's a database constraint, a stubborn integration, or a bug that only shows up in production. I care about the details, and about the bigger picture: who we're building for and whether the feature actually solves their problem.
The part I enjoy most is the one users never see. A retried request must not charge twice, an approval can't be skipped, the last item in stock can't be sold to two people. I like making those guarantees hold in the database, not just in the UI.
Six habits, and where you can see them in my work.
Understand the problem before picking the technology
Hut Yangu search reads queries like “2 bedroom in Kilimani under 30k” with plain rules instead of an LLM. For that job, rules are faster, cheaper and predictable.
Good interfaces and reliable backends matter equally
On Signature Closet the storefront is editorial and image-led, and checkout locks stock rows in Postgres so two shoppers can't both buy the last item.
Prefer boring and maintainable over clever
Hut Yangu's web and mobile apps share one Supabase backend and one set of security policies, so a rule fixed once is fixed everywhere.
Treat data integrity and failure as features
Mintfa's ledger rules live in database constraints, every write is idempotent, and unconfirmed payments go to a person instead of being retried blindly.
Automate the repetitive, keep judgment in the loop
My coding agents must post a plan I approve before they write any code, and every change passes CI and a separate review before it merges.
Keep learning how software gets built
I added MCP and WebMCP tools to Hut Yangu early, so AI assistants can search listings, and I keep refining how I work with coding agents.
Four years of shipping, mostly where money meets messy workflows.
Frontend and product
React, Next.js, TypeScript, Tailwind CSS, React Native and Expo, Capacitor, responsive and accessible UI.
Seen in Hut Yangu, Signature Closet, Strukchad
Backend and data
Node.js, NestJS, PostgreSQL, Prisma, Supabase, Redis, BullMQ, REST, GraphQL, C#/.NET, Laravel.
Infrastructure
Docker, Linux, GitHub Actions, CI/CD, Cloudflare, DigitalOcean, reverse proxies and deployment.
Seen in Mintfa, Signature Closet
Exploring better ways to build software
In the products
I build AI in where it solves an actual problem: plain-English questions over business data (LLM-written SQL over an allowlisted set of tables), LangChain and Gemini insights, and MCP tools that let AI assistants use a site.
In how I work
I experiment with coding agents, structured planning, automated testing and code review on a self-hosted setup. Agents post a plan for my approval, every change must pass CI and a separate review, and I read and own what ships.
- Founder & lead engineer · MintfaPayments infrastructure in development: ledger, M-Pesa, webhooks2026–now
- Founding software engineer · Hut YanguWeb and mobile apps, search, video pipelineMar 2026–now
- Software engineer · Radi DigitalTija eProcurement, Strukchad, Business Central integrationsFeb 2024–now
- Software engineer · Airtel KenyaInternal enterprise web apps: React, TypeScript, ASP.NETJun 2023–Feb 2024
- Software engineer · Alternate LimitedDocument management and workflow automation on SharePoint and .NETApr 2022–Feb 2023
- BSc Computer Science · Maseno UniversityEducation2019–2023
Have something interesting in mind?
I'm open to remote software engineering roles, long-term contracts, and select projects where I can help turn a good idea into reliable software.