MMordeHaï

Case · B2B tool · Property management

€2.2M in rents a year, run by software built for them.

A client managing about 40 property companies ran its rents on tools that almost fit. We built software around their exact rules, and proved it computes the same money as before.

  • ~40 property companies, 53 active leases
  • Invoicing, payment matching, rent indexation, late payments
  • Built around the client's exact rules, not a generic SaaS

Private client tool · shown here with demo data

€2.2Mrents invoiced per year
~40property companies in one place
53active leases, each with its own rules
3layers of proof before any switchover
9domains checked line by line

The product

The whole rent cycle, in one tool.

Bill the rent, match the bank payments, chase what's late, index the rent every year. Each step checks the one before.

Bank matching screen with suggested matches

Bank matching

Every payment finds its invoice

  • Import a bank statement
  • Safe matches are applied, the rest is suggested
  • A human confirms the doubtful ones
Rent calls list

Invoicing

Rent calls, generated

  • Preview first, nothing is sent
  • Leases due for indexing are flagged
Rent revisions screen

Indexation

Rent revisions on time

  • Official index, computed per lease
  • Urgent, late and upcoming at a glance
Late payments screen

Late payments

What's owed, by age

Invoice register

Register

Every invoice, numbered

Also inside

Dashboard, P&L, alerts, batch invoicing

  • Emails with PDF invoices
  • Loans and property dealer files

Screens from the tool's own demo data. Client name and branding removed. The interface is in French, like its users.

The execution

What made it hard to build.

Invoicing

An invoice can't go out wrong

  • Leases due for indexation are flagged before billing
  • Every run starts as a preview that changes nothing
  • Invoice numbers are only assigned at issue, in sequence

Proof

Same money, proven three ways

  • The imported data is compared to the old tool on 9 domains
  • The engine is replayed over 12 months without writing anything
  • Its rules are checked against the invoices really sent

History

A lease history nobody can rewrite

  • Every change to a lease is a new event, never an edit
  • The database itself refuses to alter the past
  • A correction replaces an event, and keeps the trace

Safety

Nothing big happens by surprise

  • Bulk changes run as a dry run, then a report, then a commit
  • A backup is taken before any bulk write
  • Imports are fingerprinted, doubtful lines wait in quarantine

Quick facts

The details.

Ruby on Rails 8PostgreSQLHotwireTailwindSolid QueuePrawn (PDF)KamalClaude Code

Figures from the project repository and its fidelity audit, Sep 30, 2026. Rents: €2,247,068 per year across 53 active leases.