Case study · Louisville-area mechanical contractor

The Takeoff Engine

A Louisville-area mechanical contractor bids its work off piping drawings that someone has to read line by line. I built an engine that reads a scanned drawing and hands the estimator a bill of materials to confirm, built to run inside their building.

Drawing → BOM
A scanned piping drawing in, a structured bill of materials out, every row ready for the estimator to confirm
Illustration: a made-up piping drawing read into a bill of materials
Illustration with a made-up drawing. Client drawings never appear here.

Before · After

Before

An estimator reads every line of every drawing by hand

After

The engine reads it; the estimator confirms it

Problem

A Louisville-area mechanical contractor prices its work off piping drawings that an estimator has to read and count by hand, and the drawings belong to its customers, so cloud AI tools were never an option.

Approach

I built an engine that finds the tables and regions on a scanned drawing, reads them with OCR and a vision model that runs locally, and writes a structured bill of materials the estimator reviews and confirms. It is scored against the estimators' own takeoffs, and when it cannot read something it says so instead of guessing.

Outcome

A paid, working engine, about 41,000 lines across 201 commits, built to run on a machine inside their building so no drawing ever has to leave it.

My role

Sole engineer: extraction pipeline, scoring harness, review app, deployment design.

What this means for you

If your bids start with someone reading documents by hand, that reading can be done by a machine in your own office.


Stack

PythonTesseract OCRLocal vision model (Ollama)TypeScriptOn-premise