Skip to content
SKSuraj Kumar

Real estate operations

Property & Lease Management — Reference Build

Generates rent schedules from lease terms, allocates part payments the same way every time, and keeps a ledger per lease that both sides can read.

  • Business software
  • Real estate
  • Billing
  • Ledger
  • Next.js
Role
Sole engineer. Rent schedule generation, payment allocation, lease ledger and the maintenance workflow.
Work type
Self-directed build — no client
Timeline
8 weeks build effort · 2026
Status
Case study published
Client
Independent build

Build effort, not elapsed calendar time. Engagements ran alongside study and employment, so this figure is the work itself rather than the span it sat in.

Interface built in code for this case study — not a client screen capture.

01Business problem

What was actually going wrong

Landlords and property managers run leases from a spreadsheet, which handles neither a part payment nor an escalation nor a mid-month move-in without someone doing arithmetic by hand.

Who feels it

  • Landlords managing several units by hand
  • Property managers billing on behalf of owners
  • Tenants unable to reconcile what they owe
  • Anyone disputing a deposit deduction after move-out

A lease is a schedule of obligations, but a spreadsheet stores a monthly rent figure. The moment reality deviates — a tenant moves in on the eighteenth, a five percent escalation lands on the anniversary, a payment arrives for less than the amount due, a late fee applies — the sheet needs manual intervention, and different people intervene differently.

Part payments are where it breaks down completely. A tenant owing three months pays a partial amount. Applied against the oldest debt it clears an old month; applied against the newest it leaves the arrears aged. Both happen, inconsistently, and neither the landlord nor the tenant can reconstruct how the balance was reached. Disputes then come down to two spreadsheets disagreeing.

Meanwhile maintenance requests arrive by phone and message and are lost, deposits are held with no clear record of deductions, and renewal or notice dates pass unnoticed — the same forgotten-date problem that costs money in any contract-driven business.

02Product overview

What got built

A lease management system that generates a dated rent schedule from lease terms including pro-rata periods and escalations, records every charge and payment in a per-lease ledger, and allocates payments through one stated waterfall so a balance is always reproducible.

Engineering notes

  • Rent schedules that reconcile exactly to the lease total
  • Typed escalation clauses applied at lease anniversary
  • Deterministic payment allocation with per-charge records
  • Money held as integer minor units throughout

A lease produces a schedule, not a monthly number. Terms — start date, end date, rent amount, billing day, escalation clause, deposit — generate dated charges, with the first and last periods pro-rated by day count and escalations applied at their anniversary. The schedule is generated once and stored as charges, so what a tenant owes is a set of dated records and not a formula someone re-evaluates each month.

Everything lands in a per-lease ledger. Rent charges, late fees, utility recharges, maintenance recharges, payments, credits and deposit movements are all entries, and the balance is their sum. Because the ledger is the source of truth, a statement is a read and not a reconstruction, and a landlord and tenant looking at the same ledger see the same history.

Payment allocation follows one waterfall, applied identically every time: late fees, then oldest outstanding charges, then current, with any excess held as a credit against future charges. The allocation is recorded per payment, so a tenant can see exactly which charges their money cleared, and a dispute becomes a question about a specific entry rather than a disagreement about a total.

Maintenance requests are tickets with a category, a priority-derived response target, vendor assignment and cost recording, with the option to recharge to the tenant where the lease permits it. Notice and renewal dates come off the lease term and appear as dated alerts.

03Key features

What the software does, feature by feature

11 capabilities. Every one of them is deterministic software — there is no model in this build, and nothing here is described as AI.

  • 01

    Property and unit registry

    Properties with units, attributes, ownership and current occupancy status in one structure.

  • 02

    Lease terms and documents

    Start and end dates, rent, billing day, escalation clause, deposit and the signed document held against the lease.

  • 03

    Rent schedule generation

    Dated charges generated from terms, with first and last periods pro-rated by day count and escalations applied at anniversary.

  • 04

    Per-lease ledger

    Charges, payments, fees, credits and deposit movements as entries, with the balance derived from them.

  • 05

    Payment allocation waterfall

    One stated order applied every time — fees, then oldest charges, then current — with the allocation recorded per payment.

  • 06

    Part payments and credits

    Underpayments leave specific charges partially settled; overpayments are held as credit and applied to the next charge.

  • 07

    Late fees by policy

    Fees applied from lease terms after a grace period, posted as ledger entries that can be waived with a recorded reason.

  • 08

    Deposit handling

    Deposits tracked separately from rent, with itemised deductions at move-out and a settlement statement.

  • 09

    Maintenance tickets

    Requests with category, response target, vendor assignment, cost and optional recharge where the lease allows it.

  • 10

    Renewal and notice alerts

    Dates derived from the lease term, surfaced with lead time so a renewal decision gets made and not defaulted into.

  • 11

    Tenant statements

    A statement generated from the ledger showing charges, payments and how each payment was allocated.

