Why the X's aren't there — every unbuilt and half-built thing, and what it would take
Written 2026-09-16 on Omar's order (voice, 03:11 UTC): "go through every one that isn't built and say why it isn't there, what's needed, who does it, what it costs, how long."
The list is not a new list. It was the 27 rows marked NOT BUILT and the 12 marked PARTLY in
profile/Screen_Inventory_2026-09-16.md — 39 rows out of the 100 things that have to be seen on the app.
Re-counted 2026-09-20 against the code in portal/ — TWICE. The first pass that day found one row closed (56,
by the ticket-write build of 2026-09-17) and left 38 open. Three more builds landed the same day —
portal/app-day.js (the field day and payroll), portal/app-job.js (job setup and closeout) and
portal/app-notify.js (notifications, the digest and the safety log) — so this page has been counted again against
those files. That first "38 open" figure is superseded.
Four more rows have closed: 16, 18, 35 and 80. So section 0 now holds 5 rows, and it is 24 not built + 10 partly = 34 rows still open, down from 38.
One row is half closed and stays open: 78. It was NOT BUILT; it is now PARTLY — "same as yesterday" is built and working, "pull from the schedule" is not really. Its own entry says exactly what is left.
Three rows in section 1 gained working parts but keep their blocker: 33, 57 and 68. Each carries a dated line saying what 2026-09-20 added and what is still missing. They are not closed and they have not moved.
Every other row on this page was checked against portal/app.js, app-ops.js, app-ops2.js, app-day.js,
app-job.js, app-notify.js, ops.js, ops2.js, ops-day.js, ops-job.js, ops-notify.js, roles.js and
tools/ on 2026-09-20 and is exactly as it was written on 2026-09-16. Matching was done on what each row
describes, against the code that now exists — not on row numbers, which do not line up with the V-numbers in
profile/Master_List_2026-09-16.md.
Row 19 — one head-office dashboard over several branches — is closed. Omar, 2026-09-15: Makki Demolition only, one company. It is not a gap, it is not counted below, and it is not raised again.
Where the reasons come from. Nothing here is guessed. Every "why" traces to one of:
profile/Solutions_Plan_2026-09-15.md · profile/Labourer_By_Text_Plan_2026-09-15.md · BUILD_PLAN.md §3 and §4 ·
profile/Fieldflo_Video_Workflows_2026-09-15.md (timestamps are the Fieldflo call of 2026-09-08) ·
profile/Fieldflo_Call_Transcript_2026-09-08.txt · profile/App_Capabilities_2026-09-15.md · portal/roles.js.
Where a source does not say it, the line reads unknown — needs the owner.
About the hours. Every "how long" is this seat's build estimate, on mock data, once the blocker is gone.
It is an estimate, not a quote, and it is not a promise of a date. All money below is over and above the price
already agreed ($3,000/month for the build, then $500/month upkeep) — build time is inside that price.
0. Closed since 2026-09-16 — 5 rows
56 — adding a new ticket, or renewing one, from the app. Closed by the ticket-write build of 2026-09-17:
a File a ticket / Renew panel on Owner › Tickets & Certs and Site lead › My Crew, with the old ticket flagged
and kept, never deleted. Proof: outbox/TICKETS_WRITE_2026-09-17.md, and the code itself —
certFormSpec / addCert / renewCert / certRows in portal/roles.js and the FILE A TICKET panel in
portal/app.js (dated 2026-09-17 in its own comment). Moved out of section 4.
Kept as written on 2026-09-16, as the record of why it was missing:
What it is. A form: pick the ticket type, valid from, expiry, the man, a photo of the card. Renew archives the old one. Why it isn't there. The archive half is built and correct — nothing is ever deleted. The add / renew form was simply never built. The owner liked this flow more than anything else in the demo: "I haven't seen anybody else incorporate that into their program" (@18:54). Needed. Nothing. Who. Us. Cost. Nothing. How long. 6–8 hours.
16 — a digest of what needs attention, in the app. Closed by the notifications build of 2026-09-20:
a Today's digest panel on the owner's and the site lead's dashboard, with all six sections the call named —
tickets running out (linking to Tickets & Certs, or My Crew for the lead), permits running out, paperwork not done,
warehouse orders pending with a late flag, low stock, and scheduling conflicts. On a day that has a night shift
on the board it shows two editions (05:30 night hand-over and 17:00 end of day); on a day that does not, one.
Code: digest(), digestPanel(), editions(), nightShifts() in portal/app-notify.js, seeded from
portal/ops-notify.js. Still true and still said on the screen: the times are labels — nothing is scheduled and
nothing is sent to anyone. The Collector and the Ticket Keeper on the text line are unchanged.
18 — count tiles and the last injury form. Closed by the same build:
a Last incident panel on the dashboard (lastIncidentPanel) giving the latest incident with days-since-injury,
days-since-any-incident and open actions, and three count tiles (countsPanel) — Employees with the crew split,
Clients with how many have work on right now, and Logins — each clicking through to Tickets & Certs, Jobs and
Team & Access. Both in portal/app-notify.js, scoped through R.visibleSafety and R.visiblePeople.
Named honestly: the count tiles are owner-only; the last-incident panel is owner and site lead.
35 — the emergency contact that lands on every daily by itself. Closed by the job-setup build of 2026-09-20,
and not the way this row predicted — it did not ride on row 61. It was built on the job, not on the man:
an Emergency tab on the job (site contact and phone, muster point, first aider, cross street, hospital and its
phone and address, a second call, notes), typed once, which then prints above the pre-job safety talk on the site
lead's Start Day and on the crew's Today, every day, with no re-typing. Code: emergencyPane() and the
PAGES.lead.startday / PAGES.crew.today wraps in portal/app-job.js, gated by R.emergencyFor.
Named honestly: it is a panel directly above the talk, not a line inside the talk's own checklist, and it renders
only once a job for today resolves. Row 61 — the emergency contact on the man's own record — is untouched and
stays open.
80 — a cost code against each man's hours. Closed by the field-day build of 2026-09-20: a cost-code select
on every man's line of the Start Day timesheet, the same seven codes the job budgets use, defaulted from his trade,
with a per-code hours roll-up above the table — and the code travels with the hours all the way to the dashboard and
the payroll page. Code: pickCode() / codeSelect() in portal/app-day.js, defaults CODE_BY_TRADE /
CODE_DEFAULT in portal/ops-day.js. The one thing this row asked for that has not changed: Makki's own code
names still have to come from the owner. Ours are demo codes; the mechanism is built, the vocabulary is invented.
Kept as written on 2026-09-16, as the record of why these four were missing — see sections 4 above for the original entries, which have been moved here rather than deleted:
16. The Collector runs nightly and the Ticket Keeper weekly and both work — they just land on this Telegram line, not on a screen. No in-app card was ever built. Needed: nothing. 4–6 hours.
18. Incidents are on the Safety page; nobody asked for them as dashboard tiles. Needed: nothing. 2–3 hours.
35. Nobody built it. It rides on row 61. Needed: nothing to build it; the real contacts arrive with the owner's crew list. 2–3 hours on top of 61.
80. Never built. Without it, labour lands on the job but not on the right code inside it. Needed: nothing to build. Unknown — needs Owner: Makki's own code names, so ours mirror his. 6–8 hours.
1. Needs something from the owner — 11 rows
Nothing can start on these until a file, a list or a login comes across from the owner. They are the heaviest group and they are also the cheapest: not one of them costs money.
21 — A quote drafted in the owner's own pricing
What it is. The Estimator helper writes the quote from the scope, in Makki's own prices, instead of the owner typing it.
Why it isn't there. It has nothing to learn from. A quoting helper that has never seen a Makki quote guesses at
Makki's prices, and a guessed price is the one thing this hive is not allowed to produce.
What is needed. A handful of the owner's past quotes — or access to the quoting assistant he trained himself over two years
(MEMORY.md, BUILD_PLAN.md §4 ask 2).
Who. the owner sends them. Cost. Nothing.
How long once unblocked. 2–3 days, then a round of the owner marking the drafts good or wrong.
26 — Permits on the job, with the permit document itself
What it is. The actual permit PDF held on the job, not just its name and expiry date. Why it isn't there. The permit dates and their warnings are built and working. The document shelf is built. There are no Makki permits to put on it. What is needed. A few real permits (a demolition permit, an abatement notification) so the holder is shaped like his. Who. the owner. Cost. Nothing. How long once unblocked. 3–4 hours to hold, version and print them.
33 — The per-load waste manifest inside the job's waste line
What it is. The hauling line on the Project Book shows hauler, landfill and material. What it does not do is
one record per truck that leaves.
Why it isn't there. Same blocker as row 68 — it has to look like Makki's manifest, not like a guess.
Note for accuracy: Fieldflo said "waste reporting" (@21:26) and never said "manifest". The manifest is the owner's own ask,
off the abatement side of his work.
What is needed. A copy of the waste manifest Makki uses today.
Who. the owner. Cost. Nothing.
How long once unblocked. Built together with 68 — see 68.
2026-09-20 — the record half is now built; the blocker is unchanged. The job-setup build added a Waste loads
tab: a by-material and a by-truck breakdown and one row per load that leaves — date, material, truck type and
capacity, hauler, landfill, tonnes, manifest reference, who logged it, and an owner-only tip fee — with an
add-a-load form (wastePane() in portal/app-job.js, vocabularies in portal/ops-job.js). So "one record per
truck" exists. What still does not exist is the manifest itself — the printed document in Makki's own shape —
and that still needs the owner's form. The row stays open and stays in this section. Note: loads added on the device do
not rewrite the older static hauler/load-count line on the job.
36 — An insurance claim walked room by room for the adjuster
What it is. A room-by-room record with photos before, during and after, scope per room, exported as the sheet
the adjuster reads (Solutions_Plan §4.4).
Why it isn't there. Every insurer wants its own sheet. Ours would be invented paperwork nobody accepts.
What is needed. Whatever the owner sends an adjuster today — one real example.
Who. the owner. Cost. Nothing.
How long once unblocked. 1–2 days. The photo log it sits on is already built (row 31).
47 — A payment matching itself against its job
What it is. A payment lands and the job goes paid without anyone ticking it.
Why it isn't there. Marking a payment by hand is built. Matching one on its own means reading the payments as
they land, and they land in QuickBooks. No QuickBooks connection, no matching (Solutions_Plan §3.4).
What is needed. Row 48 first.
Who. the owner (the QuickBooks sign-in). Cost. Nothing extra.
How long once unblocked. Half a day on top of 48.
48 — QuickBooks Online connected for real
What it is. The real connection instead of the preview screen at Owner › Money › QuickBooks.
Why it isn't there. It needs the owner signed in to his own QuickBooks, at his own screen, once. We never see his
password and cannot do this for him. It was his first unprompted request on the Fieldflo call — "Connect to
QuickBooks… Online" (@8:00, @8:09) — and it is still the one thing that makes every number downstream real.
What is needed. Fifteen minutes with the owner at his screen: he clicks Connect, signs in, and looks at the first
read-only pull to say whether the figures match his books (Solutions_Plan §3 steps 1–2).
Who. the owner clicks. Us to build. Cost. Nothing extra — it runs on his existing QuickBooks plan.
How long once unblocked. 2–3 days for the read-only pull; the push back (an approved invoice becoming a
QuickBooks invoice) only after the owner says the numbers match.
65 — The safety document library, with real documents in it
What it is. JHAs, safe work practices, toolbox talks and SDS sheets, and which job needs which.
Why it isn't there. It is there — the library, the per-job requirement and the shelf all work. What is in it is
11 placeholders. Makki's real OHS documents have never been handed over (BUILD_PLAN.md §4 ask 4).
What is needed. the owner's existing OHS documents.
Who. the owner. Cost. Nothing.
How long once unblocked. A day to load, index and tie them to job types. It also unblocks the Safety Officer
helper (BUILD_PLAN §3 row 7).
66 — One button that prints the file the regulator or an inspector asks for
What it is. One press on the job prints, in order and dated: every man's tickets and expiries for the days he was
on site, the signed toolbox talks, the containment log, the waste manifests, photos and incident notes
(Solutions_Plan §4.3).
Why it isn't there. We do not know what Alberta OHS actually asks Makki for. Fieldflo's version prints OSHA
reports (@5:31) — that is American, and Fieldflo is Denver-built. Copying it would produce a file that is the wrong
shape for the owner's regulator.
What is needed. the owner's OHS documents and one example of a file he has handed a regulator or an inspector before.
Who. the owner. Cost. Nothing.
How long once unblocked. 1–2 days — the pieces it prints are all built already.
67 — The containment log
What it is. Per abatement job: area, containment type, negative-air readings, smoke test, who was in the enclosure
and for how long, signed (Solutions_Plan §4.1).
Why it isn't there. It needs the owner's own form. This is the paperwork that costs money when it is wrong, and it is
the part of Makki's work no other software covers — inventing a layout for it would be worse than not having it.
The owner flagged it himself on the call: "Some stuff for abatements is a little more detailed and job specific" (@4:26).
What is needed. A copy of the containment log Makki fills out today.
Who. the owner. Cost. Nothing.
How long once unblocked. 2–3 days. Most of what it prints is already collected — names come from the crew list,
times come from the hours on Start Day.
68 — A waste manifest per load out
What it is. Per truck: generator, hauler, landfill, material, weight, ticket number, a photo of the scale ticket;
prints as the manifest and stays on the job forever (Solutions_Plan §4.2).
Why it isn't there. the owner's own form again. Same reason as 67.
What is needed. A copy of the manifest Makki uses.
Who. the owner. Cost. Nothing.
How long once unblocked. 1–2 days, and it closes row 33 at the same time.
2026-09-20 — some of the fields now exist; the blocker is unchanged. The Waste loads tab described under row 33
captures material, truck type, hauler, landfill, tonnes and a manifest reference per load. Of what this row
asks for, the generator, the weight ticket number as such, and a photo of the scale ticket are not captured, and
nothing prints as a manifest. Still the owner's form, still open, still in this section. Call it half a day to a day
once the form arrives, rather than 1–2 days.
96 — Employees, customers and jobs brought across from QuickBooks once
What it is. The first pull, so nobody types the business in twice. Why it isn't there. Nothing to pull from until row 48 is connected. What is needed. Row 48. Who. the owner. Cost. Nothing extra. How long once unblocked. Inside the 2–3 days of row 48.
2. Needs money spent — 6 rows
All six are the same purchase: one Canadian phone number. Nothing else on this whole list costs a
recurring dollar. Buying it is Omar's call, and it needs the owner's crew phone numbers to be worth anything
(Labourer_By_Text_Plan_2026-09-15.md, "What it needs before it can be built").
7 — A labourer who never logs in at all
What it is. A man on a demolition crew answers two texts a day and never opens an app, never installs anything, never has a password. The owner liked exactly this in the Fieldflo demo: "Your daily labors… they'll never actually log into your platform" (@2:37). Why it isn't there. We have no phone number to text from. Our version makes a labourer log into the Crew page, and men don't log in. What is needed. (1) A Canadian texting number — Twilio, or Makki's office line ported. (2) the owner's crew phone numbers; we hold names today, not numbers. (3) the owner's yes on the two message wordings. Who. Omar decides the purchase. The owner sends the numbers and approves the wordings. Us to build. Cost. About $10–20 a month all in for a crew of 20 (~$1.50/month for the number, about a cent a message). How long once unblocked. 2–3 days for the whole two-text loop, roster check, one re-ask and the foreman fallback.
17 — One message pushed to the whole crew
What it is. PPE week, the holiday party, site closed Monday — one message, everyone, at once (@5:31). Why it isn't there. No number to send from, and rail 1 stands: nothing leaves this building without Omar's explicit say-so, every time. What is needed. The same number as row 7, plus Omar's standing OK on what a broadcast may say. Who. Omar. Cost. Inside the same $10–20/month. How long once unblocked. Half a day once row 7 exists.
42 — Each man's own week sent to his own phone
What it is. Built today: Crew › My Schedule, and the board previews the per-man message. Not built: actually sending it. The preview is labelled not sent on the screen. Why it isn't there. No number, and nothing sends by rule. What is needed. Row 7's number. Who. Omar. Cost. Inside the same $10–20/month. How long once unblocked. Half a day.
82 — Every man signing off the safety talk on his own phone, before work
What it is. The 6:45 a.m. text: "1425 17 Ave SW. Toolbox talk: silica. Reply Y to sign off." Y puts his name
and the time on the job's safety record — that is the signature an inspector asks for.
Why it isn't there. Built in the Crew login; not built by text, because there is no number.
Worth remembering: the owner's own test texts failed live on the Fieldflo call — "the link is not valid" (@36:24).
That is why our plan has no link in it at all.
What is needed. Row 7's number and the crew phone list.
Who. Omar buys, the owner sends the numbers. Cost. Inside the same $10–20/month.
How long once unblocked. Inside row 7's 2–3 days.
86 — Each man confirming his hours at the end of the day
What it is. The 4:30 p.m. text: "Hours today: 8.5. Reply Y if right, or reply the number." Why it isn't there. Same as 82 — built in the Crew login, not by text, no number. What is needed. Row 7's number and the crew phone list. Who. Omar buys, the owner sends the numbers. Cost. Inside the same $10–20/month. How long once unblocked. Inside row 7's 2–3 days.
94 — The two labourer texts themselves
What it is. Rows 82 and 86 as one running thing: roster-only, one character back, one re-ask, then the foreman phones him. Why it isn't there. The number. What is needed. The number, the crew list, the owner's yes on the two wordings. Who. Omar, then the owner. Cost. $10–20/month. How long once unblocked. 2–3 days — this is row 7.
3. Needs a decision from Omar or the owner — 6 rows
Nobody is waiting on a file or a dollar here. Somebody has to say yes, no, or which way.
15 — Where each man clocked in from
What it is. GPS on the clock-in, so the office sees the man was at the site. Fieldflo does it: the labourer "gets a text within seconds asking for location. Optional" (@25:57). Why it isn't there. Nobody has decided whether Makki wants to track where its men are. That is an owner's call about his own crews, not a build decision, and the owner never asked for it on the call. What is needed. the owner says yes or no. Who. the owner. Cost. Nothing. How long if he says yes. 1–2 days, and only alongside a texting number or the Crew login. Recommendation. Leave it. He didn't ask, and it is the one feature on this list that can sour a crew.
38 — A CRM: contacts, job walks, reach-outs
What it is. Tracking who you called, which job walks you did, which proposals went out and came back (@5:31). Why it isn't there. Nobody has said we want it. Dan was mid-CRM-pitch when the owner cut across him to ask about QuickBooks (@8:00) — Fieldflo's own line was "By no means are we Salesforce." What is needed. A yes or no from the owner. Who. the owner. Cost. Nothing. How long if he says yes. 3–4 days. Recommendation. No, for now. The Pipeline page (row 20) already carries quotes by stage and win rate, which is the part an owner actually looks at.
51 — The accountant seeing hours and never rates
What it is. Built, gated and working — the bookkeeper's Payroll-hours tab shows hours with no rates and no pay. It is off by default. Why it isn't there. By choice. This was the owner's own unprompted question on the call (@8:14) and the switch is his to flip on Owner › People › Team & Access. Nobody turns on another person's access to payroll but the owner. What is needed. the owner flips one switch. Who. the owner. Cost. Nothing. How long. Ten seconds. Nothing to build.
52 — More than one approver signing off payroll, with a trail
What it is. Fieldflo's chain: "I want all of my PMs to approve their projects," with a trailing history, and the payroll administrator cannot run it until the named approvers have signed (@36:37). Why it isn't there. Single approver is built and records who approved and when. A chain needs a decision nobody has made: who besides the owner is allowed to approve payroll, and in what order. the owner told Dan he has "10 project managers" (@39:47) but never said which of them sign anything. What is needed. the owner names the approvers and the order. Who. the owner. Cost. Nothing. How long once decided. 1–2 days.
98 — A short orientation video for managers
What it is. A walkthrough the owner can send his managers so they can use the app without being taught one at a time. Why it isn't there. Nobody has decided when to record it. The owner asked Fieldflo for one — "Do you guys have like an orientation video for use of the program that we can kind of share with like managers?" (@32:09) — and Fieldflo had none to show him. Nobody has offered him one since. The real question is whether it gets recorded now on demo data and re-recorded later, or once, on his real data. What is needed. Omar says now-on-demo or later-on-real. Who. Omar. Cost. Nothing — screen recording, no equipment. How long once decided. Half a day per login for a short one; two days for all five. Recommendation. Record a short owner-only one now. It is the only thing on this list the owner asked a competitor for and got refused.
100 — A Makki address instead of a pages.dev link
What it is. app.makkiinc.ca or similar, instead of makki-portal-37c739cf.pages.dev.
Why it isn't there. The hosting question is open and it is not ours to answer. Today's link sits on EazyLife's
Cloudflare; this instance has no Cloudflare login at all (MEMORY.md, 2026-09-15 03:00). Whose account holds Makki's
app long-term has not been settled (Solutions_Plan §8.2).
What is needed. The hosting decision — The owner's own Cloudflare account, or EazyLife's — then a domain pointed at it.
Who. Omar and the owner. Cost. A domain is roughly $15–20 a year if Makki does not already own one;
hosting itself is free at this size. Unknown — needs Owner: whether makkiinc.ca is already his and who holds it.
How long once decided. An hour, plus DNS propagation.
4. Just build time — nothing blocking — 9 rows
Nobody is holding these up. They have not been built because other things came first. Every one can start today. Four rows left this section on 2026-09-20 — 16, 18, 35 and 80 — and are in section 0. It was 13 rows.
57 — A PDF pack of certificates to send to anyone
What it is. One button: every ticket for a crew or a job, as one PDF, for a general contractor who asks (@17:30).
Why it isn't there. Never built. The tickets, the expiries and the archive it would print are all there.
Needed. Nothing. Who. Us. Cost. Nothing. How long. 4–6 hours.
2026-09-20 — part of this now exists, and the row stays open. The job-setup build added a Crew tickets on
this job section to the closeout report — every man × every required ticket, with number, expiry and status —
and it prints with that page (certsSection / injectCloseout in portal/app-job.js, fed by R.jobCrewCerts).
That covers the job case inside a closeout document. A standalone pack for a crew, on one button, for a GC who
asks mid-job, is still not built, and neither is print styling over the cert tables themselves. Call it 2–3 hours
now rather than 4–6.
59 — Skills beyond tickets, and picking a crew by skill
What it is. Suncor orientation, a school background check — things that are not tickets but decide who can go where. Dispatch filters by them and sees an icon on the job (@15:51). Owner: "Yeah. So they have a nice little picture, certs" (@16:35). Why it isn't there. Never built. Tickets were built first because they block a man from a crew; skills only filter. Needed. Nothing to build it on demo skills. Unknown — needs Owner: which skills Makki actually tracks; those come with the crew list. Who. Us. Cost. Nothing. How long. 6–8 hours.
61 — Emergency contact details on the man
What it is. Name and number of who to call, on the person's record (@14:06). Why it isn't there. Never built. The person's record itself is built (row 58). Needed. Nothing to build; the real details arrive with the crew list. Who. Us. Cost. Nothing. How long. 2 hours.
73 — A loadout list: what a job needs, out of the yard and back
What it is. The PM lists what a job needs; the yard is told, fulfils it, and the stock moves out of inventory onto
the job, cost-coded (@19:01). The owner on the whole inventory flow: "That's great" (@21:20).
Why it isn't there. Never built. The Equipment and Inventory pages it moves stock between are built.
Needed. Nothing to build on demo data; real gear arrives with the owner's equipment list (Solutions_Plan §7.3).
Who. Us. Cost. Nothing. How long. 1–2 days.
74 — A project inventory report: ordered, returned, consumed
What it is. Everything that went to a job and what came back (@19:01). Why it isn't there. It is the report at the end of row 73 and cannot be written before it. Needed. Row 73. Who. Us. Cost. Nothing. How long. 4–6 hours after 73.
75 — Logging an inspection from the scan page, and a maintenance history
What it is. Scan the code on a machine and fill in the inspection there, no login; and every machine keeps its repair history (@19:01). Why it isn't there. The scan page is built and read-only by design. Letting it write was never built. Needed. Nothing. Who. Us. Cost. Nothing. How long. 1 day.
78 — Head starts on the timesheet — HALF BUILT 2026-09-20, was NOT BUILT, now PARTLY
What it is. Two buttons: "same as yesterday" and "pull from the schedule", so the foreman is not typing his crew
in every morning (@25:57).
What is built now. The first button is done. Start Day — same as <the crew's last day worked> sits on the
start screen and again on the open timesheet, and it copies that day's hours and cost codes per man
(prevDay() / #sdStartPrev / #tsPrev in portal/app-day.js). The 8 h head start is still there as the second
choice. The start screen also reads the schedule board through R.visibleSchedule and names the crew the board
has on the site you pick, re-reading it when you change the site (boardCrewFor()).
What is still missing. Pull from the schedule does not really pull. The men on the sheet are still the
login's own crew: startPanel() is called with cur().crew, the tick-box list does not re-render when the board's
crew changes, and begin() saves the day under cur().crew regardless. Underneath it, ops.js SCHEDULE rows are
[date, crew, jobId] — there is no man list on the board at all, so pulling the men would mean putting one there.
Needed. Nothing from the owner. Who. Us. Cost. Nothing. How long. 3–4 hours left of the original 3–4.
91 — Telling it to change something by text
What it is. Not just asking a number — "bump Crew B to Thursday", "mark 17 Ave complete" — and it changes, and
texts back the one line that changed (Solutions_Plan §2.2).
Why it isn't there. Asking is built (row 90); changing was never built. §2 says it needs nothing new from the owner.
Needed. Nothing from the owner. One decision from Omar: the list of changes it may make without asking first. Anything
that costs money or leaves the building stays drafted-and-handed-over under rail 1, either way.
Who. Us to build, Omar to draw the line. Cost. Nothing. How long. 2–3 days.
97 — A CSV import where there is no integration
What it is. Load people, customers and jobs from a spreadsheet (@12:48). Why it isn't there. The fallback is named on the QuickBooks screen but the importer was never written, because QuickBooks is the real answer and this is the backstop. Needed. Nothing. Who. Us. Cost. Nothing. How long. 1 day. Recommendation. Do it only if QuickBooks (row 48) stalls.
5. Deliberately not wanted, or deliberately dropped — 2 rows
37 — Takeoff and estimating off uploaded drawings
What it is. Upload the drawings, the software measures and prices, the bid items drop into the proposal (@33:12, @34:47).
Why it isn't there. the owner was cool on it — the only cool reaction in 43 minutes: "I don't know if that's something
our team would be interested in. I know our estimators aren't fans, but it'd be cool to see" (@34:36).
Dan dropped it himself: "we can talk about that another day."
Status. Dropped on the owner's own words. The deck already says "You write the quote" and does not pitch automatic
estimating (Fieldflo_Video_Workflows recommendation 7).
If the owner ever changes his mind. Weeks, not days, and it is a different kind of product. Ask again before starting.
60 — Training pushed to a man's phone, in his language, signed with a PIN
What it is. Two things stuck together. (a) The delivery: push a training to a man's phone, he enters his PIN and takes it in his language (@14:06). Owner: "Perfect" (@15:24). (b) The content: Fieldflo's optional library of "over 600 videos from Got Safety," about $4 an employee per month, producing a branded certificate that then tracks like any other cert (@15:31). Why it isn't there. Part (b) is not ours. It is a third party's video library sold through Fieldflo; we do not own it, cannot resell it, and will not pretend to. Part (a) has never been asked for on its own. Status. The video library is dropped — not ours to sell. The delivery half stays available if the owner wants to push his own material; on 80 employees the Fieldflo route would be roughly $320/month, and that is their price, not ours. What it would need. the owner's own training material, and row 7's texting number to deliver it. How long if he asks. 3–4 days for the delivery half, on top of row 7.
The one page
Where the 34 sit
Re-counted 2026-09-20 after the three builds. It was 38.
| Blocker | Rows | How many | Was |
|---|---|---|---|
| 0. Closed since 2026-09-16 | 56, 16, 18, 35, 80 | 5 | 1 |
| 1. Needs something from the owner | 21, 26, 33, 36, 47, 48, 65, 66, 67, 68, 96 | 11 | 11 |
| 2. Needs money spent | 7, 17, 42, 82, 86, 94 | 6 | 6 |
| 3. Needs a decision | 15, 38, 51, 52, 98, 100 | 6 | 6 |
| 4. Just build time | 57, 59, 61, 73, 74, 75, 78, 91, 97 | 9 | 13 |
| 5. Dropped on purpose | 37, 60 | 2 | 2 |
| still open | 34 | 38 |
Plus row 19, closed: one company, not a gap. Plus row 56, built 2026-09-17, and rows 16, 18, 35 and 80, built 2026-09-20 — all five counted out, and all five in section 0 with what closed them.
Of the 34 still open, 3 changed shape on 2026-09-20 without closing: 78 went from NOT BUILT to PARTLY (the "same as yesterday" button is built; "pull from the schedule" is not), and 33, 57 and 68 each gained a working part while keeping the blocker that holds them — The owner's manifest for 33 and 68, and for 57 the fact that the job's tickets now print inside the closeout but there is still no standalone pack on one button.
Read it this way: 23 of the 34 are not waiting on us at all. Eleven wait on the owner handing something over, six on one purchase, six on somebody saying yes or no. Nine are ours to build and nothing is stopping them. Two are gone.
What the money actually is
| What | Cost | Who decides |
|---|---|---|
| One Canadian texting number (Twilio), crew of 20 | $10–20 / month — about $120–240 a year | Omar |
| A Makki domain, if Makki does not already own one | $15–20 / year | The owner |
| Hosting | free at this size | — |
| QuickBooks connection | nothing extra — runs on his existing plan | — |
| Everything else on all 38 rows | build time, inside the agreed $3,000/month | — |
Total new money to clear every money blocker on this list: about $15–25 a month — call it $150–260 in the first year. Six of the 38 rows unlock for that.
One number that is not ours and is worth keeping in view: Fieldflo quoted the owner "around like 15,000 for the year… with a QuickBooks integration" (@40:27), on "just under 15" users (@40:22), and their training video library is a further ~$4 per employee per month on top (@15:31).
The shortest path that unblocks the most
One sitting with the owner, fifteen to thirty minutes, unblocks 11 rows. He brings:
- His QuickBooks login, at his own screen — clears 48, and 96, 47 fall out behind it.
- His crew list with phone numbers — needed for 7/82/86/94 below, and it fills in 59, 61, 80 with real names.
- His four forms: the containment log, the waste manifest, whatever goes to an adjuster, and his OHS documents — clears 67, 68, 33, 36, 65, and 66 behind them.
- A handful of past quotes — clears 21 and starts the Estimator.
- A couple of real permits — clears 26.
One purchase, about $15 a month, unblocks 6 more. Omar says go on the texting number; rows 7, 82, 86, 94, 42, 17 all run off that single line.
Four questions answered on the spot clear 4 more. Does the owner want GPS on clock-in (15)? Does he want a CRM (38)? Who else signs payroll (52)? Whose Cloudflare, and does he own a domain (100)? A fifth, 51, is the owner flipping one switch himself — ten seconds, nothing to build.
That is 21 of the 34 cleared by one meeting, one purchase and five answers. The remaining 9 are ours and need no permission — of those, 57 (the job's tickets already print in the closeout; a standalone pack is 2–3 hours) and the rest of 78 (pulling the men off the schedule board, 3–4 hours) are the cheapest hours against things the owner reacted to out loud on the call. Four that were on this line have since been built: 56 (add / renew a ticket) on 2026-09-17, and 16, 18, 35 and 80 on 2026-09-20 — see section 0.
All app data is demo data until Omar says otherwise. Nothing in the app sends anything to anyone.
Written by the Makki Hive build seat, 2026-09-16.
Re-counted 2026-09-20 against portal/ code — and re-counted again the same day, after app-day.js, app-job.js
and app-notify.js landed. The second count is the one on this page: 34 open, 5 closed. Rows were matched to
the new code by what they describe, never by number.