All six systems

Estimating, takeoffs & costing

EstimateOS

An estimator prices a job from direct costs through indirect, contingency, tax, and fee. Markup and margin are different maths, and a proposal must freeze at the version that was priced. Warnings that do not block are not a gate.

Product thesis: An estimator's pricing decision, with margin versus markup kept honest and a bid-ready gate that actually blocks.

Cabberefwenf/Estimate_OS · feat/phoenix-milestone-a @ 0c1eb464 (2026-10-26). No main branch exists.

Interactive demo in development
Conceptual interface illustration, not a screenshot of a live application.

Primary workflow

A serious estimating workstation. Decimal-exact, revision-frozen, and honest about margin versus markup.

  1. Edit a fully built synthetic estimate for a fictional warehouse modernization, entirely in the browser.
  2. Direct costs (material, labor, equipment, subcontractor) through indirect percent, contingency percent, tax in three modes, and fee as markup or margin.
  3. Immutable revision snapshots with line and total comparison, plus undo and redo.
  4. Bid leveling: landed cost and scope gaps across quotes.
  5. Scenario and sensitivity analysis on the same estimate.
  6. Exports: CSV with formula-injection escaping, JSON, and a frozen-revision proposal PDF.

Architecture

  • pnpm monorepo: apps/web (Next.js 15, React 19, pdf-lib, Zod) and packages/estimating-engine (decimal.js, Zod) and packages/sample-data.
  • Decimal-exact money chain. Line components round half-up to cents; policy amounts round once.
  • Waste percent applies to material quantity only. Tax modes: exempt, materials cost before fee, selling price after fee, not marked up.
  • localStorage demo state (estimate-os:demo:v1), Zod-validated, seed fallback on invalid data.
  • An /embed route exists with a build-time portfolio-origin iframe contract (see integration contracts).

Engineering decisions

  • Markup is cost times one plus percent. Margin is cost divided by one minus percent. The two are kept distinct in code and in copy.
  • Revisions are immutable snapshots. A proposal PDF is generated from a frozen revision, not from live editable state.
  • Synthetic data is labelled on the home page: prices and production rates are illustrative and are not market quotes.

Technical challenges

  • Lineage is undecided: the only branch is feat/phoenix-milestone-a with a single commit. There is no main to deploy from, and the local estimateos lineage shares zero commits with it.
  • Drawing measurement is unbuilt in this lineage. Takeoff, assemblies UI, Monte Carlo, and persistence/auth are planned milestones, not shipped work. Case-study copy must not claim them.
  • Proposal validation is warnings-only in the plan docs. No blocking gate was evidenced in recon.

Demonstration scenario

  1. Open the Northstar Industrial synthetic estimate in the demo.
  2. Change a line, a policy percent, and the fee mode, and watch the chain recompute with decimal-exact totals.
  3. Save a revision, change the estimate again, and compare revisions line by line.
  4. Level the bids, run a scenario, and export the frozen proposal PDF.

Engineering evidence

  • Engine test file contains 25 test cases counted from file text, including the Northstar golden selling price 12,842.37. None were run in VW-100 recon. [OBSERVED file count; UNVERIFIED pass result]
  • Golden figures are present in the test file and in the estimating methodology doc. [OBSERVED]
  • The web package test script passes with no tests, which is a gap, not a result. [OBSERVED, package.json]

OBSERVED means read from repository evidence at the stated commit. DOC-CLAIMED means a repository document states it but it was not re-run during reconnaissance. UNVERIFIED means no supporting evidence was obtained. See the engineering inventory.

Known limitations

  • No verified public demo URL. No deployment doc or URL in the tree.
  • No main branch. Every Worth reference must pin the branch and commit until the founder decides the lineage.
  • No CI workflow exists. No test-results record exists in the repo.
  • Takeoff, Monte Carlo, assemblies, persistence, and auth are unbuilt.
  • The iframe embed path requires PORTFOLIO_ORIGIN to be set to the exact Worth origin before building EstimateOS. It is currently empty in the example env file, so the embed would refuse to frame. Link-out to /demo works regardless.

Sandbox readiness

Per-browser localStorage demo state with undo and redo (50 deep) and a reset that removes the key and restores the seed. No expiry. 60-minute exploration depth is UNVERIFIED.

Current portfolio status: Demo unavailable in this harness: no deployment verified, demoUrl null, allowlist empty. Lineage undecided.