A real estate firm was running an entire rental portfolio of 170+ flats out of spreadsheets. Rent, leases, tenants, owner payouts and repairs all lived in separate sheets that only one or two people fully understood.
Lease renewals slipped. Rent went uncollected because nobody had a single view of who had paid. Repairs were always reactive, a call came in only after something had already broken. The team spent more time feeding the spreadsheets than managing the properties.
So I sat with the people doing the work, scoped what actually slowed them down, and built the whole product end to end on Next.js, TypeScript and Supabase. Here is what it became.
Every screen below uses representative demo data, never real client records.
One place to run the portfolio
The home screen answers what a property manager asks every morning. How much rent is in, what is overdue, what is sitting empty, and what is quietly costing money.
Everything that used to live in scattered sheets now shares one live view, with nothing left to reconcile by hand.

The portfolio explains itself
Below the headline numbers, the data tells its own story. Collection trends, the occupancy mix, and the repair categories quietly eating the budget.
Every empty flat shows the revenue it is losing while it sits vacant. The information was always there. This finally makes it legible.

Analytics anyone can read
A dedicated analytics view turns months of operations into trends, not tables. Punctuality per flat, collection over time, and where maintenance spend really lands.
It is built for the owner who wants the health of the portfolio at a glance, without asking anyone to pull a report.

Then it starts predicting
This is where it stops describing the past. The engine turns the firm's own repair history into a forecast, and a single risk score from 0 to 100 for every flat.
Each category has a rhythm. AC roughly every six months, plumbing closer to nine, a geyser about a year. Once a flat has its own history, the engine learns that flat's real interval and adapts.
At a glance: how many flats are at risk, what is overdue, and the cost likely to land in the next ninety days.

Down to the single flat
Open any flat and it lays out the per category forecast. What is overdue and by how many days, what it is likely to cost, and the history behind the call.
Reactive maintenance becomes a planned schedule. The team fixes the riskiest units first, before a tenant ever has to call.

The spreadsheets are gone. The team runs the whole portfolio from one dashboard, and the work that used to eat their week is roughly 50% faster.
The predictive layer changed the business from reactive to proactive. Instead of waiting for a breakdown, the team sees which flats are at risk and what the next ninety days will cost.
Shipped as a production progressive web app, built by directing AI coding tools across the full stack.
- Ran the discovery and user research with the client, and scoped requirements into a buildable product.
- Owned the product end to end: data model, feature set, UX, and delivery to production.
- Designed and built the dashboard as an AI assisted full stack build on Next.js and Supabase.
- Conceived and implemented the predictive maintenance engine: the interval learning, risk scoring and forecasting logic.
Want the full walkthrough?
Happy to demo Mark My Zone live and talk through the product and the predictive engine in detail.