Shared Contract Portal for Fire Door Works
Client
Roothings Builders Ltd, with Hainault Home Improvements
Industry
Passive Fire Protection / Communal Housing
Tech Stack
Timeline
Built and launched 2026
The Challenge
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.
What We Built
The governing decision was to treat it as a two-sided platform rather than a portal. Hainault do not own this list, they run it for Roothings, so the default became that both sides see the same thing and both sides can change it, with the burden of proof on making anything one-sided.
So Roothings raise and edit their own jobs, at any stage, because a tenant's phone number changing the week before an install is exactly when it matters. 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 writes a permanent activity row naming who made it in plain text, stamped at the time of writing rather than resolved from a user record, so history survives a person leaving. Undo appends a correcting move instead of erasing the original, because an audit trail you can rewrite is not an audit trail.
Both sides get the same pipeline and payment charts, drawn from one module in the same colours, so a phone call about how many jobs are in manufacturing lands on the same picture on both screens. The charts are plain HTML and CSS rather than a charting library, which keeps the whole portal at well under 3 kB of JavaScript and working on a phone in a stairwell.
One data protection decision shaped the build: the imported notes column held sensitive free text about tenants, including a mental health reference. All imported notes were moved to an internal field and the client-facing ones cleared, so the shared view carries factual job status only.
Results
- ✓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
More work like this
Sales CRM for an Essex Door and Window Installer
1,499 leads moved off a spreadsheet into a live sales board a non-technical team actually use.
Premium Car and Van Hire Website
WhatsApp-first hire site with a quote builder and a landing page for every Essex town served.
Real-Time Queue Intelligence Platform
Live wait times across three barbershop locations, with AI predictions and a management dashboard.
Ready to build something like this?
Whether it's a SaaS platform, a custom dashboard, or a brand website - we build bespoke tools that fit your business.