Skip to main content

Shared Contract Portal for Fire Door Works

A shared job list for a contractor and its client, built on the decision that neither of them owns it.

Client

Roothings Builders Ltd, with Hainault Home Improvements

Industry

Passive Fire Protection / Communal Housing

Timeline

Built and launched 2026

01

The problem

Roothings Builders are passive fire protection specialists. They send fire and communal door work to Hainault Home Improvements, who survey, order, install and invoice it. The work is on other people's homes, so the facts split awkwardly between the two firms: Roothings hold the property, the tenant and the works required, while Hainault hold the stage, the payments and the fitting date.

That split was being reconciled by phone. Roothings could not see what stage anything had reached without asking, and every answer was someone's recollection rather than a record. On this kind of work the questions that matter later are precise ones: when was it surveyed, when was the deposit taken, who moved it, and when.

The naive design is a client portal: the contractor gets a read-only window and the installer types everything in. We built that first and it was wrong.

02

What we built

Both sides see the same list, and both sides can change it
Hainault run this work for Roothings, they do not own it. That made shared the default, and put the burden of proof on anything one-sided.
Field ownership follows whose facts they are
Roothings own the property, tenant, access code and works required. Hainault own stage, payments, value and advisor. Neither side's columns are ever written from the other's form.
Every change names who made it, in plain text
Stamped at the moment of writing rather than resolved from a user record later, so the history survives someone leaving the company.
Undo corrects, it never erases
An undo appends a correcting move. An audit trail you can rewrite is not an audit trail.
Under 3 kB of JavaScript
The charts are plain HTML and CSS rather than a charting library, so both firms read identical numbers on a phone in a stairwell.
03

What it did

  • One shared record of every job, replacing status reconciled by phone call
  • Both parties can raise, edit and move work, with field ownership following whose facts they are
  • Permanent audit trail naming the actor on every change, with undo that corrects rather than erases
  • Identical pipeline and payment charts on both sides, so both firms read the same numbers
  • Under 3 kB of client JavaScript, so it works on a phone on site
  • Sensitive tenant notes moved to an internal field and kept out of the shared view
  • Hosted on its own subdomain, scoped so a guessed job ID from the wrong company returns nothing
Technical details

The technology behind Roothings Builders Ltd, with Hainault Home Improvements's project.

Next.js 15React 19TypeScriptDrizzle ORMPostgreSQLRailway (EU)Tailwind CSSVercel

Ready to build something like this?

Whether it's a SaaS platform, a custom dashboard, or a brand website - we build around your business and the people who use it.