04User flow

How a person moves through it

The path from the trigger to the finished record, with each step attributed to whoever performs it — a person or the system.

  1. 01ManagerRegisters the property and unit, then creates a lease with its terms and uploads the signed document.
  2. 02SystemGenerates the dated rent schedule with pro-rata first and last periods and escalations at anniversary.
  3. 03SystemPosts each charge on its due date and applies late fees per policy after the grace period.
  4. 04TenantPays, in full or in part, against their outstanding balance.
  5. 05SystemAllocates the payment through the waterfall and records which charges it settled.
  6. 06TenantRaises a maintenance request; it is categorised, given a response target and assigned to a vendor.
  7. 07ManagerRecords vendor cost and recharges it where the lease permits, as a ledger entry.
  8. 08ManagerActs on renewal and notice alerts, and settles the deposit with itemised deductions at move-out.

05Architecture

How it is put together

The processing path first, then the layers it runs on, then the constraints that shaped both.

Path through the system

6 stages

  1. 01

    Register

    Property, unit and lease terms captured with documents.

  2. 02

    Generate

    Rent schedule produced with pro-rata and escalation applied.

  3. 03

    Charge

    Dated charges posted to the lease ledger; fees applied by policy.

  4. 04

    Collect

    Payments allocated through a single stated waterfall.

  5. 05

    Maintain

    Tickets routed to vendors; costs recorded and optionally recharged.

  6. 06

    Close

    Notice and renewal handled; deposit settled with itemised deductions.

Layers

Interface
Portfolio view by property and occupancyLease detail with ledger and balancePayment entry with allocation previewMaintenance ticket boardRenewal and notice calendar
Application
Schedule generator with pro-rata and escalationAllocation waterfallLate fee policy evaluationDeposit settlement calculation
Services
Statement generationPayment remindersVendor notificationDocument storage
Data
Properties, units and leasesAppend-only lease ledger entriesPayment allocationsMaintenance tickets with costs

Why it is shaped this way

  • The ledger is append-only and the balance is derived. A stored balance in a rent system is the fastest route to a dispute nobody can settle, because the arithmetic that produced it is gone.
  • Allocation is a pure function producing allocation records. The same payment against the same ledger always allocates identically, so a statement can be defended line by line.
  • Amounts are held in minor units as integers. Rent proration and percentage escalations both invite floating-point drift, and drift in a rent ledger becomes a customer-facing error.

06Technical decisions

The choices that mattered, and what each one cost

Every decision here was contested by a reasonable alternative. The trade-off column is the part usually left out.

01

Generate the rent schedule as stored dated charges, not rent computed on demand.

Why

A stored schedule can be adjusted for a real-world exception — a rent holiday, a negotiated reduction — without breaking a formula. It also means a tenant’s obligations exist as records that can be referenced by a payment.

Trade-off

Changing lease terms requires regenerating future charges while leaving posted ones alone. That is explicit logic, deliberately not a silent recalculation.

02

Define one payment allocation waterfall and apply it everywhere.

Why

Inconsistent allocation is the root of most rent disputes. A single stated order — fees, oldest charges, current, then credit — makes every balance reproducible and every statement explainable.

Trade-off

A landlord occasionally wants to allocate differently, so a manual allocation override exists and is recorded as such. The rule itself is never quietly changed.

03

Hold all amounts as integer minor units.

Why

Pro-rating a month by day count and applying a percentage escalation both produce repeating decimals. Floating-point money accumulates drift, and in a rent ledger that drift becomes an argument with a tenant.

Trade-off

Rounding must be decided explicitly at each step, and the schedule generator assigns rounding remainders deterministically so a year of charges sums to the annual rent.

04

Keep deposits outside the rent balance.

Why

A deposit is held money, not revenue, and netting it against arrears obscures both. Separating them makes the move-out settlement an itemised calculation rather than an adjustment inside a running balance.

Trade-off

Two balances to present, which the interface handles by showing them as distinct sections and never as a single figure.

05

Apply late fees as reversible ledger entries.

Why

Fees get waived for good reasons. Posting them as entries and waiving with a reversing entry keeps both the policy application and the waiver visible, instead of the fee simply never appearing.

Trade-off

The ledger holds entries that net to zero — exactly the record needed to show that a fee was charged and then waived.

07Challenges

What was genuinely difficult

Not the setup work. These are the problems where the first implementation was wrong and had to be reconsidered.

01

Pro-rating partial first and last months so a year of charges still sums to the annual rent.

Approach

