Brian Omariba
Start a project →
← All systems
Dossier /04 Rental property management Live

PropertyOS

A landlord does not have a rent problem. They have a reconciliation problem.

A management platform for rental property — leases, invoicing, M-Pesa collection, metering, maintenance and arrears, on one record instead of four spreadsheets.

Category
Property management platform
Role
Architecture · Backend · Frontend · Deployment
Stack
NestJS · Prisma · PostgreSQL · Next.js 14 · Daraja
Status
Live demo — seeded with six months of history
01 — Problem

The money is knowable. Nobody has assembled it.

A landlord with twenty units already has every fact they need: who holds which lease, what was invoiced, what was paid, which meter moved. The facts just live in four places that never agree — a tenancy file, an M-Pesa statement, a meter notebook, and a maintenance WhatsApp group.

So the questions that actually matter go unanswered. Who is in arrears and by how long. Which unit costs more to run than it earns. Whether this month is normal.

The work is not collecting the data. It is refusing to let it separate.

Lease terms
Invoices raised
M-Pesa receipts
Meter readings
Maintenance spend
Arrears ageing
02 — System

One chain from lease to reconciled cash.

Every step writes to the same record, so arrears are a property of a lease rather than the output of an afternoon with a spreadsheet.

01Portfolio

Organisations, properties and units, with role-based access over them.

02Lease

Who occupies what, on what terms, from when.

03Invoice

Raised against the lease on a schedule, not typed out monthly.

04Payment

M-Pesa via Daraja, matched to the invoice it settles.

05Metering

Readings that turn into billable consumption rather than a notebook.

06Maintenance

Requests, costs and history attached to the unit that generated them.

07Reporting

Arrears ageing, expenses and per-unit performance as queries.

03 — Architecture

Five phases, and the last one was security.

NestJS and Prisma over PostgreSQL, with a Next.js 14 command centre on top. Built in five phases: portfolio and RBAC; metering, M-Pesa and expenses; maintenance, communication and the tenant portal; forecasting, risk scoring and anomaly detection; then security hardening.

The fourth phase is the one that separates this from a ledger. The system scores tenant risk, forecasts income and flags anomalies — a consumption spike that looks like a leak, an expense that breaks its own pattern. The seeded demo deliberately plants both so the detection has something to find.

Phase five encrypts payment credentials and MFA secrets at rest, adds TOTP with lockout and rate limiting, and exposes health checks. Storing a landlord’s M-Pesa credentials in plaintext would have been the kind of decision that is invisible until it is catastrophic.

Verification is three re-runnable smoke suites — 67, 43 and 43 checks — rather than a claim that it works.

04 — Interface

A command centre, not a CRUD grid.

Four screens carry the product: a portfolio dashboard, a property view, a Tenant 360 that puts one tenant’s whole history on one page, and a payments reconciliation screen.

PropertyOS interface

property.brianomariba.com — the live demo, seeded with a full portfolio and six months of history.

05 — Outcome

What the system changes.

Arrears stop being an investigation. The question "who owes what, and since when" becomes a query against one record rather than a reconciliation between four sources that disagree.

The forecasting and anomaly work changes the posture from reporting what happened to flagging what is about to. A leak shows up as a consumption anomaly rather than as a water bill three months later.

Live portfolio metrics — to be published once in production use