Primary workflow
A serious estimating workstation. Decimal-exact, revision-frozen, and honest about margin versus markup.
- Edit a fully built synthetic estimate for a fictional warehouse modernization, entirely in the browser.
- Direct costs (material, labor, equipment, subcontractor) through indirect percent, contingency percent, tax in three modes, and fee as markup or margin.
- Immutable revision snapshots with line and total comparison, plus undo and redo.
- Bid leveling: landed cost and scope gaps across quotes.
- Scenario and sensitivity analysis on the same estimate.
- 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
- Open the Northstar Industrial synthetic estimate in the demo.
- Change a line, a policy percent, and the fee mode, and watch the chain recompute with decimal-exact totals.
- Save a revision, change the estimate again, and compare revisions line by line.
- 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.