Makki DemolitionHome Build plan

BUILD_PLAN.md — Makki Demolition

Standard file in every client hive (Omar's decision 5a, 2026-09-10). This seat keeps it current; EazyLife's factory builds from it on Omar's say-so. Every line below comes from the deck, the portal build, the profile, or the Fieldflo call notes in profile/. Nothing invented.

1. What exists today

Thing Where State Verified how
Owner portal + deck (5 logins, role gating, tickets & certificates, hard-hat scan) https://makki-portal-37c739cf.pages.dev (login-gated); copy in portal/ Live, mock data. Price now on the deck's Plan slide, live push pending Cloudflare login Rendered locally 2026-09-10; live push blocked, on record
This hive (Chief of Staff seat, own instance, own Telegram bot) ~/.openclaw-makki/ Live, verified end to end with Omar 2026-09-10 Bot answered on Telegram 17:35 UTC
Assistant · Collector · Foreman's Voice · Ticket Keeper tools/ Built and verified on mock data 2026-09-10 Run by EazyLife's Chief of Staff, outputs checked
Portal rebuild to match what the owner liked in the Fieldflo demo (12 screens, 11 tasks) portal/ops.js, portal/app-ops.js, portal/roles.js; docs in profile/ Built and verified 2026-09-10 ~20:40 UTC — NOT deployed. Pages link still serves the old build 56 gating assertions + 83 headless checks, 0 JS errors, 53 screenshots in portal/_shots/2026-09-10/
App build 2 — the seven Interface Plan items left "not built" (job photos, cost codes, change orders + T&M, closeout report, board drag-and-drop with the ticket block, timeline / Gantt, JHA + safety-document library) portal/ops2.js, portal/app-ops2.js, portal/roles.js; walkthrough profile/Walkthrough_2026-09-15_app2.md; comparison updated Built and verified 2026-09-15 — NOT deployed. Omar's order on this line 06:11 UTC. Mock data; real photos, cost codes, change-order form and OHS documents still wait on the owner (§4). Open decision: estimator's new Bid vs Actual tab (spent vs his own bids, no profit) stays on or is switched off per person 109 gating assertions + 133 headless checks, 0 JS errors, 75 screenshots in portal/_shots/2026-09-15/
Job-site map on the Dashboard — every active job as a status-coloured pin on an inline SVG map of Calgary with a downtown inset; hover = address + status (+ contract value, owner only); click = the existing job modal; legend by status / area; the site list stays. No map service, no key, no network call. Positions generated from the existing addresses (portal/geo.js, demo placements) portal/geo.js, portal/app-map.js, portal/roles.js (mapSites), portal/app.js, portal/app.css, portal/sw.js (v16-map); walkthrough profile/Walkthrough_2026-09-15_map.md; comparison updated Built and verified 2026-09-15 ~20:45 UTC — NOT deployed. Omar's order on this line 20:15 UTC ("Yes i want the map"). Owner 76 pins / bookkeeper 76 (no $) / site lead 21 / crew 21 / estimator none (holds no jobs). Real coordinates wait on the owner's data (§4) 120 gating assertions (11 new) + 62 map browser checks + the existing 133-check suite, all passing, 0 JS errors; 13 map screenshots (map_*.png, phone_map_*.png) in portal/_shots/2026-09-15/
Owner nav regrouped: 15 tabs → 7 groups (Dashboard · Jobs · Schedule · Money · People · Safety · Gear), accordion on the rail, sub-tab row on the phone; same 15 pages, same per-person switches, other four logins untouched; the cost-code table moved from the Dashboard to the Project Book with a summary card left behind (Omar, Telegram 2026-09-15 20:59 UTC: "seven tabs") portal/roles.js (GROUPS, navGroups), portal/app.js, portal/app.css, portal/app-ops2.js; sw cache v17-tabs7; walkthrough profile/Walkthrough_2026-09-15_tabs7.md Built and verified 2026-09-15 — NOT deployed. Pages link still serves the 17:41 UTC build _qa/gating_assert.cjs ALL 138 (18 new) · _build/verify_fieldops.cjs ALL 133 · _build/verify_map.cjs ALL 62 · new _build/verify_tabs7.cjs ALL 45 · 0 JS errors · 12 screenshots portal/_shots/2026-09-15/tabs7_*.png

2. Website

3. Agents — build order (agreed with Omar 2026-09-10)

# Agent What it does for the owner Needs from the client Status
1 The Assistant Exact answers from the business data, texted in plain English nothing (mock) Built
2 The Collector Nightly: finished-not-invoiced, overdue by age, holdbacks; drafts invoices, never sends nothing (mock) Built; nightly schedule awaiting Omar's word on this line
3 The Foreman's Voice A foreman's voice note becomes a filed daily report nothing (mock) Built
4 The Ticket Keeper Expiring tickets, who is un-bookable, hard-hat codes nothing (mock) Built; weekly schedule awaiting Omar's word
5 The Estimator Quotes in the owner's voice with his pricing rules; won → live job The owner's past quotes / the assistant he trained Not started
6 The Job Coster Payroll hours onto the right job; budget vs actual live Which payroll system the owner uses Not started
7 The Safety Officer OHS programs tied to the right site The owner's existing OHS documents Not started
8 The Clerk Pulls invoices and costs from QuickBooks nightly; logs materials from a driver's text QuickBooks "Allow" click Not started

4. Open asks to the client (each one unblocks a row above)

  1. Does Makki have a public website today, and does the owner want one? (§2)
  2. Past quotes, or access to the quoting assistant he trained (row 5)
  3. Which payroll system (row 6)
  4. Existing OHS documents (row 7)
  5. QuickBooks Online connect, one click, when we get there (row 8)
  6. The owner's Telegram id, so he can be added to this line
  7. Real job-site addresses / coordinates for the dashboard map (today's pins are demo placements for the mock addresses — portal/geo.js). Comes for free once his job list is connected (row 8 / QuickBooks)

5. Rules for this build

Last updated: 2026-09-15 by the Makki Hive build seat (job-site map row in §1, ask 7 in §4)