← work

03 - Case Study

MyKodi

Property management SaaS - live, onboarding its first landlord

MyKodi
Timeline2026
RoleFounder & Full-Stack Engineer
StackNext.js, Node.js, PostgreSQL, M-Pesa API, TypeScript
StatusLive

The Problem

Kenyan landlords run rent collection, lease renewals, deposits, and maintenance requests out of spreadsheets, WhatsApp, and memory - and the moment M-Pesa payments and KRA's residential rental income tax get involved, that stops scaling. Existing tools either aren't built for the Kenyan market (no M-Pesa, no KRA rules) or bolt it on as an afterthought.

What I Built

Designed and built the platform as a modular monorepo - a Node/Express API and a Next.js admin dashboard, with clear domain boundaries (tenants, leases, rent, deposits, maintenance, billing, tax) so the system stays maintainable as it grows. Wired up M-Pesa payment reconciliation for rent collection and encoded KRA's residential rental income tax rules (7.5% flat rate, monthly filing, cash-basis) directly into the rent module.

01 - Architecture

Structured the API as independent domain modules with clear ownership boundaries, so each domain - tenants, leases, rent, tax - can evolve on its own without becoming tangled with the others as the system grows.

02 - Payments + Compliance

Integrated M-Pesa callback-based reconciliation to match incoming rent payments automatically, and researched KRA's residential rental income tax regime directly from published guidance and draft regulations before encoding rates, bands, and filing cadence into the rent module - not something you want to get wrong on real landlords' tax filings.

03 - Admin Dashboard

Built the Next.js dashboard landlords use to manage properties, units, tenants, leases, and maintenance requests - with a clean, reusable component architecture built for a fast-growing feature set.

04 - Billing & Feature Flags

Built plan/feature/limit management with feature flags gating functionality by billing tier, so the product can move from single-landlord onboarding to metered plans without a rewrite.

What Happened

01

20+ well-scoped domains - tenants, leases, rent, deposits, maintenance, vendors, billing, RBAC, tax compliance and more

02

M-Pesa integration live for rent collection, replacing manual reconciliation

03

KRA tax compliance rules encoded from primary source guidance, not guesswork

04

Feature-flagged billing plans and usage limits built in from the start, ready to gate tiers as the first paying landlords come on

In Hindsight

Modeling KRA tax rules early forced me to read primary source regulations before writing a line of code - the rules were still in public consultation, so the module was built to make rates and thresholds configurable rather than hardcoded. That decision paid off before a single landlord had filed a return.