Case Study — Web App

TENANTTALLY

Rent and maintenance ledger for small landlords

Web App FlaskSQLiteJavaScript

The problem

Small landlords track rent on paper or in chats. Tenants dispute payments, and repairs get forgotten — there is no single record showing, month by month, what each tenant owes, has paid, and still owes.

What was built

A standalone rent and maintenance ledger: properties with units, tenants whose agreed rent is copied from the unit at move-in so later rent changes never rewrite history, payments recorded against the exact month they cover with a printable receipt (TT-0001...) for each one, an M-Pesa code that can only be entered once so a payment can never be counted twice, a month-by-month tenant ledger showing due, paid and balance with Paid / Partial / Unpaid states, an arrears view largest-first that never lets a current-month payment hide an older missed month, and maintenance tickets that stay open until the repair is done. Kenyan defaults throughout: KES, +254 phones, M-Pesa receipt codes, and no external services.

Standalone ledger for small landlords: properties and units, month-by-month tenant ledgers, printable receipts (TT-0001...), duplicate M-Pesa codes rejected, arrears largest-first, maintenance tickets, reports and CSV exports. Kenyan defaults: KES, +254 phones, M-Pesa receipt codes.

Challenges & solutions

Arrears honesty: a payment for this month must never hide an older missed month, and advance payments must show separately from what is owed — solved by counting arrears month by month from positive monthly balances only.

Outcome

A working ledger for small landlords: one record per tenant per month, a receipt for every payment, and a repair list that stays open until done — with public pages that state plainly what it does not do: no tenant portal, no M-PESA integration, no late fees.

How it fits together