Takeoff — the full flow, sketched

16 screens · lo-fi on purpose · logic already built & tested — you are approving LAYOUT + FLOW, not colors

How to review: scroll the flow top-to-bottom (it is the estimator's real journey). Comment by screen id — e.g. "S6: move the evidence above the actions", "S9 approved". Orange boxes = my open questions to you. Approved sketches go to the designer as the binding brief.
S1

Projects home

entry
TAKEOFF+ New takeoff
ProjectStageStatusDecisionsLast touched
Maple Street 12DecidingDecisions needed4 open2h ago
Harbor Tower BReportExportedTue
Site ShedIntakeIn progressJun 20

What it does

  • Every project, last-touched first; erased projects never appear
  • Status words come from the engine — the UI never invents them
  • Click a row → resume exactly where you left (state lives in the Record, no session cookies)
Your call One flat list, or grouped by status (Needs-me first)?
▼ new takeoff
S2

Upload drawings

intake
TAKEOFFMaple Street 12 · Upload
dropzoneDrag the drawing set here — PDF / DWG vector sets
or browse files
uploadingA-101.pdf ▓▓▓▓▓▓░░░░ 60% · A-102.pdf landed · schedule.pdf landed
if connection breaks (resumable)3 of 5 landed — only missing files resume; nothing re-uploads
Start reading the set

What it does

  • Files land content-addressed + encrypted; identical bytes never stored twice
  • Broken upload resumes only what's missing (S15 shows the return state)
Your call Upload and set-reading start automatically per file, or wait for one explicit "Start"?
▼ set is read
S3

Intake results — what's usable

intake
TAKEOFFMaple Street 12 · Intake
readable14 sheets ready
rejected2 files
duplicates1 (not re-added)
rejected — stated reason per filesite-photo.jpg — photo of a drawing, measurements can't be trusted → Request a rescan
old-rev.pdf — password-protected → Replace file
hard block (only if 0 of N readable)None of the 5 files can be read. Start is disabled until one readable sheet lands. Remedies listed inline.
Continue to set map

What it does

  • Every rejection carries its plain reason — no silent drops, ever
  • Scan/photo → explicit rescan request; duplicate bytes → "already have it" notice
  • 0-of-N readable = full-page block with remedies (no dead end)
S4

Set map — what the system understood

understanding
TAKEOFFMaple Street 12 · Set map
sheets14 mapped: plans 6 · sections 3 · details 3 · schedules 2
scale1:50 verified ✓
A-104: unverified
gaps the system flagsLevel 2 slab edge: no dimension chain → will ask you · North stair: section missing
scope decision (yours)Set looks partial (no MEP sheets). Proceed with structure only? Proceed partial Wait for full set

What it does

  • Inventory of every sheet + kind; scale checked, never assumed
  • Gaps/notes/dimension conflicts become flags now, not surprises later
  • Partial-set is YOUR recorded decision
Your call Is the set map a separate approval stop, or fold into S5's plan approval (one stop instead of two)?
S5

Measure plan — approve before spend

measure
TAKEOFFMaple Street 12 · Plan
proposed sends (editable)
UnitSheetsWhy
Walls L1–L3A-101..103plan regime
Slab edgesA-104needs scale check
DetailsD-01..03build-up capture
budget0 / 40 sends
kill switcharmed
Approve & run Edit plan

What it does

  • Nothing is sent to the measuring engine without your approved plan
  • Hard budget + kill switch; every send pre-covered by a written expectation
▼ run starts
S6

Run progress — live, never a frozen spinner

measure
TAKEOFFMaple Street 12 · Running
stagesread ✓ · measure ▓▓▓▓░░ 23/40 sends · cross-check queued · grade queued
live feedWalls L2: 214 segments measured · Slab edge: waiting on scale confirm
budget23 / 40
actionStop run

What it does

  • Per-stage progress streamed live; budget visibly counting
  • Stop = recorded halt; resume continues from the last recorded step, nothing re-done, nothing double-counted
▼ decisions surface
S7

Decision walk — one card at a time

decide · the heart
TAKEOFFMaple Street 12 · Decisions · 3 of 7
the questionWall W2, Level 2 — two sources disagree
Plan A-102: 34.2 m · Schedule S-01: 36.0 m △ Conflict
evidence — click opens the drawing crop[A-102 crop] [S-01 row] · both values shown verbatim, never averaged
proposed fix (from the Issue Bank — proven 6×)Schedule governs lengths; plan governs count. Use 36.0 m.
Accept fixRule myself…ExcludeDefer
every ruling reversible · auto-saved to the Record

What it does

  • One conflict, its evidence, one recommended fix, four verbs — nothing else on screen
  • Both values always shown; the system never averages, never silently picks
  • Your ruling banks to the Issue Bank — same conflict next project arrives pre-answered
Your call Drawing crop inline on the card (bigger card) or in a slide-over on click (cleaner card)?
▼ many at once?
S8

Queue at scale — triage & batch

decide
TAKEOFFMaple Street 12 · Decisions · 41 open
triage◉ Missing 6 · △ Conflict 12 · ◇ Can't-check 9 · ○ Check 14
batch — same fix applies to 12 conflicts"Schedule governs lengths" fits 12 cards → Review & apply to all 12
ItemKind
W2 L2 lengthin batch
W4 L1 lengthin batch
Col C3 countwalk

What it does

  • Grouped by issue kind (icon+shape+label, never color alone)
  • Batch = one reviewed ruling applied to N cards, each still individually reversible
  • Position preserved — leave and return mid-queue exactly
S9

Build-ups — confirm layers once per type

break-down
TAKEOFFMaple Street 12 · Build-ups
wall type W2 — read from detail D-02 + spec
LayerThickSource
Blockwork190 mmD-02
Insulation50 mmspec 4.2
Render20 mmD-02
sums to 260 mm ✓ matches schedule
Confirm W2 (applies to 87 occurrences)Edit layers
confirmed types: W1 ✓ · W2 ← · F1 ✓ · R1 ○

What it does

  • One confirmation per TYPE → every occurrence expands element × layers → per-material quantities
  • Thickness sums checked against schedules automatically
S10

Report — every number traces to the drawing

deliver
TAKEOFFMaple Street 12 · Report
grades● Confirmed 61% · ○ Check 24% · △ 8% · ◇ 5% · ◉ 2%
viewGross | Net (rules labeled)
ItemQtyUnitGradeWhy
Blockwork 190412.6● Confirmed2 sources agree
Insulation 50398.1○ Check1 source
Rebar Y12t◉ Missingno schedule row → open decision
trace drawer (opens on any number)412.6 m² = 87 walls × layers · sources: A-102 crop, S-01 row 4, your ruling Jun 14 — each opens the evidence

What it does

  • Grade chips on every line — icon+shape+word; Missing rows show prose, never a fake 0
  • Click any number → full lineage to drawing crops + your rulings
  • Gross / net-after-deductions with every deduction rule named
S11

Close gate — honest before lock

deliver
TAKEOFFMaple Street 12 · Close
the gate4 decisions still open · 2 sheets unmeasured (excluded by you) · 1 scale unverified
closing now records these as known-open — nothing hides
Close takeoffBack to decisions

What it does

  • Cannot close "clean" with hidden opens — the gate lists them and the closure records them
S12

Lock & versions

deliver
TAKEOFFMaple Street 12 · Versions
v1Locked Jun 25 · exported 2×
v2 (amend)Amending — editing never touches v1
Amend → v3Compare v1 ↔ v2

What it does

  • Lock freezes a version forever; amend forks a new one — locked versions stay exportable
S13

Export — with the provenance appendix

deliver
TAKEOFFMaple Street 12 · v1 · Export
CSVXLSXPDF
every export carriesquantities + grade per row + excluded section + decision log + snapshot stamp "as of Jun 25, v1"
auditJun 25 CSV — you · Jun 26 PDF — you · downloads are the stored bytes, byte-identical forever

What it does

  • The file defends itself: grades, exclusions, decisions, stamp ride along
  • Re-download years later = identical bytes (stored, never regenerated)
▼ a Rev-B lands mid-work…
S14

Revision reconcile — Rev B never mixes in silently

interrupt
TAKEOFFMaple Street 12 · Decisions (banner over everything)
interrupt — even at 80% doneNew revision detected: A-102 Rev B · changed 1 · added 0 · removed 0
Nothing in your takeoff has changed yet. Start reconcile
after reconcile — only touched rows re-openWall W2 length Stale — source changed → re-enters your queue with what-changed shown · your other 39 rulings carry forward untouched

What it does

  • Hash-identity detects the revision; banner interrupts everywhere, mid-queue included
  • Only rows whose evidence traces to touched sheets flip Stale; a stale row never silently updates — you re-rule or re-measure
▼ when things break…
S15

Problem screen — what failed, what's safe, one way forward

unhappy
TAKEOFFMaple Street 12
what happenedThe measuring run stopped after repeated engine failures. (plain words — never an error code)
what is safeAll uploads ✓ · your 39 decisions ✓ · completed measurements ✓ — everything is in the Record
Open the takeoff with what we have
exactly ONE action — no retry buttons that lie, no dead ends

What it does

  • Terminal failures: plain cause, explicit "what is preserved", exactly one forward action
  • Same law for every unhappy state (S3's rejections, broken uploads, dead runs)
▼ (operators only, never linked)
S16

/diagnostics — operator room

internal
TAKEOFF · opsaccess-gated · 401 to everyone else
runs2 live · 1 halted
budget23/40 · kill: armed
dead lettersrun-7 unit-3 transport-exhausted "fetch failed …[redacted]" → Resume run Acknowledge
alertsrun-7 stalled 14:02 → linked here

What it does

  • Never linked from any user screen; secrets/keys structurally never render
  • Stalled-run alert lands here; resume records the operator as actor

Not sketched (rides Epic 7, same skin later): live engine settings, billing/spend. — Reply per screen id: approve / change: … When all 16 carry a verdict, the approved set becomes the designer's binding brief.