ConstructionOngoing

Running an entire construction business on software I maintain

A construction company runs its customers, leads, jobs, files, and signable proposals on a system I built, which spans an API, an internal dashboard, a public site, and a content pipeline the team runs without me.

ClientA construction company
RoleSole engineer

Client details are kept private, but I am happy to talk through the specifics on a call.

4+Systems replaced
1Engineers
5+Years maintained
What was broken

The business was running on scattered tools, with customer details in one place, project information in another, files wherever they last landed, and leads arriving through a website that did nothing with them.

None of it was breaking on any given day, but the friction was spread across every job and it had started to limit how much work the company could reasonably take on.

What I did about it

I replaced the scattered tools with one system rather than integrating them. Integrating would have preserved the underlying problem, which was that no single place knew the truth about a customer.

The public site and the internal system share a backend, so a lead that arrives through the website is already a record by the time anyone reads it. Nothing has to be retyped, and retyping was where information had been going missing.

The team edits their own content, which was a requirement from the start because they needed to change things like a phone number or a photo without waiting on me.

The system today
  • An API that owns customers, leads, projects, and files
  • An internal dashboard the team runs the business from
  • A public marketing site wired directly into the lead pipeline
  • A content pipeline the team edits themselves, with automatic redeploys
  • Proposals, generated as PDFs and signed by the customer online
  • Ongoing maintenance, updates, and new work as the business changes
Detail

Five things worth knowing

01

Each customer lives in one connected record

A customer, their leads, their projects, and their files are one connected record rather than four loosely related ones. This is the change that removed the most day to day friction, because nothing has to be reconciled by hand any more.

Data modelingAPI
02

Leads that arrive already in the system

The website and the dashboard are the same system seen from two sides. An enquiry lands as a record attached to the rest of the business, rather than as an email someone has to remember to act on.

Integration
03

Content the team owns

Copy and imagery live in a CMS the team edits directly, with a redeploy triggered automatically on publish. They have not needed me to change a word on the site since it launched.

CMSAutomation
04

Proposals a customer can sign from a link

The newest piece builds a proposal out of scope and pricing sections, renders it as a PDF, and gives the customer a private link where they can read it and sign. Payment terms and authorisations are part of the record rather than a separate paper trail.

PDFE-signature
05

Still maintained, years later

This is ongoing work rather than a project I handed over and left. I keep dependencies current, watch the things that break quietly, and build new pieces as the business needs them.

Maintenance
Where it stands

The company runs on it now, and their customer records, pipeline, project history, and public site all live in one system instead of relying on people remembering where things are.

It is also the engagement that best describes how I prefer to work, which is to build the system properly and then stay on to keep it healthy while the company grows into it.

Built with
Frontend
NextJSReactJSViteTypeScript
Backend
NodeExpressTSOAPostgreSQLKnex
Infrastructure
Firebase AuthFirebase StorageTurborepo
Services
ContentfulAWS SESCloudflare Turnstile