Skip to content
← Back to projects

Case study · 2026

Construction Cost Estimator

A rule-based tool that gives small builders a transparent, defensible cost range.

  • Next.js
  • TypeScript
  • Tailwind CSS
  • Vercel

The problem

Small builders, project managers and homeowners constantly trade ballpark figures over WhatsApp and email. The numbers are often pulled from memory, vary wildly between quotes and rarely come with any explanation. That makes it hard to compare suppliers and even harder to push back on a price that feels off.

I wanted to see how close I could get to a useful, defensible cost range without any AI or scraping — just clearly written rules, applied consistently.

The solution

A small web app that asks four short questions, then returns a transparent cost range with an itemised breakdown. Every number on screen is traceable back to a rule you can read.

  • Inputs: project type, area in square metres, finish level and complexity.
  • Engine: deterministic rule set with per-category base rates and multipliers.
  • Outputs: low / typical / high cost range, itemised breakdown and a list of assumptions.

How it works

The estimator runs entirely on the client. Inputs flow through a small pure function that produces the same output for the same input every time — which makes it easy to test, easy to audit and impossible to “hallucinate” a number.

  1. 1

    Collect inputs

    Project type (extension, refurb, new build), floor area in m², finish level (standard / mid / high) and complexity (simple / standard / complex).

  2. 2

    Look up base rate

    Each project type has a base £/m² range stored in a small config file, sourced from industry guidance and adjusted for the UK market.

  3. 3

    Apply multipliers

    Finish level and complexity each apply a multiplier to the base rate. A complex high-finish refurb costs noticeably more per m² than a simple one — the rules make that explicit.

  4. 4

    Add contingency and breakdown

    The result is split into labour, materials, prelims and contingency, then presented as a low / typical / high range so users see uncertainty up front.

Worked example

Let's estimate a 40 m² single-storey extension, finished to a mid standard, with standard complexity.

Base rate£2,200 / m²
Finish multiplier (mid)×1.10
Complexity multiplier (standard)×1.00
Area40 m²
Typical cost£96,800
Range (±15% on typical)£82,300 — £111,300

The breakdown shown to the user splits this further into labour (~45%), materials (~35%), prelims (~10%) and contingency (~10%), with every assumption listed below the result.

Why it's useful

  • Transparent. No black-box model. Every figure traces back to a rule in source control.
  • Quick. A useful number in under a minute, instead of waiting days for a written quote.
  • Comparable. Quotes from real suppliers can be checked against the estimator's range to spot outliers.
  • Maintainable. Rates live in a single config; one pull request keeps the whole tool current.

What I learned

The fun part was deliberately not reaching for machine learning. A clear, testable rule set is more honest, easier to defend and far easier to maintain. It also reminded me how much value there is in writing assumptions down — most of the disagreement around cost is really disagreement about scope.