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
| Project | Stage | Status | Decisions | Last touched |
| Maple Street 12 | Deciding | Decisions needed | 4 open | 2h ago |
| Harbor Tower B | Report | Exported | — | Tue |
| Site Shed | Intake | In progress | — | Jun 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)
| Unit | Sheets | Why |
| ☑ | Walls L1–L3 | A-101..103 | plan regime |
| ☑ | Slab edges | A-104 | needs scale check |
| ☐ | Details | D-01..03 | build-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
| Item | Kind | |
| ☑ | W2 L2 length | △ | in batch |
| ☑ | W4 L1 length | △ | in batch |
| ☐ | Col C3 count | ◉ | walk |
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
| Layer | Thick | Source |
| Blockwork | 190 mm | D-02 |
| Insulation | 50 mm | spec 4.2 |
| Render | 20 mm | D-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)
| Item | Qty | Unit | Grade | Why |
| Blockwork 190 | 412.6 | m² | ● Confirmed | 2 sources agree |
| Insulation 50 | 398.1 | m² | ○ Check | 1 source |
| Rebar Y12 | — | t | ◉ Missing | no 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.