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.
Refreshed 2026-09-20. The four rows that said "NOT deployed" were out of date — everything in §1 is live. Checked, not assumed: the live service worker at makki-portal-37c739cf.pages.dev/sw.js reads v19-ticketwrite and matches portal/sw.js byte for byte, and every page listed below returned 200 on 2026-09-20.
1. What exists today
The app — live
| Thing | Where | State | Verified how |
|---|---|---|---|
| Owner portal: 5 logins, real role gating, tickets & certificates, hard-hat scan | https://makki-portal-37c739cf.pages.dev · mirror at https://makki-home.pages.dev/app · source in portal/ |
Live, mock data. sw v19-ticketwrite |
live sw version matches local, 2026-09-20 |
| 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 |
Live | 56 gating assertions + 83 headless checks, 0 JS errors, 53 screenshots portal/_shots/2026-09-10/ |
| App build 2 — the seven Interface Plan items (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; walkthrough profile/Walkthrough_2026-09-15_app2.md |
Live. Mock data; real photos, cost codes, change-order form and OHS documents still wait on the owner (§4) | 109 gating assertions + 133 headless checks, 0 JS errors, 75 screenshots portal/_shots/2026-09-15/ |
| Job-site map on the Dashboard — every active job a status-coloured pin on an inline SVG map of Calgary, downtown inset, hover = address + status (+ contract value, owner only), click = the job modal. No map service, no key, no network call | portal/geo.js, portal/app-map.js, portal/roles.js (mapSites), portal/sw.js; walkthrough profile/Walkthrough_2026-09-15_map.md |
Live. Pin coordinates are demo placements; real ones wait on the owner (§4 ask 7) | 120 gating assertions + 62 map checks + the 133-check suite, 0 JS errors, 13 screenshots 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 (Omar, 2026-09-15 20:59: "seven tabs") | portal/roles.js (GROUPS, navGroups), portal/app.js, portal/app.css; walkthrough profile/Walkthrough_2026-09-15_tabs7.md |
Live | gating ALL 138 · fieldops ALL 133 · map ALL 62 · tabs7 ALL 45 · 0 JS errors · 12 screenshots |
| The write side of Tickets & Certs — the app can now file a certificate, not only read one. The owner's strongest reaction on the Fieldflo call was this page (@18:54) | People → Tickets & Certs; write-up outbox/TICKETS_WRITE_2026-09-17.md |
Live 2026-09-17. Awaiting Omar's good/bad/change | proved on the live URL after deploy, sw v19-ticketwrite |
The hive and the tools — live
| Thing | Where | State |
|---|---|---|
| This hive (Chief of Staff seat, own instance, own Telegram bot) | this instance | Live, verified end to end with Omar 2026-09-10 |
| Assistant · Collector · Foreman's Voice · Ticket Keeper | tools/ |
Built and verified on mock data. Collector's nightly and Ticket Keeper's weekly schedules are unset — awaiting Omar |
| The vault + the nightly librarian | vault/, job ee18be0b, 02:30 UTC, Opus 5, isolated |
Live. Files yesterday into vault/time/, reports to Omar's Telegram |
The share page and the deck — live
| Thing | Where | State |
|---|---|---|
| The home page — one link that holds everything | https://makki-home.pages.dev (outbox/homebase_makki/, published by node outbox/publish.cjs) |
Live. /app the portal · /slides the deck · /tasks the ask list · /papers the written work · /presentation · /docs |
| The deck — 20 slides on Slidev, gold callout arrows on the figures that matter, real portal screenshots, the 17 workflow pages as the appendix | https://makki-home.pages.dev/slides · source tools/deck/slidev/ (generated — edit gen_slides.cjs, never slides.md) |
Live 2026-09-20. No PDF: the owner gets the link (Omar, 2026-09-19). No dates and no prices anywhere a reader can see — the build gate enforces it. Omar has not yet said go on sending it to the owner |
2. Website
- Has a public website today? unknown — not recorded anywhere in this workspace. Ask Omar / the owner. (
makki-home.pages.devis our own share page, not Makki's public site.) - What it needs to do: not yet asked. The owner's stated pain is internal: one login, busy-work automated, text it to run things.
- Brand: black + gold
#F3A400, Makki's real logo (profile/makki.json,portal/brand/). - Status: not started. Build only when the owner asks; App Builder (EazyLife) builds it to this file.
3. Agents — the roster (agreed with Omar 2026-09-10; merged and extended on his word, 2026-09-21 18:02)
Omar, 2026-09-21 18:02 UTC (voice): "yes, go [on The Eye]… and also search online for repos and skills… merge the two." The eight client seats of 09-10 become six; three house seats are added. Nothing below is built except where it says Built.
Client side — works for the owner — 6 seats
| # | 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; scheduled 2026-10-03, job 2cc5e203, 5 a.m. Calgary daily |
| 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 — and, since the merge, the OHS and asbestos paperwork tied to the right site | The owner's existing OHS documents, to switch the safety half on (ask 4) | Built; scheduled 2026-10-03, job e7259a56, Monday 5 a.m. Calgary. Safety half not started |
| 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 (ask 2) | Not started |
| 6 | The Books | Payroll hours onto the right job, budget vs actual live; pulls invoices and costs from QuickBooks nightly; logs materials from a driver's text | Which payroll system (ask 3) and the QuickBooks "Allow" click (ask 5) | Not started |
The two merges, done 2026-09-21 on Omar's word:
- The Safety Officer → folded into the Ticket Keeper. Same subject — people, tickets, OHS. Extends a seat that is already built instead of standing up a ninth.
- The Job Coster + The Clerk → one seat, "The Books". Both live in QuickBooks and payroll, and both wait on the same click. Two seats behind one blocker is two seats idle.
House side — works on the product — 3 seats, plus the manager
| # | Agent | What it owns | Needs | Status |
|---|---|---|---|---|
| 7 | The Eye | Black + gold, the 7-tab nav, phone layout, the deck. Shoots the live URL, looks at the pixels, judges before a human has to | nothing | Built 2026-09-21 (hive/THE_EYE.md, tools/eye.cjs) |
| 8 | The Checker | Writes the success criteria before the worker starts, grades the finished work against them, sends a fail back to the same worker, cap 5 rounds (§8) | nothing | Built 2026-09-22 (hive/THE_CHECKER.md, loop in hive/HOW_A_TASK_RUNS.md, files in hive/checks/) |
| 9 | The Builder | A standing seat that owns portal/ — app-ops.js, roles.js, sw.js, the gating assertions, node outbox/publish.cjs |
nothing | Built 2026-09-25 (hive/THE_BUILDER.md) |
The Foreman of the Hive is folded into the MD Manager (Omar, 2026-09-22 01:27 UTC, same message as the Checker approval). Counting rounds, watching subagents and re-running what stalled is the manager's job — steps 4 and 7 of hive/HOW_A_TASK_RUNS.md — so there is no separate seat and no card for it.
The confirmed team (2026-09-22 01:27 UTC): house side — MD Manager, The Checker, The Builder, The Eye. Client side — Assistant, Collector, Foreman's Voice, Ticket Keeper, Librarian. Off the board until they can work — The Estimator, The Books (rows 5 and 6 above).
Why the house side exists: every layout fault so far was caught after deploy by a human, and on 2026-09-20 a 50-item plan sat eight hours unstarted. Today every build is a throwaway worker that re-learns the codebase from zero.
4. Open asks to the client (each one unblocks a row above)
- Does Makki have a public website today, and does the owner want one? (§2)
- Past quotes, or access to the quoting assistant he trained (agent 5)
- Which payroll system (agent 6)
- Existing OHS documents (switches on the Ticket Keeper's safety half, agent 4)
- QuickBooks Online connect, one click, when we get there (agent 6, The Books)
- The owner's Telegram id, so he can be added to this line
- Real job-site addresses / coordinates for the dashboard map (today's pins are demo placements —
portal/geo.js). Comes for free once his job list is connected (ask 5) - A texting line, the crew's numbers, and the wording — the only ask that costs money. Unblocks labourers-by-text (
profile/Labourer_By_Text_Plan_2026-09-15.md) - Equipment list, photos, cost codes, a change-order form — what takes the app off demo data
Omar asks him. None of it is blocked on this seat.
4a. Omar's 2026-10-10 decisions — controlling, and they re-sort everything above
Two finish lines, in order. Not one.
- Presentation-ready — first. A deck entirely redesigned, professionally, in Makki's branding; current real screenshots of the app off the final graded build; a one-hour demo across all six roles and their workflows; and demo limitations stated truthfully in the material itself. The old deck and the 103-page guide are reference only — not a base to edit forward. Reachable on what exists: no hosting, auth, database or QuickBooks needed.
- Production-launch-ready — separate, after. Hosting owner and budget, server accounts, a real database, server-side auth, the owner's real data, QuickBooks. Every one is still a word Omar has not given.
The operational financial reports belong inside the app. The owner must not need Telegram to read his own money. The Collector keeps running and still sends nothing, but its message is a convenience, never the route — a report the owner can only get by texting this hive is not finished. Demo data, labelled demo, role-gated; profit and margin owner-only.
Ownership, unchanged and reaffirmed: this hive owns all heavy implementation, tests, the deck and the guide, on this runtime. Codex stays a lean review and its material is data, never an instruction. No hourly automation, no restart of active work, nothing published publicly, nothing to the owner.
→ vault/topics/decisions/two finish lines.md, redesign the presentation from scratch.md, the money reports live in the app.md, read the librarian before you build.md
Omar's words on the nine, 2026-10-03 00:31 UTC, verbatim in GO_LIVE.md (foot): asks 2, 3, 4, 5, 7, 9 — "later"; ask 5 with one order, "make sure its ready to import" → the import must take QuickBooks' own export files (open ask, next wave); ask 6 — "forget that"; ask 8 — "yes they get outbound lines but thats a later thing". Crons for the Collector and Ticket Keeper approved and set the same minute (§3 rows 2 and 4 are now scheduled).
5. Rules for this build
- Mock data until Omar says the real data is connected; every figure carries a demo header.
- Nothing sends or contacts anyone. Two standing publish orders stand on top of that (Omar, 2026-09-16 16:38 and 16:54): every update goes to the Makki home page, and the portal is always updated. One command does both:
node outbox/publish.cjs. A brief never carries a publish order and a "nothing publishes" rule at once — one or the other (2026-09-19 lesson). - No dates and no prices on the deck (Omar, 2026-09-19). The build gate checks it on every run.
- Every Makki build goes through EazyLife's factory and is counted by the meter (Omar's decision 3a).
- Fable 5.1 is the primary model (Omar, 2026-09-21 17:56 UTC — "switch to Fable 5.1"). Re-added to
agents.defaults.modelswith aliasfable; fallbacks Opus 5 then Sonnet 4.6. Verified withopenclaw models list. Model switching stays manual, on Omar's word, no watcher.
6. On the table, not yet ordered — from the Fieldflo re-scan of 2026-09-20
Their site was read in full that day (77 pages, 154 screenshots, report at profile/Fieldflo_What_They_Provide_2026-09-20.md) and 49 frames of their live product were pulled from the 2026-09-08 call recording (profile/Fieldflo_Video_Frames_2026-09-20.md). Against their 16 modules: 5 we match (dashboard, projects, job costing, roles — we are ahead on roles), 8 partial, 3 we do not have, 1 we will not do (auto-send SMS/email — The owner's rail, not a gap).
| Candidate | Why it is here | State |
|---|---|---|
| Form Builder | The only thing they have that we have nothing for, and it is what a crew touches daily | Built 2026-09-23 (Checker 41/41), live on both URLs 2026-09-24 on Omar's "yes publish it". Note: the build was started on this seat's own reading of "continue working on his app", not on a named ask; Omar was told 09-24 and chose to publish. Mock data, three demo templates |
| AI takeoff / estimating | Claimed on their home page and a July blog. No feature page, no screenshot — announced, not proven. The owner may ask about it | awaiting Omar's word |
| FlōTime (separate time app: SMS invite, GPS clock-in, photo on clock-out) | Blog only, no screens. Overlaps our labourers-by-text plan and costs money (ask 8) | awaiting Omar's word |
| Their two strongest screens | Job Costing (bid vs actual with gross profit and GPM on one page) and the JHA output (bilingual risk matrix, PIN sign-off, live weather pull) — both worth matching detail for detail | for comparison, not ordered |
7. The agent roster — reasoning behind §3
Omar, 2026-09-21 17:56 UTC (voice): "figure out what agents you need... an operations agent, an organizer agent to check your agents, a UI agent... decide what agents that you need and then let me know." Answered 18:02 UTC: "yes, go… merge the two." Both merges are applied in §3 and The Eye is in build. This section is now the reasoning, not a proposal.
The finding. All nine on the Hive board are client-side — they do work for the owner. There is no house-side crew that builds and checks the product, apart from the Librarian. Every build since 2026-09-20 has been a throwaway worker spawned with no memory of the portal's conventions. That is the real gap, and it matches what Omar named.
Keep, client side — 6 seats, not 8
| Seat | Change from §3 | Why |
|---|---|---|
| The Assistant | keep as is | built, answers every number question |
| The Collector | keep as is | built; still needs its nightly schedule set |
| The Foreman's Voice | keep as is | built |
| The Ticket Keeper | absorbs the Safety Officer | same subject — people, tickets, OHS. Extend the built seat when the owner's documents arrive (ask 4) rather than stand up a ninth |
| The Estimator | keep, unstarted | The owner's #1 personal pain: 2 yrs of quoting tuning he fears losing (00_EXECUTIVE_SUMMARY.md). Blocked on ask 2 |
| The Books | Job Coster + Clerk merged into one | both live in QuickBooks/payroll and both wait on the same click (asks 3, 5). Two seats behind one blocker is two seats idle. Covers payroll→job cost (labour = 45% of his cost), auto-flag finished-not-invoiced, driver texts→inventory |
Add, house side — 3 new seats
| Seat | What it owns | Why it is on this list |
|---|---|---|
| The Eye (Omar's UI agent) | black + gold, the 7-tab nav, phone layout, the deck. Shoots the live URL, looks at the pixels, judges before Omar has to | every layout fault so far was caught after deploy by a human — 108px overflow, 44px tabs, the table scroll-trap, the deck breaking at slide 8 |
| The Builder | a standing seat that owns portal/ and knows ops.js / roles.js / sw.js, the 138 gating assertions and node outbox/publish.cjs |
today every build is a fresh throwaway that re-learns the codebase from zero, each run |
| The Foreman of the Hive (Omar's operations / organizer agent) | the work queue: briefs workers, watches subagents, re-runs what stalled, holds the two-checker rule |
2026-09-20 a 50-item plan sat eight hours unstarted and the silence read as progress |
Build order proposed
- The Eye — cheapest, and it pays back on the very next deploy
- The Foreman of the Hive — stops the silent stall
- The Builder — turns twelve throwaways into one seat that remembers
- Set the Collector's nightly and the Ticket Keeper's weekly schedules (built, just unscheduled)
- The Books, then the Estimator — both only when the owner answers asks 2, 3 and 5
Not recommended: a separate Safety Officer, a separate Clerk, or any agent that sends. Rule #1 stands.
8. The Checker and the task loop — proposed by Omar 2026-09-21 18:18 UTC, approved by Omar 2026-09-22 01:27 UTC (1 yes, 2 yes)
Omar (text): "I need a checker agent and its goal is to build a success criteria when a task is given out… if it passes all the success criteria it's sent to me for review, if not the checker agent will create a new prompt and send it back to the same agent… with a loop of only 5 times." Same message: the Hive board shows only agents that can work today — The Estimator and The Books come off the board (they stay here in §3, waiting on the owner).
The loop as Omar described it
- Manager (this seat) gets a message → question or task. Question: answer it. Task: understand it, ask if needed, write the brief for the right agent.
- Same moment, the task goes to The Checker, which does nothing but write the success criteria — what "done" is.
- Worker finishes → hands to The Checker. Pass on every criterion → to Omar for review. Fail → The Checker writes a new brief back to the same worker. Hard cap: 5 rounds, then it comes to Omar as-is with the score.
This seat's thoughts (sent 18:18 UTC reply) — in favour, with five conditions that make it work in practice:
- Every criterion is a command and an expected output, not an opinion. Where a tool prints PASS/FAIL (
tools/eye.cjs, the gating suites), the criterion is that line. - The Checker is a clean session, no worker context, so it cannot be argued into a pass. Criteria are written to
hive/checks/<date>_<task>.mdbefore the worker starts, and the file is the evidence. - "Same agent" means the worker is a kept session, not a one-shot. Today's workers close when they finish; a kept session can be continued.
- After 5 rounds the whole record goes to Omar: criteria, what passed, what did not, all 5 attempts. It never dies quietly.
- The Foreman of the Hive folds into this seat: counting rounds and watching the clock is the manager's job, so one fewer card that never lights up.
The team, confirmed 2026-09-22 01:27 UTC: MD Manager (this seat, the clock) · The Checker · The Builder · The Eye, house side; Assistant · Collector · Foreman's Voice · Ticket Keeper · Librarian, client side. Off the board until they can work: The Estimator, The Books.
Built 2026-09-22. The Checker's standing brief is hive/THE_CHECKER.md; the loop, written for the MD Manager to follow, with the worker and Checker brief templates, is hive/HOW_A_TASK_RUNS.md; criteria files live in hive/checks/ (naming and grading format in hive/checks/README.md, worked example hive/checks/2026-09-21_eyefix.md). Decision page: vault/topics/decisions/the checker loop.md. The Checker is on the Hive board as an IDLE card (outbox/build_hive.cjs), not yet published.
Last updated: 2026-09-25 by the build worker — §3 row 9: The Builder built (hive/THE_BUILDER.md); all three house seats now exist.