Landscape & construction estimating · 2026

  • My own product
  • In development

An AI takeoff tool that reads a plan's legend and scale, so estimators only have to trace

A browser tool that reads a plan's legend and scale with AI, lets an estimator trace each material at true scale, and exports a bill of quantities. I built it after testing on real plans exactly where full automation breaks.

My own product, built from takeoff work for a landscaping contractor. It's in development and sits behind a login.

Screenshots use a self-drawn sample plan with fictional data, not a client drawing, and the AI responses shown are sample output rather than a live run.

Product
Plan-Markup (my own)
Industry
Landscape & construction estimating
My role
Research, design and build
Year
2026
Status
In development

By · Updated

Fully marked-up sample plan with per-material totals: m² of turf and softfall, LM of edging and fence, counts of trees and sails
Takeoff complete: every legend item measured, with per-material totals in the legend and the bill of quantities. Sample data, not a live run.View full size: Takeoff complete: every legend item measured, with per-material totals in the legend and the bill of quantities.

The brief

A landscaping and playscape contractor that works on childcare centres needed quantities from large plan PDFs before it could quote: square metres of turf and softfall, linear metres of edging, counts of trees and play equipment.

I started by trying to automate the whole takeoff in Python. On the first plan, an A0 sheet at 1:110, it worked well: the shade sails were the only dashed paths in the PDF, so I could pull every panel out of the vector data exactly, and I found the trees by colour and their drawn outlines. The next two plans hit a wall. Their surfaces were drawn as hatching inside boundaries, with no colour fills, and nothing in the file separated a region's edge from its hatch lines.

That's why quantity surveyors still trace these plans by hand. So I stopped trying to automate the tracing and built a tool that makes tracing fast, using AI only where it's reliable: reading the legend and reading the scale.

What I built, and why

  1. Find where automation breaks before building a product

    I began with a config-driven Python pipeline (render, calibrate, regions, overlays, segment, measure, bill of quantities, written spec) and a step-by-step SOP.

    Where a region was cleanly bounded, the numbers came close to the client's own bill of quantities. On hatch-only surfaces, automatic area measurement broke into fragments. Knowing exactly where it fails told me what the product should automate, and what it should leave to a person.

  2. AI reads the legend, and the legend picks the tool

    Claude reads a boxed legend region, rendered at high resolution from the vector source rather than cropped from a low-res image. It returns every item classified as an area (m²), a length (LM) or a count (no.), and that classification picks the drawing tool.

    Box several regions and the results add up, de-duplicated by code. Legend rows then work as layer toggles, and inspecting a layer numbers its shapes on the plan to match the quantity list.

    Legend panel listing sample materials classified as polygon, line or click items, beside the sample landscape plan
    The legend, read and classified: 10 materials as area (m²), length (LM) or count. Sample data, not a live run.View full size: The legend, read and classified: 10 materials as area (m²), length (LM) or count.
  3. Scale from the page's true dimensions

    Claude also reads the drawing scale and sheet size from high-res crops of the title block. The scale maths uses the page's true PDF dimensions, because snapping to the nominal paper size caused up to about 12% area error on off-size pages.

    If the title block can't be read, there are two fallbacks: paper size plus ratio, or measuring a known length on the plan.

    Set scale dialog with a Read scale from plan (AI) button, a detected A3 paper size and a 1:200 drawing ratio
    Read the scale with AI, pick the paper size and ratio, or measure a known length. Sample data, not a live run.View full size: Read the scale with AI, pick the paper size and ratio, or measure a known length.
  4. Drawing tools built for speed

    Pages render in the browser with pdf.js at full vector detail, so small codes and dimensions stay sharp at any zoom. Polygon, line and click-to-count tools have editable vertices, and holes for cut-outs, so a sandpit inside turf leaves a net area.

    The canvas comes first: right-click starts a shape, Shift-click repeats the last material, Enter finishes and Ctrl+Z undoes. Quantities update as you draw.

    Sample plan overlaid with coloured polygons, lines and count markers, a garden bed being drawn and live quantities in the side panel
    Tracing a garden bed: turf, softfall, paths, edging and trees already measured. Sample data, not a live run.View full size: Tracing a garden bed: turf, softfall, paths, edging and trees already measured.
  5. A render queue built for A0 sheets

    For very large sheets I built a level-of-detail tile pyramid. Each tile is rendered once, stored privately by the plan's content hash, and streamed in as it finishes, while a queue of Docker render workers renders tiles in parallel.

    I wrote the queue spec-first and had it adversarially reviewed before release. The review found 10 real defects; all were fixed, and the re-review came back clean.

