I built this full-stack estimator solo, from an empty repo to a deployed app. My tool replaced a structural-panel manufacturer's hand-built Excel quoting process.
Drag to compare the old spreadsheet against the new autofilled estimate.
This is the same job priced two different ways. On the left, someone typed every measurement from a PlanSwift takeoff into Excel by hand. On the right, the estimator reads that same takeoff and prices the job automatically.
Estimators read measurements off architectural takeoff PDFs, then applied pricing rules by hand in Excel. The process was slow, error-prone, and hard to keep consistent as prices changed.
I built the tool by validating against 300+ real historical jobs rather than from a written spec.
Gemini vision reads measurements straight from the legends in takeoffs.
Automatically maps raw measurements to the right panel categories, handling messy labels, typos, and duplicates. The estimator can manually edit for custom decisions.
I reverse-engineered the legacy Excel pricing until outputs matched to the penny. I found three structurally different pricing formulas hidden behind what looked like one rule.
Pricing a job was the first problem. Making quotes durable, attributable, and safe to hand to a team was the rest of it.
Every estimate persists as a project with its own revision history. All projects are searchable and sortable. Adding a new revision duplicates the existing project for manual alteration, under the system's current pricing.
Accounts are tiered: Admin, Editor, and Viewer. Admins can add and manage the other users — guarding against the kind of errors that crept into a single shared spreadsheet.
Changes are recorded rather than overwritten, so a quote carries its own trail of what changed and when.
I designed rate tables to be versioned and append-only, so updating rates inserts a new row instead of overwriting one. "Current" comes from the latest effective date, and every past version stays read-only. Editing a saved quote forces an explicit choice between the price it was originally quoted at and today's.
Later, we need to answer one question: what did we quote this customer six months ago, and why?
For fields with a clear historical majority, I auto-populated the common value to save a step. But panel gauge split roughly 50/50 across the jobs I checked, so defaulting would bury a coin-flip the estimator might not notice.
Instead of auto-filling it, I highlighted the gauge field to force an explicit choice. The tool is designed to keep humans in the loop on arbitrary choices.
The test suite locked that accuracy in. It also caught silent mispricing and category-misclassification bugs before they reached a customer.