Part B, working. Rent Ops records money, it never moves it — so every screen is built around a human asserting a fact and Heimly issuing the proof. Balances, totals and statuses are all derived from the same payment records, so a row, a drawer and a total cannot disagree.
Six states, all distinct from the orange accent and from each other. Status leads every row — it is the thing people scan for.
MONEY IS RECORDED, NOT MOVED
No screen here takes a payment. A landlord records one, a tenant reports one, and it stays visibly pending on both sides until the landlord confirms. Only then does Heimly issue a numbered receipt.
SCOPE IS VISIBLE, NOT IMPLIED
Switch to Agent in the top right of the app: the roll drops to the three tenancies assigned to Chinedu Eze, and the status counts recount. An agent is never shown a total they cannot act on.
NAV CHANGE
Rent roll joins the landlord and agent nav as a top-level item. The old mock Payments entry redirects here rather than being deleted, so existing links and bookmarks keep working.
PARTIALS ARE REAL
A period is never shown as settled when it isn't. Record ₦90,000 against ₦150,000 and the row says partial with the balance outstanding — try it on Room 4.
B1–B7The appShell-less · drops into your existing routes
{{ v.label }}{{ v.badgeText }}
{{ scopeNote }}
{{ ro.label }}
You are offlineShowing rent as of 14:02 WAT. Anything you record is queued and sent when you reconnect.Dismiss
Rent roll
{{ rollSubtitle }}
{{ monthLabel }}
Export
Add tenancy
{{ tt.label }}
{{ tt.value }}
{{ tt.note }}
{{ c.label }}
SORT
STATUSPROPERTYTENANTRENTNEXT DUEBALANCE
STATUSPROPERTYTENANTRENTNEXT DUEBALANCE
{{ r.status }}1 REPORTED
{{ r.property }}
{{ r.unitLine }}
{{ r.tenantName }}
{{ r.tenantKind }}
{{ r.rent }}
{{ r.cycle }}
{{ r.due }}
{{ r.dueRel }}
{{ r.balance }}
{{ r.lastPayment }}
{{ noResultsTitle }}
Nothing in {{ monthLabel }} matches these filters. The tenancies are still there.
Clear filters
{{ rowsCount }}Totals above follow these filters
Documents
One vault for the organisation. Receipts Heimly issues land here on their own.
What a tenant sees. Same records, their side of them.
{{ tenantStatus }}{{ tenantRef }}
{{ tenantAmount }}
{{ tenantDueLine }}
PROPERTY
Oniru Court · Flat 2B
CYCLE
Yearly · ₦8,500,000
Report a payment
Heimly does not take payments. You tell your landlord you paid; they confirm and a receipt is issued.
Payment historyRECEIPTS FROM HEIMLY
{{ th.amount }}
{{ th.meta }}
{{ th.state }}
{{ th.receipt }}
Your remindersOn
Email and in app at 30, 14 and 1 days before rent is due, and once if it goes overdue. Sent once per window, never twice.
PHONE390ptStatus first · one thumb · 44px targets
The rent roll becomes a card list led by status. Recording and reporting a payment are bottom sheets completable with one thumb, camera included. The referral page, its share sheet and the admin Review queue are on the Growth page — they are the same components, not new ones.
{{ ph.caption }}
09:41
1 REPORTED
Rent roll
EXPECTED
₦5.46m
RECEIVED
₦2.85m
OUT
₦2.61m
{{ pc.status }}{{ pc.balance }}
{{ pc.property }}
{{ pc.meta }}
Record a payment
09:43
TEN-0052
Partial
Yaba Studios · Room 4
Blessing Etim · monthly · external contact
RENT
₦150,000
RECEIVED
₦90,000
BALANCE
₦60,000
PAYMENTSSCHEDULEDOCS
₦90,000confirmed
26 Aug 2026 · Cash · handed to caretaker
HR-000229
₦60,000 still outstanding. This period is not settled.
Record a payment
{{ ph.sheetTitle }}
{{ ph.sheetSub }}
Amount
₦{{ ph.sheetAmount }}
{{ ph.sheetBannerHead }}
{{ ph.sheetBannerBody }}
Method
TransferCashCheque
Bank reference
Tap the camera to photograph the bank alert — it attaches as proof.
{{ ph.sheetCta }}
09:48
Documents
Search by name…
ALL 9RECEIPTS 2LEASES
{{ dc.icon }}
{{ dc.name }}
{{ dc.meta }}
Storage1.4 / 5 GB
Upload a document
HR-000231.pdf
PAGE 1 OF 1 · 86 KB
HR-000231
28 AUG 2026
Rent receipt
Issued by Bakare & Co
TenantChiamaka Nwosu
PropertyOniru Court · Flat 2B
Period coveredSep 2026
Amount received₦708,333
ShareDownload
STATESThe ones that are not the happy path
Loading, empty, no-results, offline and job progress are all live in the app above — switch on Offline below, or filter the rent roll to nothing. These are the rest.
ERROR · ONE WIDGET FAILS ALONE
Totals could not be calculated
The rent roll below is correct and usable. Only this summary failed.
Try again
REF 8F2C-41
CONFLICT · SOMEONE GOT THERE FIRST
Already confirmed by Chinedu Eze
He confirmed this payment 40 seconds ago and receipt HR-000230 was issued. Nothing you did was lost — there was simply nothing left to do.
See the receipt
PERMISSION · INLINE, NOT A WALL
Maitama Duplex is not assigned to you
You can see it in the rent roll because it belongs to your organisation, but the tenancy and its documents are closed to you. Ask an owner to assign it.
SUCCESS · SPECIFIC, NEVER “DONE”
Payment recorded, receipt HR-000231 issued
Filed under this tenancy and sent to Chiamaka Nwosu.
EMPTY · NEVER RECORDED A TENANCY
No tenancies yet
Two ways in — add one by hand, or bring a whole portfolio at once.
Add tenancyImport
TRY THEM LIVE
{{ offlineLabel }}Show loading skeletonsFilter the roll to nothing
Each window fires once. A second send is impossible, not merely discouraged — that is why every row shows its window rather than a count.
WHAT THE 14-DAY REMINDER SAYS
{{ dr.reminderSubject }}
{{ dr.reminderBody }}
{{ dr.deepLinkALabel }}See my tenancy
{{ dr.reminderRecipients }}
{{ dr.contactInitials }}
{{ dr.contactName }}
{{ dr.contactKind }}
{{ cr.k }}{{ cr.v }}
Not on Heimly
Everything recorded against this contact stays with them. Inviting them adds a login to the same record — no history is moved or lost.
Invite to Heimly
Reject this report
{{ rejectSub }}
Rejecting does not delete anything. The report stays in the record marked rejected, the period stays outstanding, and your reason is sent to the tenant so they know what to do next.