Construction
Describe the building.
It measures it, then prices what it measured.
Most estimating software asks you to type quantities. This asks you to describe the building — type, count, levels, unit mix, what is on each floor — then measures the shell and the units and prices the measurement.
Single-family through mid-rise, mixed use, and the support structures that carry cost but no dwellings.
- Measured-quantity kinds
- 82
- IBC construction types
- 9
- CSI code rows
- 8,996
01 — Model & takeoff
Type and size in, whole build out.
An estimate is built out of assets — buildings and site scopes — each with its own unit mix, floors, spaces, openings and takeoff. The shell is measured once; everything inside is measured per unit type, so a fourplex is not four copies of a duplex.
- Eight building types with real defaults for unit count and storeys
- The IBC construction type is never guessed — unset stays unset, and an unknown value refuses the whole save
- It is snapshotted onto every cost line at creation, so historical costs stay comparable after the asset is edited
- Site work and off-site are their own scopes, with their own earthwork quantities
- Spatial Design lays out levels and placements before an estimate exists — and needs neither a project nor an estimate to do it
- No total is ever stored: gross area, unit count and efficiency are produced on read, so a second number can never disagree with the first
The building vocabulary
- Building types
- 8
- IBC construction types
- 9 · I-A → V-B
- Quantity kinds
- 82
- Scale classes
- 4
- Line scopes
- 4
- Engine, pure
- 26 modules
02 — Lines & measurements
Every line can ride a named measurement. Change the building and it follows.
One registry of measured-quantity kinds is the single list every surface reads — counts, building and unit areas, spaces, openings, trim, takeoff, on-site and off-site earthwork, partitions, fixtures, lighting. Each kind declares which scope owns it, its unit, and the class that decides how it scales across buildings and units.
- A cost line pointing at a measurement moves with the model — unless you typed the number yourself, in which case your number wins
- Every quantity answers one question: is this an assumption or a takeoff? There are deliberately no tiers — a ratio you tuned is still an assumption
- Pure arithmetic over typed geometry is never marked as an assumption. Marking a real measurement as a guess is the worst failure mode here.
- A mixed total is an assumption if any contributing part is on a default — the opposite policy would launder a mostly-assumed total as measured
- Undo remembers what you did, not what the software worked out
- A new quantity kind cannot ship without an explicit provenance decision — the test refuses it
Provenance
- Provenance classes
- 4
- The question asked
- one boolean
- Typed override
- is the measurement
- Mixed aggregate
- assumed if any part is
03 — Cost library
A price is kept with the city, the date, the source and how much you trust it.
Every cost line that graduates out of an estimate or a vendor bid becomes a library observation — a price with the facts that make it comparable later. You start with seeded takeoffs, assemblies, a reference cost database and published rates, and every one of them is built to be replaced by yours.
- Two dates, not one: the date the price was good for, and the date it entered the system
- Six source types, from manual through vendor quote to historical actual, plus a label and notes
- A luxury door never averages with a builder door; a supply-only price never averages with an installed one
- The context is snapshotted at capture — GSF, NSF, units, building count — so the number stays readable years later
- Observations link back to the bid line and invitation they came from, and to the estimate they were first seen in
- AI enrichment fills blanks only and can never overwrite a human edit; the row stays unreviewed until an estimator accepts it
What a price carries
- Source types
- 6
- Grade tiers
- 4
- Cost compositions
- 3
- UniFormat II groups
- 15
- CSI levels
- 3
- CSI code rows shipped
- 8,996
04 — Market benchmark
Where one line sits among its real peers.
For a single observation, the median of its like-for-like peer group, and how far above or below the line sits. The segmentation is the whole point: grouping by CSI code would blend unrelated scopes that happen to share a division, so three different electrical lines aren't treated as a market.
- Peers are matched on the canonical item, not the code — plus grade tier, cost composition, asset kind and construction type
- Same unit only. It never forces $/GSF and never averages across units
- An unclassified line gets no number — it refuses rather than guessing
- Only shared rows feed the market; a draft can read it without contributing to it
Segmentation the code won't blend
- Canonical item
- not the CSI code
- Grade tier
- enforced
- Composition
- enforced
- Unit
- must match
- Asset kind · type
- never MF with SFH
05 — Bids, pursuits & trades
The work either side of the estimate.
own verb
templates configurable
fail-closed permissions
unique per bid line
re-measured
own feature set
own key space
versioned
signed links