Property & Collections Management Platform

Role: Product Manager & Lead Developer

Asset management sits split across systems and side spreadsheets, and accounting rules get broken without intent. This platform gathers the asset's whole cycle into one place and builds the rules into the logic instead of leaving them to the user's attention.

A landing screen and ten operational sections, each one umbrella with inner tabs rather than repeated dropdowns: properties · leasing · sales · maintenance · finance and analysis · reports (ten categories) · collections · the general assistant · approvals · administration. Two approval engines run behind it — one single-step, the other multi-stage — surfacing to the user as one inbox that never reveals there are two, ordered by longest waiting. Above that sit 16 assistants and agents: eight specialists answering inside their own screens, a general assistant crossing sections in one conversation, a central router sending each request to whoever owns its domain, and six scheduled reporting agents — each with its permissions and its hard limit.

Underneath runs a calculation engine that shows its formula on screen, not only its result: occupancy (leased ÷ leasable — sold units out of the equation, units under maintenance inside the denominator so they lower the rate as they should), collection rate, receivable ageing computed from the due date rather than the creation date, brokerage and its variance from the calculated figure against an alert threshold, and net operating income by its stated definition. Division by zero yields “—” rather than “0”, because zero is a measurement and emptiness is not. States are governed by constrained transitions: a deal never jumps from new to transfer, a lead's stage updates itself when the offer is approved, and legal action is raised automatically on a collection default rather than added by hand.

Property ManagementLeasingSales PipelineCollectionsMaintenance SLANOI & AccountingAI AgentsApproval Workflows

Key Features

Every Rate Shows Its Formula On Screen

Every metric shows its formula beside it, and one with no denominator renders "—", never "0%" — auditable, not just believable.

A Guard Against Double-Counting What Is Owed

Accrual tranches are cumulative, ageing tranches exclusive — summing the wrong one doubles the debt, so the board states the rule itself.

Accounting Rules the System Enforces, Not a Policy

Sale proceeds sit outside net operating income, deposits are trust money not revenue, and a posted entry is corrected by reversal, never edited.

A Deadline per Priority, and Automatic Escalation

Each priority has response and resolution ceilings with an "overdue!" badge on breach — an emergency is urgent automatically.

From Interested Client to Deed Transfer

Seven stages advance from offer approval, not manual dragging; a loss reason is mandatory and completion is final.

Automatic Property Tax & Commission

Tax is added on top of the price, never extracted from it; no commission on an owned unit, and deviations get flagged.

An Agent Fleet With Scopes and Red Lines

16 assistants and agents, each inheriting its caller's scope and declaring what it excluded — none acts on anyone's behalf.

The Business Problem

The same figure differs from one screen to the next and nobody knows which is right. And accounting rules get broken in good faith — a sale's proceeds are added to operating revenue so the month looks excellent when it is not, and tenant deposits, which are held and returned, are counted as revenue — nobody intends the error; the tools simply never prevented it.

Why We Built It

One platform where every number is derived from its data rather than stored, with its formula declared beside it — auditable instead of merely believable. Counter-intuitive rules are printed as fixed text on the screen itself rather than left to user training, and forbidden transitions are blocked in the logic rather than in the manual. The system's vocabulary is fixed by an approved dictionary, so the same thing is never named two ways in two departments. An agent layer then sits on top, inheriting the same permissions and answering from official reports — turning an answer from a report request into a question.

How We Built It

An Arabic RTL React interface split into hubs, with a single navigation map defined in one configuration file that drives the sidebar and its tabs — so screens never branch from two sources. All metrics live in one central service layer rather than inside components, making it impossible for occupancy to be computed two ways on two screens. The measurement rule is guarded by a single function returning "—" when the denominator is absent instead of a false zero, because Number(null) = 0 is a pattern, not a state. Allowed transitions are a data table rather than a chain of conditions; maintenance windows are rows in a table editable without redeploying; approvals flow through a unified-inbox service that merges both engines into one surface. It closes with a verification script that runs the real metric functions over reference data and asserts 41 results, including cross-checks that expose any broken tranche cumulation. The six periodic reporting agents run on self-hosted n8n against local Ollama models, with the system acting purely as their data source — so sensitive data never leaves the organisation.