Skip to content
Lumis Studios
All Work
PropTech

Makazi

Multi-tenant property management built for the Kenyan market.

2026

Visit live site

Overview

Property management in Kenya is held together by WhatsApp threads, spreadsheets, manual bank reconciliation, and SMS rent reminders. Makazi replaces that with a single integrated system that scales from a solo landlord with a handful of units to an agency managing hundreds of units across many owners. It is a true multi-tenant SaaS: every organisation gets its own isolated PostgreSQL schema, so data can never leak between tenants. The platform is built specifically for the realities of the Kenyan market — M-Pesa-native collection, KRA tax compliance, and offline-capable tooling for caretakers in the field.

Our Role

Designed and built the entire platform end-to-end — the multi-tenant database architecture, the NestJS API and its 24 domain modules, M-Pesa payment integration, the Kenya tax-compliance engine, the background job system, and all four Next.js portals.

Tech Stack

NestJSTypeScriptPostgreSQLTypeORMRedisBullMQNext.jsM-PesaDocker

Key Features

Multi-Tenant Architecture

Every organisation runs in its own isolated PostgreSQL schema, switched per-request via tenant middleware. Combined with role and property-scope guards, one org's managers, owners, and tenants can never see another's data — isolation is enforced at the database level, not just in application code.

M-Pesa Rent Collection

Native Safaricom Daraja integration covering STK Push (tenant-initiated payment), C2B paybill confirmation, and B2C owner payouts. Incoming payments are auto-matched to invoices and allocated FIFO to the oldest outstanding balance; ambiguous payments drop into a suspense queue for an accountant to reconcile manually.

Automated Billing & Escalation

Monthly invoices are generated for every active lease by a scheduled job, with configurable line-item templates, 16% VAT on commercial rent, rent escalation rules, and idempotent late-penalty application. Mid-month move-ins are prorated and rent-free periods are honoured automatically.

KRA Tax Compliance

Built for Kenyan tax law: 10%/30% withholding-tax certificates for resident and non-resident owners, 7.5% MRI on residential rental income, 16% VAT remittance reporting, and automatic eTIMS submission of commercial invoices to the KRA.

Four Dedicated Portals

Separate, role-appropriate interfaces for the management team, property owners, tenants, and caretakers. The caretaker app is an offline-capable PWA — meter readings and cash receipts captured in the field are queued locally and synced when connectivity returns.

Maintenance & Vendor Management

Tenants raise work requests with photos; managers assign vendors and track cost and SLA. An hourly job checks for SLA breaches and escalates unresolved tickets, while vendor ratings are computed from request history.

How It Was Built

The backend is a NestJS 11 API in TypeScript with 24 domain modules, backed by PostgreSQL 16 via TypeORM using a schema-per-tenant pattern — a request is resolved to its organisation by tenant middleware, which sets the Postgres search_path before any repository runs. Redis and BullMQ drive background work: monthly invoice generation, daily rent reminders, hourly maintenance-SLA checks, and asynchronous M-Pesa callback processing (which acknowledges Safaricom inside its 15-second window, then processes off the request path). An in-process EventEmitter2 bus decouples side effects — issuing an invoice fans out to SMS/email dispatch, webhook delivery, and eTIMS submission. All money, tax, and owner-statement math uses decimal.js to avoid floating-point drift. The four frontends are Next.js App Router apps styled with Tailwind and Radix UI. Security is hardened throughout: bcrypt password hashing, JWT with refresh-token rotation, TOTP MFA, AES-GCM-encrypted per-org callback secrets, HMAC-signed webhooks, and an SSRF guard on outbound delivery. The whole stack ships as multi-stage Docker images.

Highlights

  • Schema-per-tenant isolation in PostgreSQL — one organisation can never read another's data
  • Native M-Pesa STK Push, C2B, and B2C with FIFO payment-to-invoice reconciliation
  • Kenya tax engine: 16% VAT, 10/30% WHT certificates, 7.5% MRI, and KRA eTIMS auto-submission
  • decimal.js throughout — no floating-point drift across billing, tax, and owner statements
  • BullMQ jobs: monthly invoicing, daily reminders, and hourly maintenance-SLA escalation
  • Four role-specific portals including an offline-capable caretaker PWA for the field

Build with us

Want something like this for your business?

We build web apps, mobile apps, and cloud infrastructure for African businesses.