Legal & administrative operations

Contracts that tell you they are about to expire

Every business has contracts and every business forgets a renewal. This tracks agreements and leases with their recipients, documents and version chains — and sends the reminder before the expiry, not after.

10 tables

covering agreements, documents, recipients, reminders and activity

5 risk flags

computed automatically on every agreement

Version chains

renewals and extensions tracked as lineage, not replacements

Agreement portfolio dashboard showing totals, agreements expiring in 30 and 7 days, at-risk count, renewals this month and a portfolio breakdown.

Swipe to see the full screen

The whole contract portfolio: what you hold, what expires soon, and what carries an automatic risk flag.

The situation

Contracts live in a shared drive, a mailbox and somebody’s memory. The renewal date lives only in the last of those.

For a retailer with leases across dozens of sites, the cost of forgetting is concrete: an auto-renewal on bad terms, a rent escalation nobody budgeted for, or a lock-in that expired unnoticed while the store was underperforming.

What I built

An agreement register that knows what it holds, what is at risk, and who needs telling.

  • Agreements with their counterparties, recipients and attached documents, imported in bulk from the spreadsheet they were already being tracked in.
  • Renewals and extensions recorded as version chains, so a contract’s whole lineage is visible rather than the newest copy overwriting the history.
  • Five risk flags computed on every read: expiring without a renewal linked, past expiry but still open, no documents attached, no reminder recipients, and a missing start date.
  • Lease terms with rent-escalation schedules computed rather than typed, and reminders scheduled against both expiry and escalation dates.
  • A scheduled job that emails the right people before a deadline, with an activity log recording who changed what.
Agreement register listing every active agreement with type, counterparty, expiry and status.

Swipe to see the full screen

Every open agreement ordered by time remaining, so a renewal is never discovered after the fact.
Single lease detail with its terms, attached documents and version lineage.

Swipe to see the full screen

A single lease with its rent schedule, escalation date, documents and full renewal history.
The agreement dashboard rendered on a phone.
The same register on a phone.

Decisions worth explaining

The choice, why it was made, and what it means for you. Skip the middle part if you like — the point still lands.

01

Storage and email sit behind swappable interfaces

The choice

Document storage and email delivery are defined as interfaces with the provider chosen by configuration. Today that is the company’s own cloud storage and its own mail account.

Why

A contract system married to one vendor’s cloud is a contract system you will be rebuilding in three years.

What it means for you

If you use a different provider, one implementation changes and nothing else does. Your documents also live in your storage, not mine.

02

Risk flags are derived, never stored

The choice

The five flags are computed when an agreement is read, from its current data.

Why

A stored flag is a second source of truth that goes stale the moment the underlying date changes, and then the dashboard is confidently wrong.

What it means for you

What you see is always current, and there is no reconciliation job to fail quietly.

03

Renewal as lineage, not replacement

The choice

A renewal creates a new agreement linked to the old one rather than editing the existing record.

Why

The previous terms are exactly what you need when negotiating the next renewal, and an edit destroys them.

What it means for you

You can see what a contract used to cost and how it has moved across three renewals.

For the technical readerUnder the hood
  • Express and TypeScript backend on PostgreSQL with raw parameterised SQL and a layered route → controller → service → repository structure.
  • Next.js front end with MUI and its data grid, deliberately a different interface kit from the Tailwind-based systems.
  • Directory single sign-on for identity, cloud storage for documents, and a scheduled reminder job.

What it changed

  • Renewal dates stopped living in one person’s memory.
  • The reminder arrives before the deadline, and the register shows what is at risk without anyone compiling a list.

Where this applies to you

Anyone with more than about twenty active agreements — leases, vendor contracts, licences, employment terms. It is especially valuable for multi-site retail and franchise operators, where lease escalations are a real and forecastable cost.

Screenshots show the real interface with fabricated counterparties and figures. No client contract data appears.

Tell me what’s slow, manual, or unreliable.

Twenty minutes on a call is usually enough for me to tell you whether software is the answer and roughly what it would cost. If it isn’t, I’ll say so.

Available for freelance builds alongside senior engineering work. One or two projects at a time.