More screens

Four garden bed polygons numbered 1 to 4 on the plan beside a per-polygon area list
Inspecting a layer numbers its shapes on the plan to match the quantity list. Sample data, not a live run.View full size: Inspecting a layer numbers its shapes on the plan to match the quantity list.
Printable A4 bill of quantities for the sample early learning centre, listing each material, its markups and quantities
The exported bill of quantities: item totals, with a line for every measured shape. Sample data, not a live run.View full size: The exported bill of quantities: item totals, with a line for every measured shape.

Results

faster tile rendering with block ordering: 6.08 s down to 0.78 s per tile, with zero failures on a six-worker fleet
6.4×
Source: Render-queue benchmark during the build, June–July 2026
render-worker image, down from 1.19 GB after slimming it
497 MB
Source: Docker image sizes, June–July 2026
measured for one cleanly bounded turf region, against 35 m² in the client's bill of quantities (sand: 31.4 m² against 36 m²)
34 m²
Source: Python pipeline on a real childcare plan, 2026
  • Built between 28 June and 5 July 2026 (54 commits).
  • AI legend reading with area, length and count classification, and three ways to set scale.
  • A bill of quantities by sheet, item and individual markup, with subtotals. Print an A4 report with a numbered reference plate per material, or export a full CSV breakdown.
  • A project library with thumbnails and autosave, behind a login gate on the app and every API route that fails closed if its signing secret is missing.
  • A self-healing render queue: retries with backoff, heartbeat locks so slow workers aren't cut off, and block-ordered rendering.

These are engineering and accuracy measurements from the build. Time saved per plan isn't claimed here.

I can build something like this for your business.

Contact me

Questions about this project

Can AI measure the areas on my plans automatically?

Not reliably, and I tested it properly before saying so. Plans that draw surfaces as hatching have no clean boundaries in the file, so automatic area measurement breaks into fragments. In my tool the AI reads the legend and the scale, and you trace the areas with fast drawing tools. Every number traces back to a shape you can see.

What kind of plans does it work with?

Any PDF plan, including large A0 and A1 sheets. It handles proper vector CAD exports and flattened renders. The legend can be a table, a schedule or a key with swatches. Box the part you want read, and box more than one part if the legend is split.

How accurate are the quantities?

They're as accurate as the scale and the tracing. Scale comes from the plan's real page dimensions, either read from the title block or set by measuring a known length. Areas subtract any holes you cut. I still recommend a human check against the printed reference plates before a number goes into a quote.

Is my plan sent to an AI model?

Only the parts it needs. When you ask it to read the legend or the scale, cropped images of those areas go to Claude. The full PDF is stored in private storage so the app can render its tiles, and it isn't shared anywhere else.

Can I get the quantities into my estimating spreadsheet?

Yes. There's a CSV export with one row per markup and subtotal rows, and a printable bill of quantities you can save as PDF. You can also save and reopen a whole project.

Could you build a takeoff tool for my trade?

Yes. The legend classification and the drawing tools aren't specific to landscaping: edging, fencing, pipes, tiles and fixtures all fit area, length or count. I'd scope it after a discovery session using one of your real plans.

Want a takeoff tool for your trade?

Edging, fencing, pipes, tiles or fixtures: if it's an area, a length or a count, I can scope a tool around one of your real plans.

Related case studies

All work