Proration is computed on actual day counts in the affected month, in integer minor units, with the rounding remainder assigned to the final full period and never dropped. The generator asserts that the schedule sums to the expected total for the term and fails loudly if it does not.

Outcome

Schedules reconcile exactly, so a tenant adding up their charges gets the figure in the lease instead of one a rupee or two off.

02

Escalation clauses expressed in different ways across leases.

Approach

Escalation is modelled as a typed clause — fixed percentage at anniversary, fixed amount, or scheduled steps — with the anniversary computed from the lease start, not the calendar year. Generation applies the clause forward through the term, and each escalated charge records the clause and the base it was applied to.

Outcome

A tenant asking why rent rose can be shown the clause, the base amount and the resulting charge from the record itself.

03

Part payments producing balances neither side could reconcile.

Approach

Allocation became a pure function over the ledger returning explicit allocation records per charge. The payment screen previews the allocation before it is committed, and the tenant statement shows, for each payment, exactly which charges it settled and by how much.

Outcome

Disputes moved from arguing about a total to examining a specific allocation, which is a resolvable conversation.

08Business value

What it changes for the business

Stated qualitatively on purpose. Invented percentages are the easiest thing to put on a portfolio and the easiest thing to see through.

Operational effect

  • Produces a rent schedule from lease terms, including the mid-month and escalation cases that break spreadsheets.
  • Makes every balance reproducible, so landlord and tenant can read the same history.
  • Allocates part payments consistently, which removes the most common cause of rent disputes.
  • Keeps deposits and their deductions itemised — a contested move-out turns on that list.
  • Gives maintenance requests a record, an owner and a response target instead of a phone call.
  • Surfaces notice and renewal dates before they pass.

What would change at scale

  • Add owner statements and management fee calculation, since a property manager’s reporting obligation to owners is a separate output from tenant billing.
  • Support payment gateway reconciliation with automatic matching by reference and a review queue for unmatched receipts.
  • Introduce tax handling per jurisdiction on rent and recharges, which varies enough that it cannot be a single configurable rate.
  • Add a tenant portal with statement access and request raising, which reduces the message volume a manager handles directly.
  • Model rent-free periods, stepped incentives and break clauses explicitly, since commercial leases use them routinely and they distort a naive schedule.

09Interface

The screens where the work happens

Dense operational views rather than dashboards. These are used for hours at a time, so the priorities are legibility, keyboard flow and state that is never ambiguous.

Lease ledger

Charges, payments, fees and credits in date order with a running balance and the deposit shown separately.

Payment allocation

A preview of which charges a payment will settle, and by how much, before it is committed.

Rent schedule

Generated charges with pro-rated first and last periods and each escalation showing its clause and base.

Maintenance board

Tickets by priority with response target, assigned vendor, recorded cost and recharge status.

The screen above is built in HTML and CSS for this case study. It reproduces the layout, states and vocabulary of the real build without exposing client data, which is why it exists rather than a screenshot. It is evidence of design and of the decisions behind it. It is not a photograph of a deployed system, and no part of it is a capture of anyone else’s product.

10Technologies

What it is built with

Chosen for the shape of the problem, not for novelty. Anything unusual is justified in the decisions section above.

Frontend
  • Next.js App Router
  • TypeScript
  • Tailwind CSS
  • Server Components
Application
  • Schedule generation with pro-rata
  • Deterministic allocation waterfall
  • Integer minor-unit money
  • Policy-driven late fees
Data
  • PostgreSQL
  • Append-only lease ledger
  • Payment allocation records
Platform
  • Statement generation
  • Reminder scheduling
  • Document storage

11Technical preview

Structure, models and annotated excerpts

There is no repository link on this site. What is available instead is the module structure, the data model, the interface contracts and annotated excerpts written for this case study — enough for a technical reviewer to judge the engineering.

Technical preview

Implementation detail for this build

Selected implementation details are available for technical review: component structure, data models, architecture notes and sanitized code excerpts. Some client-specific source material stays private because of confidentiality. Enter the project access keyword if you have been given one — the same one works across every case study.

A presentation convenience, not authentication. This is a static site, so the keyword ships to your browser with the page and anyone reading the bundle can find it — worth saying plainly rather than dressing it up. Nothing confidential is stored behind it.

Inside this section

  • Module and folder structure for the build
  • Data models and the interface contracts between layers
  • 2 annotated implementation excerpts
  • Design notes covering the decisions the excerpts imply
  • The same keyword opens every case study on the site

For private client work, contact me for a walkthrough.

Next step

Need something along these lines?

Send the process, the constraints and the deadline. You will get an honest scope, an architecture sketch and a timeline before any commitment.

Email
surajk86808@gmail.com
Based in
Bengaluru, India
Working hours
IST (UTC+5:30)
Availability
Taking new engagements