ConstructionOngoing

Running an entire construction business on software I maintain

Customers, leads, jobs, files, and signable proposals for a construction company, across 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. 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. 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. It was friction 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. That was a requirement rather than a nice extra, because a site that needs a developer to change a phone number stops getting changed.

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

A customer is one record, not four

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. Their customer records, their pipeline, their project history, and their public presence are one system rather than a habit of remembering where things are.

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

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