MMAKKIDEMOLITION Fieldflo video graded against the app: 39 gaps (26 Sep 2026) ←Makki DemolitionHome

The Checker — fieldflo-video-gap

Task: Omar, 2026-09-26 20:09 UTC — "get the checker to watch the video of the demo of the other company and make sure that everything they can do we can do as well." One grade. No worker, no rounds.

The recording: media/competitor/fieldflo_demo_43min_2026-09-20.mp4 — 43:24.97, 1280×720, h264, 30 fps (measured: ffmpeg-full -i … -f null -). Fieldflo's Dan Szigeti screen-sharing portal.fieldflo.com/demo-sales/ to the owner/the owner and Mark Chambers, 2026-09-08. Transcript profile/Fieldflo_Call_Transcript_2026-09-08.txt (512 lines) read in full before Part 1 was written.

How it was watched. The ffmpeg at ~/.local/bin/ffmpeg is the Playwright build (--disable-everything, no mp4 demuxer, no h264 decoder) and cannot open this file — it errors Invalid data found when processing input. There is no ffprobe on the box. A static ffmpeg 7.0.2 already sat in hive/checks/2026-09-26_fieldflo-video-gap_venv/bin/ ffmpeg-full; that is what cut the frames.

178 frames were cut into hive/checks/2026-09-26_fieldflo-video-gap_frames/, named f_MMSS.jpg: a 20-second grid across the whole 43 minutes (131 frames, 0 s → 2600 s) plus 70 extra cuts at seconds where the transcript says a new screen opened (the timestamp list is _frames/_times.txt; 178 unique after the grid/extras overlap). All 178 were opened and read with my own eyes — no sampling. 166 of the 178 are distinct images; the 12 repeats are genuinely static screens (the dashboard sat unchanged for stretches), which I confirmed by re-cutting 20 s / 80 s / 140 s independently and getting the same md5.

hive/checks/2026-09-26_fieldflo-video-gap_venv/bin/ffmpeg-full \
  -hide_banner -loglevel error -ss <s> -i media/competitor/fieldflo_demo_43min_2026-09-20.mp4 \
  -frames:v 1 -q:v 3 -y hive/checks/2026-09-26_fieldflo-video-gap_frames/f_MMSS.jpg
$ ls hive/checks/2026-09-26_fieldflo-video-gap_frames/*.jpg | wc -l
178
$ md5sum hive/checks/2026-09-26_fieldflo-video-gap_frames/*.jpg | awk '{print $1}' | sort -u | wc -l
166

Parts 1, 2 and 3 of this file were written before profile/Fieldflo_Call_Gap_Analysis_ 2026-09-20.md, profile/Fieldflo_Video_Frames_2026-09-20.md or profile/Master_List_ 2026-09-16.md were opened. I did not read them, and I did not read any earlier hive/checks/ file, while grading Parts 1–3. Part 4 is the only place they appear.

Everything below is demo data on both sides. Fieldflo's screen is its own sales demo (/demo-sales/); Makki's portal carries a DEMO DATA band on every page and says so.


Part 2 evidence — how the Makki portal was measured

Three things, all read-only, all re-runnable from (workspace root):

(A) The grep target is the live app, not a stale copy. Every portal JS file on disk is byte-identical to what https://makki-home.pages.dev/app/ serves, so a grep of portal/*.js is a measurement of the live site. .bak_* files are excluded from every grep in this report.

$ bash hive/checks/2026-09-26_fieldflo-video-gap_bytes.sh
SAME  app.js  71a2de55cd2c87de0a44a5247fc7f057
SAME  roles.js  441582b11c7450144f0cbe1381a2af46
SAME  forms.js  4504c8f6a1e6acfc50e8c2055fd912fc
SAME  certs.js  5cfd97e0b08665532263ea0e1efd5c74
SAME  app-ops.js · app-ops2.js · app-day.js · app-job.js · app-people.js
SAME  app-yard.js · app-forms.js · app-map.js · app-notify.js · app-import.js
SAME  index.html (served at /app/)  5cf235ae41b8fc753746ce2f7141bc3c

(B) The five demo logins were driven on the live site (Playwright, the skills/visual-qa/.venv runtime), every tab opened, the page's own text read back. 52 PNGs in hive/checks/2026-09-26_fieldflo-video-gap_shots/.

$ skills/visual-qa/.venv/bin/python hive/checks/2026-09-26_fieldflo-video-gap_live.py
== ali == tabs(16): overview·pipeline·proposals·jobs·projects·board·gantt·collections·
          payroll·quickbooks·team·tickets·safety·forms·equipment·inventory
== priya == tabs(4): overview·outstanding·toinvoice·payments
== ray == tabs(5): overview·quotes·winrate·proposals·bidactual
== sam == tabs(11): overview·startday·myjobs·schedule·board·gantt·crewcerts·safety·
          forms·equipment·materials
== dale == tabs(5): today·endofday·myschedule·mytickets·forms
== scan MK-W07 (no login) == Ivy Salcedo | Abatement Tech · Crew C | MK-W07 |
   All tickets in date | TICKETS HELD | Asbestos Worker … | Respirator Fit Test …

$ skills/visual-qa/.venv/bin/python hive/checks/2026-09-26_fieldflo-video-gap_owner.py
ali/overview: Owner / Company Overview / What is running today · then the money
ali/pipeline: Sales Pipeline / Quotes sent vs won · fiscal 2026
ali/proposals: Proposals / 603 quotes this year
ali/jobs: Jobs & P&L / Every won job with full cost breakdown
ali/projects: Project Book / 17 jobs with a book · permits, required tickets, crew readiness
ali/board: Schedule Board / Week of Mon 17 Aug · click a day to move a crew
ali/gantt: Timeline / 16 open jobs · read-only
ali/collections: Collections & AR / Money owed to the company · oldest first
ali/payroll: Payroll Approval / Week of Mon 17 Aug · 12 men · 404 h
ali/quickbooks: QuickBooks Online / the owner's accounting system · not connected
ali/team: Team & Access / 5 people · add someone by email and pick their role
ali/tickets: Tickets & Certificates / 14 men · 54 tickets on file · warned before they lapse
ali/safety: Safety & Incidents / 3 incidents · 3 corrective actions open
ali/forms: Forms / Build the forms the crews fill on site, and read what comes back
ali/equipment: Equipment & Rentals / 12 assets · 3 on rent · a code on every one
ali/inventory: Inventory / Disposal consumables on hand (bags, coveralls)

(C) A per-capability grep of the current portal source.

$ bash hive/checks/2026-09-26_fieldflo-video-gap_probe.sh

In Part 2, probe N means row N of that script, live means (B), and a bare grep … is a one-off run quoted inline.

The owner's rails, named where they apply. Two standing rules make some Fieldflo behaviour out of scope rather than missing:

A row marked Out on rail is something the portal deliberately does not do because of one of those two. It is not a gap, but it is a difference the owner will notice, so each one names its rail.


Part 1 — everything Fieldflo showed on screen or said it does

# mm:ss Capability Seen on screen or said Frame file
1 00:00 Left nav: Dashboard Seen f_0000.jpg
2 00:00 Left nav: CRM Seen f_0000.jpg
3 00:00 Left nav: Projects Seen f_0000.jpg
4 00:00 Left nav: Admin (Email Templates · Email Groups · Email Log · Form Builder · Export Builder · Imports · Form Sequencer · Portal Admin · Timesheet Adjuster · Reporting Center · Weekly Timesheet) Seen f_2100.jpg
5 00:00 Left nav: Payroll (Payroll Approval · Payroll Exports) Seen f_3800.jpg
6 00:00 Left nav: Company Seen f_0000.jpg
7 00:00 Left nav: Employees Seen f_0000.jpg
8 00:00 Left nav: Messages Seen f_0000.jpg
9 00:00 Left nav: Certification (Certificates · Trainings · Bulk Deployment) Seen f_1720.jpg
10 00:00 Left nav: Inventory Seen f_0000.jpg
11 00:00 Left nav: Warehouse Seen f_0000.jpg
12 00:00 Left nav: Scheduling (Settings · Week · Reports · Gantt Chart · 4 Week Look Ahead) Seen f_3700.jpg
13 33:40 Left nav: "Submit a Feature idea & Learn what's New!" Seen f_3420.jpg
14 00:00 Dashboard split into four tabs: CRM · Projects · Safety · Equipment Seen f_0000.jpg
15 03:45 Widget — Today's Active Projects, with each crew's faces and a Roll Call link Seen f_0000.jpg
16 05:00 Widget — Nearing Bid Hours, a ring per job (67% / 70% / 131%) Seen f_0000.jpg
17 05:20 Widget — Certificates Expiring Soon, days left per man Seen f_0000.jpg
18 05:31 Widget — Employees Nearing Over Time, "comes to life at 32 hours" Seen + said f_0000.jpg
19 05:31 Widget — New Projects, with start / end date Seen f_0000.jpg
20 05:31 Widget — T&M · Change Orders Needed Seen f_0000.jpg
21 06:10 Widget — Messages (a company broadcast on the dashboard) Seen f_0531.jpg
22 05:50 Widget — Forms audit: Available forms · Intervals · Form Status · Project Status, across every job at once Seen + said f_0550.jpg
23 06:30 Widget — Job Sites map with pins and "See my projects" Seen f_0540.jpg
24 06:45 Stat tiles — $17,724,733.33 contracts in progress · 34 days without injury · 875 active employees · 254 clients · 108 users Seen f_0620.jpg
25 02:37 Any language: the whole UI translated (Panel / Proyectos / Empleados …) via a Google Translate widget Seen f_0306.jpg
26 25:20 A globe (translate) control on a form row and in a form header Seen f_0434.jpg
27 02:37 White-label: "wherever you see Fieldflo, imagine your logo and branding" Said f_0237.jpg
28 03:25 Roles & permissions per person — ~120 switches in 14 groups (Projects, Job Costing, Estimates, CRM, Certificates, Admin, Timesheet, Payroll Approval, Warehouse, OSHA, Inventory, Reporting Center, Scheduling, Document System) Seen f_0852.jpg, f_0920.jpg
29 08:30 Role Profiles — saved permission presets Seen f_0920.jpg
30 03:25 Daily labour verify their time and safety without ever logging in Said f_0325.jpg
31 03:45 Real time — a project appears on the dashboard the moment the foreman clocks his crew in (Todays Crew Size 0 → 2 → 0) Seen + said f_2745.jpg, f_3220.jpg
32 04:34 Job templates — "for this job type these dailies are mandatory" Said f_0434.jpg
33 04:57 Form builder — Fieldflo digitises and hard-codes your own forms Said f_2100.jpg
34 05:00 Bid vs actual + remaining per cost code / labour type, in real time Said f_0500.jpg
35 05:20 Certs tracked, with several different ways of warning before expiry Said f_0520.jpg
36 05:31 Time & materials and change orders on a job Said f_0531.jpg
37 05:50 Audit every safety meeting / form across every branch for a month in one sweep Said f_0550.jpg
38 06:10 Messages — deploy a message to the whole crew or whole company, by text or email Said f_0610.jpg
39 07:00 Safety dashboard — Monthly Incidents line chart (Incidents / Near Misses / Stop Works, 12 months) Seen f_0630.jpg
40 07:00 Safety tiles — Incidents 0/7, Near Miss 0/1, Stop Work 0/1, Injuries 0, each 30 days vs 12 months Seen f_0630.jpg
41 07:00 Injuries by Body Part diagram Seen f_0630.jpg
42 07:00 Safety dashboard filters: All Projects · Project Type · All Offices · Last 30 Days Seen f_0630.jpg
43 07:10 Incident reporting system that walks the whole claim — 11 steps, % complete (General Information, Injured Employee, Damaged Property, Damaged Equipment, Describe What Happened, Employee Statement, Witnesses, Third Party, Injury & Investigation Report, Insurance & OSHA, Report Review) Seen f_0640.jpg
44 07:10 Incident Reports Need Reviewed queue — percent complete and days since assigned Seen f_0645.jpg
45 07:35 Corrective Actions Assigned — per employee, days since assigned, stays until fixed Seen + said f_0645.jpg
46 07:45 OSHA Reporting — 300 Log / 300A Hours & Summary / 301 Incidents, filtered by year, period, establishment, projects Seen f_0710.jpg
47 07:45 OSHA downloads — "Download 300 / 301 csv", "Download 300 Log xlsx" Seen f_0710.jpg
48 07:45 OSHA classification per case (Death · Days away from work · Job transfer or restriction · Other recordable) and illness type (Skin Disorder · Respiratory · Poisoning · Hearing Loss · All Other) Seen f_0710.jpg
49 07:20 Inspection management — build your own inspections or use Fieldflo's Said f_0720.jpg
50 07:50 Equipment dashboard — Open Orders count Seen f_0720.jpg
51 07:50 Equipment Nearing Maintenance — type of maintenance, trigger miles/km/hrs, how overdue Seen f_0720.jpg
52 07:50 Equipment Corrective Actions — assigned to, days since assigned Seen f_0720.jpg
53 07:50 Equipment Inspections Log and Next Inspections Due Seen f_0720.jpg
54 07:50 Rentals — days left till renewal, renewal date, days on a job site Seen f_0735.jpg
55 07:50 Top 10 Project Inventory Costs, filtered by supervisor Seen f_0735.jpg
56 07:50 "Where are your vehicles, equipment and heavy equipment" — a live map with Rentals / Heavy Equipment toggles, search, Map/Satellite, clustered pins and per-asset popups Seen f_0735.jpg, f_0740.jpg
57 07:55 CRM dashboard — Reach Outs 10, Job Walks 25, Proposals Due 101 Seen f_0745.jpg
58 07:55 CRM — Leads by Salesperson, active-lead count each Seen f_0745.jpg
59 07:55 CRM value tiles — 89 open pending, 62 awarded, 4 loss, 67 proposals sent, 156 active leads, $1.21M pending, $1.32M awarded, $10,005 loss, $2.54M total lead value, $3.61M estimated contract value Seen f_0745.jpg
60 08:20 CRM leads list — 158 leads · $4.2m active pipeline, status pills, value, due/created, board / list / grid views, search, + New lead Seen f_3440.jpg
61 08:20 CRM tabs — Leads · Clients · Calendar Seen f_0800.jpg
62 08:00 Connect to QuickBooks — Owner: "Connect to QuickBooks." Dan: "Yes sir." Said f_0745.jpg
63 12:38 QuickBooks integration pulls employees across so there is no duplicate entry Said f_1238.jpg
64 13:00 CSV / file imports when there is no integration Said f_1300.jpg
65 13:20 Every page has the same two controls: three dots (admin customisation) and one big button (add) Said + seen f_1240.jpg
66 08:14 Give the accountant access to payroll and nothing else — Owner: "Okay. Wow." Said f_0852.jpg
67 09:40 Each employee gets their own approval by text: here is your time for the day and the week, were you injured, does it look right Said f_1000.jpg
68 10:37 Notifications — a Daily digest with ~28 switchable data points Seen f_1100.jpg
69 10:55 Daily digest twice a day when there is a night shift Said f_1100.jpg
70 11:00 Notifications — Instant (incidents, warehouse requests, disciplinary actions, overtime exceeded) Seen f_1130.jpg
71 11:10 The notification email carries your logo and only the data points you signed up for Said f_1200.jpg
72 11:30 Notification — cert close to expiry, with a link straight to that cert to put the new one in Seen + said f_1200.jpg
73 11:30 Notification — permit close to expiry Said f_1130.jpg
74 11:30 Notification — who is not doing the paperwork correctly Said f_1130.jpg
75 12:00 Notification — warehouse items pending order, anything low in inventory Said f_1130.jpg
76 12:00 Notification — scheduling conflict Seen f_1130.jpg
77 11:40 Certs archived and kept for 30 years Said f_1200.jpg
78 13:00 Employees list — Office filter, PIN column, Status, FloTime, search by name/ID/city/phone/union, + Add Employee Seen f_1240.jpg
79 13:20 Employees ⋯ menu — Skills · Positions · Union Skill Levels · Role Profiles · Incidents · Prevailing Wage / CP Classification · Export Employees (CSV) · Download QR Codes Seen f_1320.jpg
80 13:40 A unique QR code created for every employee the second they exist, with Download PDF Seen f_1340.jpg
81 14:00 The mic-drop: an inspector scans the hard hat and sees that man's live certificates — no login. Owner: "Oh that's great." Seen + said f_1420.jpg
82 14:00 The public scan page shows Need vs Have %, total active count, and per cert: status, taken on, expiration, days left Seen f_1420.jpg
83 14:00 Missing / expired certs are visible to the employee but can be hidden from the inspector by permission Said f_1420.jpg
84 13:50 Each cert name on the scan page opens the scanned certificate itself Seen f_1400.jpg
85 14:30 Employee emergency details Said f_1500.jpg
86 14:30 Training system — deploy trainings to the whole company, to divisions, at chosen times Said f_1500.jpg
87 15:00 Training lands on the employee's phone; they open it with a secret PIN; available in different languages Said f_1520.jpg
88 15:00 Trainings Needed page — training name, deploy status (Deployed–Email / Deployed–SMS / Enrolled), quiz status, "Go to training" link Seen f_1500.jpg
89 15:10 The training itself — video player plus the written course, per language Seen f_1520.jpg, f_1531.jpg
90 15:31 ~600 GotSafety videos droppable in at about $4 per employee per month Said f_1531.jpg
91 15:40 Quiz after the training — multiple choice, Back to Training / DONE Seen f_1540.jpg
92 15:40 Pass the quiz → a certificate with your logo, tracked and warned on like any other cert Said f_1545.jpg
93 15:51 Employee module — employee number, name, cell, temp-labour flag, typical cost code / position, office / division Seen + said f_1600.jpg
94 16:20 Skills on each employee (~60 incl. per-county and union skills) so dispatch filters instead of phoning round Seen + said f_1620.jpg
95 16:40 Training matrix — who has what certs and whether they have the right ones Said f_1640.jpg
96 17:00 Write-ups / disciplinary on an employee Said f_1700.jpg
97 17:00 Documents uploaded against an employee Said f_1700.jpg
98 08:40 Employee record — PIN #, "Cannot Pin for Others", "Timesheet SMS PIN Only" Seen f_0840.jpg
99 08:40 Employee record — Union Name, Union Code/ID, Company Employee ID, Employee ID Seen f_0840.jpg
100 16:00 Employee record — Pay Rate (masked), Social Security Number (masked), Payroll Group, Union Skill Level Seen f_1600.jpg
101 08:40 Employee record — Active / Super Admin / Can Login / Sales Person / Estimator / NoTime Access flags Seen f_0840.jpg
102 08:40 Employee drawer sections — Details · Certs · Incidents · Roles · Training Needed · Documents · Form Tagging · Emergency Details · Linked Assets Seen f_0840.jpg
103 17:30 Certificates page — + Add Certificate, cert names list, valid from, expiration, employee, photo of the cert uploaded Seen + said f_1720.jpg
104 18:00 Cert status filter — All Statuses / Active / Renew / Archived Seen f_1800.jpg
105 18:20 Renew a cert: the new one becomes active, the old one archived forever Said f_1820.jpg
106 18:34 Create a PDF pack of certificates to send to anybody Seen + said f_1834.jpg, f_1840.jpg
107 17:30 Certificates filter panel — first/last name, SS last 4, union code, cert name, labor type, status Seen f_1854.jpg
108 19:01 Inventory — item no/name, current location, category, inspected on, next inspection due, min/max, on hand/qty, photo per item Seen f_1920.jpg
109 19:30 A QR code on each asset — the operator scans it and does an inspection without logging into Fieldflo Seen + said f_1940.jpg
110 19:30 The asset scan can also show an SDS on a chemical, or anything else you choose Said f_1940.jpg
111 19:30 Item record — Asset Tag, Category, Asset Class, Yard/Aisle location, Add To Employee, Allow Quick Transfer, Re-Order Restricted Seen f_1940.jpg
112 19:40 Item Cost / Rates — cost code, item cost, T&M cost, hourly / sitting / daily / weekly / monthly rate, rate-evolution logic Seen f_2000.jpg
113 20:00 Inspections on a piece of equipment; red = failed; the warehouse manager is notified Seen + said f_2020.jpg
114 20:00 The inspection questions change with the type of equipment, and you can build your own Said f_3400.jpg
115 20:00 Equipment inspection form — odometer, equipment hours, Powered Off / Powered On checks, OK / NO / N/A per line with a note Seen f_3400.jpg, f_2020.jpg
116 20:00 Track every maintenance and repair, and every time an item was ordered to a project Said f_1940.jpg
117 20:30 Loadout list — everything a project needs, out of the yard Said f_2040.jpg
118 20:30 Warehouse request form — request type, requested-by with a green VERIFIED stamp, PM, superintendent, job address, warehouse approval, delivery notes, returning items with approved qty Seen f_2040.jpg, f_2100.jpg
119 20:30 "+ ITEM or by RAPID QR" — add items to a warehouse request by scanning Seen f_2040.jpg
120 20:45 Fulfilled stock comes out of inventory, onto the project, and starts cost-coding estimate vs actual Said f_2100.jpg
121 21:00 Reporting Center → Project Inventory Report: ordered / returned / total in use / cost per item per project, Download Report Seen f_2126.jpg, f_2120.jpg
122 09:00 Reporting Center — 18 named reports (Asset, Job Costing, Expense, Per Diem, T&M, Change Order, Waste, CWI Construction Activity, Warehouse, Project Inventory, CRM, Incident, Injury, Inspection, Custom Form Excel Export, Employee Sharing, Equipment Log, Form) Seen f_0900.jpg
123 21:26 Projects — bring them from QuickBooks or press the big button Said f_2140.jpg
124 21:26 Project header — site address, site contact, supervisor, project manager, client, scope of work, photo Seen f_2140.jpg
125 21:30 Project gauges — Project Schedule % / days left, Labor Mandays bid vs actual, Waste Loads bid vs actual Seen f_2140.jpg, f_0434.jpg
126 21:30 Project Stats panel — today's crew size, injuries, disciplinary actions, work delays, reportable incidents, T&M change orders needed, change orders Seen f_2140.jpg
127 21:30 Production Tracking — budgeted / actual / projected hours Seen f_2140.jpg
128 22:00 Project Book — 23 sections (General Info, Project Details, Settings, Project Site, Permits/Notifications, Per Diem, Certificate/Licenses, Timesheet/Positions, Timesheet/Prevailing Wage, Building Information, Owner Information, Waste Management, Procedures, Billing Details, Lien Information, Project Designer, Consultant, Air Monitoring Specialist, Insurance Certificate Information, Payroll Information, Emergency Info, Assigned Personnel, Other) Seen f_2200.jpg
129 22:00 Project settings — GEO Fencing and GEO Tagging on or off per job Seen f_2200.jpg
130 22:00 Project settings — allow multiple timesheets, allow multiple PSI/JHA, phases, daily overtime notification trigger (8.00 h), project-level form settings, project timezone Seen f_2200.jpg
131 22:00 Permits / notifications on the project, warned before they expire, visible in the field Said f_2200.jpg
132 22:00 Per diem on a project Seen f_2200.jpg
133 22:20 Certs and trainings made mandatory for a project — checked when scheduling and when adding to a timesheet Seen + said f_2220.jpg
134 22:30 Cost codes chosen per project, mirroring your own naming Seen + said f_2230.jpg
135 23:00 Prevailing wage selected per project to filter the timesheet Seen f_2240.jpg
136 22:00 Building information and owner information on the project Said f_2200.jpg
137 23:00 Waste reporting — haulers, material types, truck types, landfills Said f_2200.jpg
138 23:00 Custom tabs and project templates: "for these projects, answer these questions" Said f_2200.jpg
139 23:30 Insurance certificate information, lien information, billing details Seen f_2200.jpg
140 23:00 Emergency contact and nearest hospital, filled once, landing on the daily safety meeting automatically Seen + said f_2300.jpg
141 24:00 Job cost estimates — contract value, change orders with type/cost/date, project % complete with a change log Seen f_2340.jpg
142 24:00 Labor estimates by cost code / position / labor type, hours and cost Seen f_2330.jpg
143 24:00 Inventory estimates — consumables, materials, tools, equipment, heavy equipment, per diem Seen f_2330.jpg
144 24:00 Proposal builder — send proposals from Fieldflo to the client with your bid items; awarded work drops into the project Said f_3510.jpg
145 24:00 Bring an estimate in from an Excel spreadsheet Said f_2330.jpg
146 24:00 Per-project document system — folders (Air Monitoring, Containment Entry Logs, Contract Documents, Manifests, Permits, Plans and Specs…), roles per folder, shared/gallery/offline, add folder / add files Seen f_2400.jpg
147 24:00 Closeout report for a project including dailies, certs and documents Said f_2400.jpg
148 24:23 Tie every branch into one HQ dashboard Said f_2423.jpg
149 25:00 The field sees only Projects on a phone or tablet Said f_2500.jpg
150 25:20 One "Start Day" button auto-creates the dailies that job requires Seen + said f_2520.jpg
151 25:57 Timesheet — same as previous day, or pull from scheduling Said f_2557.jpg
152 26:30 Adding a man without the right certs warns the supervisor, and emails the office if he is added anyway Said f_2630.jpg
153 26:30 Cost code per man on the timesheet, defaultable so nobody picks Said f_2630.jpg
154 27:20 An SMS to each labourer within ~10 seconds asking for their location Said f_2720.jpg
155 27:45 Timesheet timed to the second; the office watches it live Said f_2745.jpg
156 28:00 JHA / pre-job safety meeting, with "same as previous day" Seen + said f_2820.jpg
157 28:30 Supervisor signs the safety meeting with a PIN; up to 10 auditors also sign with a PIN Seen f_2830.jpg
158 29:00 Nearest hospital section on the JHA Seen f_2820.jpg
159 29:00 JHA Review — ~40 hazards in 5 groups (Environmental, Ergonomics/Material Handling, Work at Height, Activity, Access/Egress) Seen f_2840.jpg
160 29:30 Evacuation plan section on the JHA, coming from the project details Seen f_2820.jpg
161 30:00 Task Steps / Hazard / Control / Risk Rating — your own internal library; the supervisor picks the task and the paperwork fills itself Seen + said f_2900.jpg
162 29:20 Live weather and forecast on the JHA (temp, wind, cloud, humidity) with "have you reviewed it with the crew" Seen f_2920.jpg
163 29:20 OSHA Heat Index, current and forecast, with a review question Seen f_2920.jpg
164 30:20 Everyone on the timesheet must verify they understood the safety meeting, by SMS, translatable into any language Seen + said f_2930.jpg
165 30:20 The signature block carries the acknowledgement wording, Add Visitor / Add Employee, and an SMS-resend control Seen f_2930.jpg
166 30:40 Site inspections walked question by question, with Upload Photo(s) per line and OK/NO/N/A Seen f_3000.jpg
167 30:40 Anything marked no or broken becomes a corrective action assigned to an employee, who is notified Said f_3000.jpg
168 31:00 Dailies already built for the abatement industry Said f_3020.jpg
169 31:00 The crew talks into the daily, in any language Said f_3020.jpg
170 31:00 Daily field report — work completed today, what went right, what can be improved, goals for tomorrow / the week, meeting log Seen f_3020.jpg
171 31:20 Incident / near miss / stop work raised on the daily notifies the office right away Said f_3020.jpg
172 31:00 Abatement procedures on the daily — install criticals, negative pressure, construct decon, pre clean, cover fixed objects, containment, removal, bag out, final clean, clearance, tear down, demob Seen f_3040.jpg
173 31:00 Cleaning verification, work area locations, cleaning cloths used, asbestos / mould detected Seen f_3040.jpg
174 31:00 Attach pictures to any daily Seen + said f_3040.jpg
175 31:40 Containment log — names pre-filled, respirator used, task before, time in / time out, typed signature Said f_3100.jpg
176 31:40 Forms stay red until answered correctly, white when right Seen + said f_2520.jpg
177 32:00 End of day — who left, what breaks they took; "Stop clock for all" with meal and 2nd-meal start/end and a PIN Seen f_3140.jpg
178 32:00 The employee verifies their own working day: time and positions correct, breaks taken per local/state/federal rules, were you injured, then PIN Seen f_3200.jpg
179 25:20 Forms bulk actions — Translate to English, Download Forms .pdf, Download Forms .zip, Send Forms, Close Forms, Delete Forms Seen f_2520.jpg
180 25:20 Active Forms / Closed Forms / Deleted Forms tabs, and a Report Incident button on the job Seen f_2520.jpg, f_0434.jpg
181 33:40 Submit a feature idea, and learn what's new Seen f_3420.jpg
182 34:00 Takeoff & estimating — upload the drawings, "FLO" auto-detects tasks and scope of work Seen + said f_3500.jpg
183 34:00 Estimate templates with scope groups, work-type setting (Residential / Commercial / Industrial / School / Healthcare / Water utility / Government …) Seen f_3500.jpg
184 34:00 Job conditions — occupied during work, prevailing wage, phased, multi-site, federally funded, RACS present, building vintage pre-1980 Seen f_3500.jpg
185 34:30 The takeoff flows straight into a proposal with bid items and tasks Said f_3510.jpg
186 35:10 Proposal editor — line items with qty, unit cost, markup %, line total; drag-in Text / Divider / Image / PDF / Signature blocks; Web and PDF views; expiration Seen f_3520.jpg
187 35:10 Proposal totals — bid total, margin %, profit; and a Send button Seen f_3520.jpg
188 35:10 Proposals list grouped by client, with draft status and value Seen f_3510.jpg
189 35:20 Weekly Scheduling / dispatch — week picker, Project / All Projects / Crew views, crew projected vs crew scheduled per day, drag people onto days with hours Seen f_3600.jpg
190 35:20 Projects panel colour-coded by whether the crew is filled, with start/end dates and project type Seen f_3600.jpg
191 35:20 Crew / Groups panel — days scheduled and scheduled hours per man Seen f_3600.jpg
192 35:20 Send each employee their own schedule to their cell phone or email Said f_3600.jpg
193 37:20 Gantt chart across four weeks, each bar a project with crew size and named crew Seen f_3730.jpg
194 37:20 4 Week Look Ahead Seen f_3700.jpg
195 38:00 Closeout report at the end of a project Said f_3740.jpg
196 38:20 Payroll approval — total time for the week per employee, then broken down per employee per project and cost code Seen f_3840.jpg
197 38:20 Payroll approval filters — date range, verify status, projects assigned to, project type, offices, employee, approval status, project Seen f_3800.jpg
198 38:20 "Send Verify SMS" from payroll, with SMS sent / verified date-time / verify status per man Seen f_3840.jpg
199 38:40 Approve all (10) · Mark week approved & notify · PRINT · "Already Approved By: Dan Szigeti 09/08/2026 11:39 AM" Seen f_3840.jpg
200 38:40 PM-by-PM approval chain with a trailing history, so payroll cannot run until named people have approved Said f_3840.jpg
201 38:40 Payroll Exports — a spreadsheet for the in-house accountant Seen f_3800.jpg
202 00:00 Multiple offices / divisions — an Office filter on every list Seen f_1240.jpg
203 15:51 Temp labour tracked as such Said f_1600.jpg
204 03:45 Roll Call Seen f_0000.jpg
205 13:20 Export Employees (CSV) Seen f_1320.jpg
206 13:20 Download QR Codes in bulk for all employees Seen f_1320.jpg
207 34:00 Fieldflo's own marketing site — webinars, guides, client logos, "Schedule Your Demo" Seen f_3300.jpg, f_3320.jpg

207 capabilities.


Part 2 — does the Makki portal do it?

# Capability Makki state Command Output seen
1 Nav: Dashboard Built live ali/overview: Owner / Company Overview
2 Nav: CRM Part built live Owner gets pipeline (Sales Pipeline) + proposals; no CRM section with clients/calendar. ali/pipeline: Sales Pipeline / Quotes sent vs won · fiscal 2026
3 Nav: Projects Built live ali/jobs: Jobs & P&L, ali/projects: Project Book / 17 jobs with a book
4 Nav: Admin (11 tools) Not built grep -cE 'Form Sequencer|Export Builder|Email Templates|Email Groups|Email Log|Portal Admin|Timesheet Adjuster|Reporting Cent' portal/*.js 0 — no admin section of any kind
5 Nav: Payroll Built live ali/payroll: Payroll Approval / Week of Mon 17 Aug · 12 men · 404 h
6 Nav: Company Not built probe 6 hits=0
7 Nav: Employees Built live ali/team: Team & Access / 5 people; ali/tickets: … 14 men · 54 tickets on file
8 Nav: Messages Not built probe 8 → grep -cE 'broadcast|announcement' 0. The word "Messages" appears only in prose
9 Nav: Certification Built live ali/tickets: Tickets & Certificates / 14 men · 54 tickets on file · warned before they lapse
10 Nav: Inventory Built live ali/inventory: Inventory / Disposal consumables on hand (bags, coveralls)
11 Nav: Warehouse Part built live Materials page exists for the site lead (sam/materials: Materials / Shared disposal stock); no warehouse seat, no request/fulfil loop
12 Nav: Scheduling Part built live ali/board: Schedule Board, ali/gantt: Timeline … read-only; no Scheduling settings/reports section
13 Nav: Submit a feature idea / what's new Not built probe 143 hits=0
14 Dashboard split CRM / Projects / Safety / Equipment Part built live Makki splits by group in the left nav (Dashboard, Jobs, Schedule, Money, People, Safety, Gear — screenshot ali_01_overview.png), not by tabs across one dashboard
15 Today's Active Projects + crew faces + Roll Call Part built live, full_overview.png Today's active projects / Sat 22 Aug · 5 jobs inside their date span · who is on each one, each card with crew initials, "day 27 of 33", "5 men on the crew". No Roll Call (probe 157 hits=0)
16 Nearing Bid Hours rings Built live, full_overview.png Nearing bid hours / 5 of 16 open jobs have cost against them · hottest 5 · 1 past three-quarters of the bid with rings 79% 432 1st Ave SW · $1,444 of $1,840 bid, 72%, 61%, 54%, 50%
17 Certificates Expiring Soon, days left Built live, full_overview.png Certificates expiring soon / 7 tickets inside 60 days · 2 already run out — Otis Brandt · Asbestos Worker · EXPIRED 2026-06-12, Mika Duarte · 11 DAYS, Dale Ferris · 17 DAYS …
18 Employees Nearing Over Time (32 h) Built grep -n 'Over 32 h' portal/app-ops.js kpi("Over 32 h",String(wk.men.filter(m=>m.over32).length),…over 40…) — on Payroll, not the dashboard
19 New Projects widget Part built grep -n 'Recent Jobs' portal/app*.js <h3>Recent Jobs</h3> exists; it is recent, not forward-looking start/end dates
20 T&M · Change Orders Needed widget Part built grep -n 'Change orders' portal/app-ops2.js <h3>${icon("edit")} Change orders</h3> on the job drill-in; no dashboard "needed" queue
21 Messages widget (company broadcast) Not built probe 21 → grep -cE 'broadcast|announcement' 0
22 Forms audit across every job at once Built live ali/forms: Forms / Build the forms the crews fill on site, and read what comes back; the page has Templates / Submitted 5 tabs (full_forms.png)
23 Job Sites map Built grep -n 'Job sites' portal/app-map.js <h3>${icon("pin")} Job sites</h3>; grep -c 'tile|Satellite' portal/app-map.js → real map tiles + satellite toggle
24 Stat tiles: contracts in progress · days without injury · employees · clients · users Part built live, full_overview.png REVENUE $9.37M / $39.2K avg contract / job, JOBS 239 / 76 active right now. No days-without-injury, no client count, no user count (probe 24 hits=0)
25 Any language — whole UI translated Not built probe 25 grep -ciE 'Google ?Translate|translate\.google|goog-te' hits=0. The portal is English only
26 Per-form translate control Not built probe 26 hits=1 — the word "globe" in a comment, no translate control
27 White-label (your logo and branding) Built live, every screenshot Makki wordmark top-left and in the sidebar; Company Portal / by Makki Demolition; the scan page carries it too
28 Per-person permission switches Built live, full_team.png Who sees what — switch a tab on or off per person … Flip a switch, then sign in as that person: the tab is gone from their menu and will not open by link. PN Priya Nair BOOKKEEPER 4 of 5 tabs. Field-level gating is stronger than Fieldflo's: roles.js:240 /* book: outstanding & to-invoice ONLY. No cost/profit/margin fields exist here. */
29 Role Profiles (saved presets) Part built live, full_team.png Five fixed roles with fixed descriptions; no user-made preset
30 Daily labour verify without logging in Part built live The public scan (?hat=…) needs no login and is read-only. There is no no-login verify action — see 164/178
31 Project appears live when the foreman clocks in Built live, full_overview.png "On site" means that crew's foreman hit Start Day on this job; cards read Not started until Start Day
32 Job templates — mandatory questions per job type Built grep -n 'V74. TEMPLATES' -A8 portal/app-job.js V74. TEMPLATES — "for these projects, answer these questions" · R.templateFor(jobId,role,who(),jx()) · This job's work type is <b>${t.workType}</b> with suggested templates
33 Form builder Built live, full_forms.png Form templates / 3 on file · 3 ship with the app · build your own below, New template, Add a field, Save template; field types Text, Yes/No, Number, Choice list, Photo, Signature
34 Bid vs actual per cost code, real time Built live ray/bidactual: Bid vs Actual / 13 open jobs you bid · budget by cost code vs what has been spent; <h3>Cost codes — budget vs spent</h3>
35 Certs with several expiry warnings Built live, full_tickets.png Tickets in date 45 · Expiring 5 (3 inside 30 days) · Expired 2 (stop these men); rows show Expires within 30 days · 11 days, Expires in 60 days · 44 days
36 T&M and change orders on a job Part built grep -c 'change ?order' portal/*.js 41 — change orders are on the job drill-in; there is no T&M day/rate mechanism
37 Audit every safety form across all jobs for a month Built grep -n 'Safety log — every talk and form filed' portal/app-notify.js <h3>${icon("file")} Safety log — every talk and form filed</h3> and Every safety form filed
38 Deploy a message to the whole crew by text or email Out on the owner's rail (RULE #1 — nothing sends) + not built probe 38 hits=0. Nothing in the portal sends; a broadcast tool would have to be a draft-only tool and does not exist
39 Monthly incidents chart, 12 months Not built grep -ciE 'chart|sparkline|monthly incident' portal/app-ops.js No incident chart; the Safety page is tiles + tables (ali_13_safety.png)
40 Safety tiles 30 days vs 12 months Part built live, ali_13_safety.png Open actions 3 (0 overdue) · Incidents 3 (1 injuries) · Inspections 3 (1 with deficiencies) · Closed actions 2 — counts, but no 30-day/12-month split
41 Injuries by body part Not built probe 40 hits=0
42 Safety filters by project / type / office / period Part built grep -c withTools portal/app*.js 34 — every table has search + filters, but the Safety page has no office or period filter
43 Incident wizard, 11 steps, % complete Part built live, ali_13_safety.png One form: Report an incident / Near miss, stop-work or injury. Add the fix as a corrective action. with Type, Date, Site, What happened, Immediate action taken, Fix, Owner, Due. Types: near-miss, stop-work, injury, property-damage, no-access. No multi-step claim, no % complete
44 Incident reports needing review queue Not built probe 42 hits=0
45 Corrective actions assigned, days since assigned Built live, ali_13_safety.png Corrective actions / Stays here until someone closes it. Overdue goes red. — ACT-02 · from INC-01 · owner Sam Reyes · due 2026-08-28 · 6 d left [Close], plus a Closed list with Reopen
46 OSHA Reporting 300 / 300A / 301 Not built probe 43 grep -ciE 'OSHA' hits=0. (Makki is Alberta — the equivalent is OHS / WCB, and neither exists either)
47 OSHA csv / xlsx downloads Not built as 46 hits=0
48 OSHA case classification and illness type Not built as 46 hits=0
49 Build your own inspections Part built live, full_forms.png The form builder can build an inspection form (Daily Site Inspection ships with the app · 8 fields), and Safety logs an inspection with kind + result; there is no inspection engine with OK/NO/N/A per line and a photo per line
50 Equipment dashboard — open orders Not built probe 46 hits=0
51 Equipment nearing maintenance, trigger miles/hrs Not built grep -ciE 'nearing maintenance|trigger (miles|hours)|odometer' portal/*.js 0
52 Equipment corrective actions Not built grep -c 'corrective' portal/app-yard.js 0 — corrective actions exist only on Safety, not on assets
53 Equipment inspections log + next inspections due Part built grep -n 'Inspections and repair history' portal/app-yard.js <h3>${icon("cert")} Inspections and repair history</h3> — a history, no "next due" schedule
54 Rentals — days to renewal, days on site Part built live ali/equipment: Equipment & Rentals / 12 assets · 3 on rent · a code on every one; kpi("Rentals overdue") exists; no renewal-date countdown
55 Top 10 project inventory costs Not built probe 48 hits=0
56 Map of where your vehicles and equipment are Not built probe 49 hits=0. The map shows job sites and crew movement, not assets
57 CRM — reach outs, job walks, proposals due Not built grep -ciE 'reach ?out' portal/*.js → 0; grep -ciE 'job ?walk' portal/*.js → 2 (prose only) 0 / prose only
58 Leads by salesperson Not built grep -ciE 'by salesperson|leads by' portal/*.js 0
59 CRM value tiles (pending / awarded / loss / lead value) Part built live ali/pipeline: Sales Pipeline / Quotes sent vs won · fiscal 2026; ray/winrate: My Win Rate / 261 won of 698 quotes · 37.4% all time; ray/quotes: 698 quotes you wrote · $35.29M quoted. Quote-shaped, not lead-shaped
60 Leads list with status pills and pipeline value Part built live Pipeline is quotes by stage, not a lead record with due dates, sources and reach-outs
61 CRM Leads / Clients / Calendar tabs Not built probe 52 grep -ciE 'clients|calendar' Hits are the word "client" in job rows; no Clients page, no CRM calendar
62 Connect to QuickBooks (the owner asked for it by name) Part built live, ali_10_quickbooks.png ali/quickbooks: QuickBooks Online / the owner's accounting system · not connected; the page states Not connected — needs the owner's QuickBooks access … Until then every money figure in the portal is demo data, lists What would sync per entity with Waiting, and Nothing here calls QuickBooks — this is the settings page. Blocked on the owner's login, i.e. the mock-data rail (#7)
63 QuickBooks pulls employees across Not built as 62 Last sync: never
64 CSV / file imports Built grep -c 'Import|parseCsv' portal/app-import.js 16; app-import.js (23 KB) appends an import panel to PAGES.owner.quickbooks and PAGES.book.payments
65 Three dots + one big button on every page Part built live Every table has a consistent search/filter toolbar (withTools, 34 uses) and add panels; no ⋯ admin-customisation menu per page
66 Accountant given payroll only Built live, full_team.png Bookkeeper seat exists with Payroll hours as a switchable tab, currently off — PN Priya Nair BOOKKEEPER 4 of 5 tabs; and Hours only — rates and pay are never sent to this login
67 Each employee approves their own time by text Out on the owner's rail (RULE #1) probe 55 + grep -ciE 'SMS' portal/*.js Approval exists (Approved by … · date, Status Approved/Waiting) but nothing is sent: SMS → 2, both prose. The office approves; the man is not texted
68 Daily notification digest, ~28 data points Built grep -noE 'h3>\$\{icon\("[a-z]+"\)\} [A-Za-z][^<]{3,45}' portal/app-notify.js Digest · <date>, Today's digest, When it runs, Notices, Last incident, Every safety form filed, People, clients and logins; the digest covers certs, permits, stock, forms not closed, no daily filed, failed inspections, corrective actions due, attendance, change orders, low stock, no-access
69 Digest twice a day on a night shift Built grep -n 'When it runs' -A6 portal/app-notify.js Twice on a day with a night shift on the board, once otherwise.
70 Instant notices Built grep -n 'Notices' portal/app-notify.js Incident / near miss / failed inspection / no access / inventory rows render as notices
71 Notification email with your logo, chosen data points Out on the owner's rail (RULE #1) probe 58 hits=0. The digest renders in the app; no email is composed or sent
72 Cert-expiry notice linking to the cert Built live, full_overview.png + full_tickets.png The digest and the dashboard both carry the expiring list, each row opening that man
73 Permit-expiry notice Built live kpi("Permits expiring"), kpi("Permits expired"), kpi("No permit on file") on Project Book
74 "Who is not doing the paperwork correctly" Built grep -n 'No daily filed for|Not closed|Forms filed' portal/app-notify.js "No daily filed for ", "Not closed", "Forms filed"
75 Low stock / pending order notice Built grep -n 'Low stock' portal/app-notify.js "Low stock", "Inventory", "Materials"
76 Scheduling-conflict notice Built grep -n 'Booked' portal/app-notify.js "Booked on a job that is not open", "Booked outside the job's planned dates", "Booked on a site whose permit has lapsed", "Booked on a site with no permit on file"
77 Certs archived and kept Built live, full_tickets.png A renewal keeps the old ticket on file — nothing is ever deleted. and an Archive panel Replaced by a renewal, or deleted
78 Employees list with filters and add Built live, full_team.png + full_tickets.png Team / 5 people / Role: All …; Tickets page lists 14 men with a ticket filter
79 Employees ⋯ menu (8 tools) Part built live Skills exist (<h3>Record a skill on a man</h3>, <h3>Sites that demand a skill</h3>); Positions/Union skill levels/Prevailing wage/Role profiles/bulk QR do not
80 A unique QR per employee, Download PDF Built grep -n 'The code on .* hard hat' portal/app.js <h3>${icon("hat")} The code on ${own?"your":"the"} hard hat</h3>; qr.js is an in-house offline QR encoder (byte mode, ECC M, v1–10) — no external service
81 Hard-hat scan → live certs, no login Built live (no login) GET /app/?hat=MK-W07 returned Ivy Salcedo | Abatement Tech · Crew C | MK-W07 | All tickets in date | TICKETS HELD | Asbestos Worker … exp 2028-04-03 Valid | Confined Space Entry … | Respirator Fit Test … | WHMIS 2015 … — screenshot scan_MK-W07.png
82 Scan page shows status / expiry / days left / verdict Built same Verdict line is computed: bad ? "N EXPIRED tickets — do not let him start" : soon ? "All in date · N expiring soon" : "All tickets in date"
83 Inspector cannot see what he shouldn't Built live This page shows tickets only. No pay, no phone number, no job costs — the scan cannot reach them. (R.visiblePeople("inspector",…) projection)
84 Cert name opens the certificate file itself Not built grep -ciE 'open-certificate|certUrl|cert file' portal/*.js 0 — the portal holds ticket numbers and issuers, not scans of the paper
85 Employee emergency details Built grep -oE 'line\("[^"]+"' portal/app-*.js "Hospital", "Hospital address", "Hospital phone", "Muster point", "First aider on site", "Site contact", "Nearest cross street", "Call", "Second call"; plus <h3>${esc(e.name)} — who do we call</h3>
86 Training system — deploy to company / divisions Not built probe 72 hits=0
87 Training to the phone with a PIN, any language Not built probe 73 hits=0
88 Trainings Needed page with deploy + quiz status Not built probe 76 hits=0
89 The training itself (video + course) Not built as 86 hits=0
90 ~600 GotSafety videos at ~$4/employee/month Not built probe 74 hits=0
91 Quiz Not built probe 75 grep -ciE 'quiz|exam' 0
92 Pass → certificate with your logo, tracked Not built as 86 hits=0. The portal has a Certificate pack (<h3>Certificate pack · …</h3>), which is a pack of tickets held, not an issued training certificate
93 Employee module — number, cell, cost code, office Part built grep -oE '\["(name|trade|crew|phone|start)","[^"]+"\]' portal/roles.js ["name","Name"] ["trade","Trade"] ["crew","Crew"] ["phone","Phone"] ["start","Start date"]. No employee number, no office/division, no default cost code
94 Skills per man, and filter a site by skill Built grep -n 'Sites that demand' portal/app-people.js <h3>${icon("pin")} Sites that demand a skill</h3>, <h3>${icon("shield")} Sites that demand an orientation</h3>, <h3>${icon("plus")} Record a skill on a man</h3>, kpi("Skills held")
95 Training matrix — who has what Built live, full_tickets.png <h3>What the crew must hold</h3>, <h3>Tickets this job needed</h3>, <h3>Crew tickets on this job</h3>, <h3>What you hold</h3>
96 Write-ups / disciplinary Not built probe 80 hits=2, both the word "discipline" in prose
97 Documents against an employee Part built grep -n 'Documents on file' portal/app*.js <h3>Documents on file</h3> exists on the job, not on the man
98 Employee PIN flags Not built grep -nE '[^a-z]PIN[^a-zA-Z]' portal/app*.js The only PINs are the supervisor's JHA signature (row 157); no per-employee PIN record, no "cannot pin for others", no SMS PIN
99 Union name / code, company employee ID Not built grep -ciE 'union' portal/*.js 0
100 Pay rate / SSN / payroll group on the record Part built grep -n 'Rate/h' portal/app-ops.js Rates exist and are owner-only (Rate/h, Pay columns appear only when owner); no SIN/SSN, no payroll group. Withholding pay data from other seats is the owner's rule #4, not a gap
101 Super Admin / Can Login / Sales Person flags Part built live, full_team.png Role per person (Owner/Bookkeeper/Estimator/Site lead/Crew) plus per-tab switches; no independent capability flags
102 Employee drawer with 9 sections Part built live Opening a man gives his tickets, crew, skills and emergency contacts; not incidents, roles, training, documents, form tagging, linked assets
103 Add a certificate with a photo of the cert Part built live, full_tickets.png File a ticket / Add a new ticket / Renew one he holds with MAN, TICKET, ISSUED BY, number and dates. No photo upload of the paper cert
104 Cert status filter All / Active / Renew / Archived Built live, full_tickets.png Ticket: All / Asbestos Worker / Confined Space Entry / … and an Archive panel; states are Valid / Expiring 30 / Expiring 60 / Expired / archived
105 Renew — new active, old archived forever Built live, full_tickets.png Renew one he holds … A renewal keeps the old ticket on file — nothing is ever deleted.; <h3>Archive</h3> Replaced by a renewal, or deleted
106 PDF pack of certificates Built grep -n 'Certificate pack' portal/app-people.js <h3>Certificate pack · ${esc(pk.title)}</h3>, with kpi("Men in the pack"), kpi("Included"), kpi("Not included")
107 Certificates filter panel (6 fields) Part built live Ticket-type filter and a man search; no SS-last-4, union code or labor-type filter
108 Inventory list with location, category, min/max, on hand Part built live ali/inventory: Inventory / Disposal consumables on hand (bags, coveralls), <h3>Stock on hand</h3>, <h3>Asset list</h3>. No min/max reorder levels (grep -ciE 'min.?max|reorder' portal/*.js → 0), no next-inspection-due column
109 Asset QR → inspect without logging in Part built live ali/equipment: … a code on every one — every asset has a code; the code does not open a no-login inspection form
110 Asset scan shows an SDS Not built grep -n 'SDS' portal/app-ops2.js <h3>${icon("file")} Safety documents — JHA, SWP, toolbox talks, SDS</h3> … <b>Placeholders.</b> The titles are typical demolition / abatement documents — titles only, no files
111 Item record — asset tag, class, yard/aisle, quick transfer Part built live Assets carry a code, a status and a location on a job; no yard/aisle/bin, no asset tag, no quick transfer
112 Item cost / rates incl. T&M and rate evolution Not built grep -ciE 'hourly rate|daily rate|weekly rate|T&M cost' portal/*.js 0
113 Equipment inspections, red = fail, warehouse manager notified Part built grep -n 'Inspections and repair history' portal/app-yard.js + Safety insKind Equipment inspection is one of the three inspection kinds on Safety; failures show as Deficiencies; nobody is notified by message (RULE #1)
114 Build your own equipment inspections Part built live, full_forms.png Equipment Pre-Use Check ships with the app, and the builder can make more; the questions are not driven by equipment type
115 Inspection form with odometer, hours, OK/NO/N/A per line Not built grep -ciE 'odometer|equipment hours|OK / NO / N/A' portal/*.js 0
116 Maintenance and repair history; every time ordered to a project Built grep -n 'Inspections and repair history|Out of the yard, on jobs' portal/app-yard.js <h3>${icon("cert")} Inspections and repair history</h3>, <h3>${icon("box")} Out of the yard, on jobs</h3>, with kpi("Ordered"), kpi("Out to site"), kpi("Came back"), kpi("Consumed")
117 Loadout list Built grep -n 'A LOADOUT LIST' portal/app-yard.js A LOADOUT LIST — what a job needs, out of the yard and back (66 references)
118 Warehouse request form with approval and returns Part built live Ordered / out to site / came back / consumed are tracked; there is no request → approve → fulfil form with a verified signature
119 RAPID QR to add items to a request Not built probe 95 hits=0
120 Fulfilled stock cost-coded to the project Built live, sam/materials + kpi("Consumed") Materials / Shared disposal stock — bags & coveralls used on site; consumption lands against the job
121 Project Inventory Report Part built live The yard page shows ordered/returned/consumed per job; there is no exportable report
122 Reporting Center, 18 reports Not built probe 97 grep -ciE 'report(s)? cent' 0. Makki exports CSV from Payroll only
123 Create a project from QuickBooks or a button Part built live Jobs exist and can be opened; app-import.js can bring rows in; there is no "new project" button on the owner seat
124 Project header — address, contact, supervisor, PM, client, scope Built live, full_projects.png Project Book / 17 jobs with a book · permits, required tickets, crew readiness; <h3>Scope of work</h3>, <h3>Site contact</h3>-family fields
125 Project gauges — schedule, mandays, waste loads Part built live, full_overview.png Bid-vs-spent rings per job (79% / 72% / …) and kpi("Loads"), kpi("Tonnes"), kpi("Recycled loads"), kpi("Hazmat loads"). No manday gauge, no days-left gauge
126 Project Stats panel (7 counters) Part built live kpi("Men on site"), kpi("Incidents"), kpi("Change orders"), kpi("Forms filed"), kpi("Photos"); no disciplinary actions, no work delays, no reportable-incidents split
127 Production tracking — budgeted / actual / projected hours Part built live kpi("Hours"), kpi("Hours today"), kpi("Budget"), kpi("Spent so far"), kpi("Variance") — dollars and hours, no projected-hours forecast
128 Project Book with 23 sections Part built live, full_projects.png Makki's book carries scope, permits, required tickets, crew readiness, documents, photos, waste, per diem, emergency info, cost codes, closeout — roughly 11 of Fieldflo's 23. No lien, designer, consultant, air-monitoring specialist, insurance-certificate, payroll-information or building-information sections
129 GEO fencing / GEO tagging per job Not built probe 100 grep -ciE 'geo.?fenc|geo.?tag' 0
130 Project settings (multiple timesheets, phases, OT trigger, timezone) Not built probe 101 + grep -ciE 'timezone|time zone' portal/*.js Phases/multiple-timesheet/OT-trigger/timezone settings: 0
131 Permits with expiry warnings, visible in the field Built live, full_projects.png <h3>Permits</h3>, kpi("Permits expiring"), kpi("Permits expired"), kpi("No permit on file"); the notifier warns on them
132 Per diem Built grep -oE '"Per diem[^"]*"' portal/app*.js "Per diem", "Per diem applies on this job", kpi("Per diem")
133 Mandatory certs per project, checked at scheduling and timesheet Built live, full_projects.png Project Book / 17 jobs with a book · permits, required tickets, crew readiness; <h3>Tickets this job needed</h3>, <h3>What the crew must hold</h3>, kpi("Men blocked"), and the board runs the same check
134 Cost codes per project in your own naming Built live <h3>Cost codes — budget vs spent</h3>, kpi("Codes over budget"); 109 cost-code references
135 Prevailing wage Not built probe 106 hits=0
136 Building information / owner information Not built probe 107 hits=1 (prose)
137 Waste reporting — haulers, materials, trucks, landfills Part built grep -n 'Waste &amp; landfill tickets|Add a load' portal/app-job.js <h3>Waste &amp; landfill tickets</h3>, Add a load, kpi("Waste tickets"), kpi("Tip fees"), kpi("Tonnes"), kpi("Loads"), kpi("Recycled loads"), kpi("Hazmat loads"). Loads and tickets yes; no hauler / truck-type / landfill registers
138 Custom tabs and project templates Part built grep -n 'V74. TEMPLATES' portal/app-job.js Templates yes (row 32); no custom tabs
139 Insurance, lien, billing details Not built probe 110 → grep -ciE 'lien|insurance certificate' 0
140 Emergency contact + nearest hospital onto the daily automatically Built grep -oE 'line\("[^"]+"' portal/app*.js + grep -n 'If something happens today' portal/app-job.js <h3>${icon("alert")} If something happens today</h3> with Hospital, Hospital address, Hospital phone, Muster point, First aider on site, Call, Second call
141 Job cost estimates — contract value, change orders, % complete Part built live ali/jobs: Jobs & P&L / Every won job with full cost breakdown; <h3>Cost breakdown</h3>, <h3>Change orders</h3>, kpi("Job total"), kpi("Spent"), kpi("Variance"). No % complete with a change log
142 Labor estimates by cost code and position Built live <h3>Cost codes — budget vs spent</h3>, <h3>Hours per man</h3>, <h3>Hours per job</h3>, kpi("Labour cost")
143 Inventory estimates by category Not built grep -ciE 'consumables estimate|inventory estimate' portal/*.js 0
144 Proposal builder Built live, ali_03_proposals.png ali/proposals: Proposals / 603 quotes this year · open a quote to build its proposal; <h3>Proposal ${esc(p.ref)}</h3>, <h3>Scope</h3>, <h3>Price</h3>, <h3>Terms</h3>, <h3>Included</h3>, <h3>Not included</h3>
145 Import an estimate from Excel Part built wc -c portal/app-import.js 23021 — CSV import exists; not an estimate sheet
146 Per-project document system with folders and roles Part built live <h3>Documents on file</h3> and the safety-document library; no folders, no per-folder role, no upload
147 Closeout report Built grep -n 'Closeout report' portal/app-ops2.js <h3>Closeout report · ${esc(j._jobId)}</h3>, kpi("Closed off"), 51 references
148 HQ dashboard across branches Not built probe 117 hits=0 — Makki is one office
149 Field sees only Projects on a phone Built live dale/today: Today / Dale Ferris · Abatement Labourer — Crew A; the crew seat has 5 tabs and no money at all
150 One Start Day button creates the day's dailies Built live, sam_11_startday.png sam/startday: Start Day / One button. The day's paperwork appears, filled in as far as the office already knows. — it opens the timesheet with a cost code per man, the pre-job safety talk, the site inspection
151 Same as previous day / pull from scheduling Part built live + probe 120 Start Day pre-fills from what the office knows (the schedule); there is no explicit "same as previous day"
152 Cert warning when adding a man; office emailed if overridden Part built + rail live kpi("Men blocked") and An expired ticket blocks that man from a crew that needs it — the same check the schedule board runs. The block is there; the email is out on RULE #1
153 Default cost code per man Built live the crew's timesheet with a cost code per man
154 SMS asking each labourer for their location Out on the owner's rail (RULE #1) + geo not built probe 123, 129 Nothing sends; no geo capture either
155 Timesheet timed to the second, watched live Part built live Hours per man per day, and the dashboard flips a job to "On site" on Start Day; not second-by-second
156 JHA / pre-job safety meeting Built grep -noE 'h3>[A-Z][^<]{3,50}' portal/app-day.js JHA / safety talk — supervisor signature, Site inspection — …, Goals &amp; meeting log, Timesheet, End of day — who left when, and the breaks
157 Supervisor signs with a PIN; auditors too Part built grep -n 'V94' portal/app-day.js V94 The supervisor signs the JHA / safety talk with a PIN (was: a bare timestamp) · PIN verified · ${d.sign.date} · ${d.sign.men} men briefed · Supervisor signature · PIN ending ${d.sign.last} · <input id="jhaPin" class="pinbox" type="password" …>. Supervisor yes; no auditors (grep -ci auditor → 0)
158 Nearest hospital on the JHA Built as 140 Hospital, Hospital address, Hospital phone on the day's paperwork
159 ~40 hazards in 5 groups on the JHA Not built grep -ci 'hazard' portal/app-day.js The safety talk carries a topic and a briefing count, not a hazard checklist
160 Evacuation plan Not built probe 128 hits=0
161 Task steps / hazard / control / risk-rating library Not built probe 129 grep -ciE 'task step|risk rating' 0
162 Live weather on the JHA Not built probe 130 hits=1 — { id:"f1", label:"Weather and ground conditions", type:"text" }, a free-text field in a shipped form, not live weather
163 OSHA heat index Not built grep -ci 'heat index' portal/*.js 0
164 Every man verifies the safety meeting by SMS Out on the owner's rail (RULE #1) grep -ci 'SMS' portal/*.js 2, prose only. The supervisor's PIN records that N men were briefed; the men are not texted
165 Acknowledgement wording, add visitor, resend SMS Part built + rail as 157 PIN verified · … · N men briefed; no visitor, no resend
166 Inspections walked line by line with a photo per line Part built live, full_forms.png Daily Site Inspection ships with the app · 8 fields including a Photo field and a Signature field; photos are per form, not per line
167 A "no" becomes a corrective action, assigned and notified Part built + rail live, ali_13_safety.png Corrective actions are assigned with an owner and a due date and go red when overdue; they are raised by hand from the incident form, not automatically from a failed line, and nobody is notified by message
168 Dailies pre-built for abatement Built live, full_forms.png + forms.js Daily Site Inspection, Toolbox Talk, Equipment Pre-Use Check ship with the app
169 Talk into the daily, in any language Not built grep -ciE 'voice|dictate|speech' portal/*.js (excluding "invoice") 0. The earlier 71 hits were the substring in invoice
170 Daily field report — work done, what went right, goals Built grep -noE 'h3>[A-Z][^<]{3,50}' portal/app-day.js + grep -n 'Daily reports' Goals &amp; meeting log, <h3>Daily reports</h3>, and a notes field e.g. Containment up on floor 2, waiting on the bin swap, neighbour asked…
171 Incident on a daily notifies the office instantly Part built + rail grep -n 'Notices' portal/app-notify.js Every incident filed becomes a notice in the app the same moment (app-notify.js turns every row filed here into a notice); nothing leaves the device
172 Abatement procedures checklist on the daily Not built grep -ciE 'criticals|negative pressure|bag out|decon' portal/*.js 0
173 Cleaning verification, work areas, cloths used Not built grep -ciE 'cleaning verification|cleaning cloth' portal/*.js 0
174 Attach pictures to a daily Built live, full_forms.png kpi("Photos"), <h3>Photos (${c.photos.length})</h3>, <h3>${icon("eye")} Site photos — …</h3>, and a Photo field type in the builder (Take / choose photo, Retake / choose another)
175 Containment log — respirator, time in/out, signature Part built grep -n 'Containment' portal/app-ops.js Containment inspection is a selectable inspection kind, and containment appears in notes; there is no containment entry log with respirator and time in/out
176 Red until answered correctly Part built live Overdue corrective actions go red; expired tickets go red; forms are not colour-gated on completeness
177 End of day — who left, breaks, stop clock for all Built live, dale_01_endofday.png dale/endofday: End of Day / Dale Ferris · Sat 22 Aug; End of day — who left when, and the breaks
178 The man verifies his own day (time, breaks, were you injured) Part built live End of Day is the man's own screen on his own login; kpi("Told us something medical") is on the day. Fieldflo's version reaches a labourer who never logs in — Makki's needs his login
179 Forms bulk actions (translate / pdf / zip / send / close / delete) Part built + rail probe 142 hits=0 for the bulk menu. Individual forms can be filed and read; Send is out on RULE #1
180 Active / Closed / Deleted forms + Report Incident on the job Part built live, full_forms.png Templates / Submitted 5 tabs, and Safety carries Report an incident. No closed/deleted split
181 Submit a feature idea / what's new Not built probe 143 hits=0
182 Takeoff & estimating from drawings Not built probe 144 grep -ciE 'takeoff|auto.?detect' 0
183 Estimate templates and work-type settings Not built probe 145 hits=0
184 Job conditions (prevailing wage, phased, pre-1980 …) Not built probe 145 + 106 0
185 Takeoff flows into a proposal Not built as 182 0
186 Proposal editor — line items, markup, blocks, Web/PDF Part built live Makki's proposal is a generated document (Scope / Price / Terms / Included / Not included) from a quote, not a block editor with markup per line
187 Proposal totals incl. margin and profit, and Send Part built + rail live Margin and profit exist across the owner seat (Jobs & P&L, owner-only); the proposal itself is a draft — The owner sends (11. PROPOSALS — from a quote to a printable proposal. Draft — The owner sends.). Send is out on RULE #1
188 Proposals grouped by client with status and value Part built live ali/proposals: 603 quotes this year; grouped by quote, not by client
189 Weekly scheduling board, crew projected vs scheduled Part built live, ali_06_board.png ali/board: Schedule Board / Week of Mon 17 Aug · click a day to move a crew; sam/board: Crew Board / … click a day to move your crew. Crews move by day; there is no projected-vs-scheduled headcount per day
190 Projects panel colour-coded by staffing Not built live The board shows crews on days, not a project list coloured by fill
191 Days scheduled / scheduled hours per man Part built live Payroll gives hours per man per day; the board does not show a per-man weekly total
192 Send each employee their own schedule Out on the owner's rail (RULE #1) probe 148 Each man has a schedule page (dale/myschedule: My Schedule / Crew A · 198 sites, sam/schedule: My Schedule); nothing is sent to him
193 Gantt chart over four weeks Built live, ali_07_gantt.png ali/gantt: Timeline / 16 open jobs · Mon 22 Jun → Sat 26 Sep · read-only
194 4-week look ahead Part built live The Timeline spans ~14 weeks read-only; there is no 4-week look-ahead view
195 Closeout report at the end of a project Built as 147 <h3>Closeout report · ${esc(j._jobId)}</h3>
196 Payroll approval — hours per man, per job, cost coded Built live, ali_09_payroll.png ali/payroll: Payroll Approval / Week of Mon 17 Aug · 12 men · 404 h; <h3>Hours per man</h3>, <h3>Hours per job</h3>, <h3>Approve the week by cost code</h3>, kpi("Hours"), kpi("Over 32 h"), kpi("Labour cost")
197 Payroll filters (8) Part built live Week stepper (Previous / This week / Next) and a crew filter; no office, project-type, verify-status or approval-status filter
198 Send Verify SMS, verify status per man Out on the owner's rail (RULE #1) probe 152 hits=0
199 Approve all · Mark week approved · approved-by stamp Built live kpi("Status", appr?"Approved":"Waiting") and <b>Approved</b> by ${appr.by} · ${appr.at}
200 PM-by-PM approval chain with trailing history Not built probe 153 grep -ciE 'approval chain' 0 — one approval by the owner, not a chain
201 Payroll export for the accountant Built live + grep -n 'pCsv' portal/app-ops.js Export CSV button; the file is written makki-payroll-<date>-DEMO.csv with DEMO DATA - Makki Demolition payroll week of …, and Rates and pay included (owner export) vs Hours only — no rates in this login
202 Multiple offices / divisions Not built probe 155 → no office concept in roles.js Makki is one office; nothing to gate
203 Temp labour flag Not built probe 156 grep -ciE 'temp labo' 0
204 Roll Call Not built probe 157 grep -ciE 'roll ?call' 0
205 Export employees to CSV Not built grep -ciE 'export employees' portal/*.js 0 — CSV export exists on Payroll only
206 Bulk download of all QR codes Not built probe 67 hits=0 — one code at a time
207 A public marketing site with webinars and client logos NOT MEASURED curl -s -o /dev/null -w '%{http_code}' https://makki-home.pages.dev/ 200 — Makki has a home page; comparing marketing sites is not this grade

Part 3 — the gaps, ranked by how much of the demo they took up

Each line is a task, ready to paste into GO_LIVE.md. Ranked by minutes on screen and by how hard the owner reacted. Rows marked (rail) are the owner's and Omar's rule, not a missing feature — they are listed last, separately, because GO_LIVE has to decide them, not build them.

Not built — ranked

  1. Training system end to end — deploy a training to the company or a division, it lands on the man's phone in his language behind a PIN, he watches, takes a quiz, and passing issues a certificate with Makki's logo that is then tracked and warned on like any other ticket. ~2 minutes of the demo (14:30–16:00), the owner: "Perfect." — Fieldflo rows 86–92.
  2. Any language — a translate control that flips the whole portal, and a per-form globe, so a bilingual crew reads its own paperwork. Dan opened with it at 02:37 and showed the entire UI in Spanish; he came back to it four more times (15:00 training, 25:20 field view, 30:20 safety verification, 31:00 dailies). Nothing in the portal is translatable — Fieldflo rows 25, 26.
  3. Takeoff & estimating — upload the drawings, have them auto-read into tasks and scope, pick a work type and job conditions from a template, and push the result into a proposal. 34:00–35:20; the owner: "I'll check it out… it'd be cool to see." — Fieldflo rows 182–185.
  4. OSHA / OHS statutory reporting — the 300 log, the 300A summary, the 301 incident records, case classification and illness type, filtered by year and establishment, downloadable as csv and xlsx. 07:45. For Makki this is Alberta OHS and WCB, not OSHA — Fieldflo rows 46–48.
  5. The full incident claim — an 11-step wizard (injured employee, damaged property, damaged equipment, what happened, employee statement, witnesses, third party, investigation report, insurance) with a % complete and a "needs review" queue that ages. Makki files an incident in one form. 07:10 — Fieldflo rows 43, 44.
  6. Equipment maintenance and inspection engine — nearing-maintenance by trigger miles/km/hours, next inspections due, equipment corrective actions, an inspection form driven by equipment type with odometer, hours and OK/NO/N/A per line. 07:50 + 20:00 + 34:00, three separate visits — Fieldflo rows 51, 52, 53, 112, 115.
  7. A real CRM front end — reach-outs, job walks, proposals due, leads by salesperson, a lead record with source and due date, a Clients tab and a CRM calendar. 07:55–08:20, and the leads list alone showed 158 leads / $4.2m pipeline. Makki has a quote pipeline, not a lead pipeline — Fieldflo rows 57, 58, 60, 61.
  8. Task steps / hazard / control / risk rating library — the supervisor picks the task and the JHA fills its own hazards and controls; ~40 hazards in 5 groups on the review page. 29:00–30:00, and Dan called it "This is cool" — Fieldflo rows 159, 161.
  9. GEO fencing and GEO tagging per job — on or off per project, with a "Geo Location Data Missing" notice. Shown as a live badge on the timesheet header. 22:00 + 26:30 — Fieldflo row 129.
  10. Voice into the daily — the crew talks into the daily report instead of typing, in any language. Dan sold this as the reason the field adopts it at all ("they don't want to change… you just open it up, talk, take pictures, boom"). 31:00 — Fieldflo row 169.
  11. Live weather and heat index on the JHA — current and forecast temperature, wind, humidity, OSHA heat index, each with a "have you reviewed this with the crew" question. 29:20 — Fieldflo rows 162, 163.
  12. Warehouse request / fulfil loop — a request form with a verified requester, warehouse approval, delivery notes, returning items with approved quantities, and RAPID QR to add items by scanning. 20:30 — Fieldflo rows 118, 119.
  13. Reporting Center — 18 named exportable reports (asset, job costing, expense, per diem, T&M, change order, waste, warehouse, project inventory, CRM, incident, injury, inspection, equipment log, form). 09:00 + 21:00 — Fieldflo rows 121, 122.
  14. Admin section — form sequencer, export builder, email templates and groups, email log, imports, timesheet adjuster, portal admin. 21:00 — Fieldflo row 4.
  15. Asset QR that opens a no-login inspection or an SDS — the operator scans the machine and does the check without ever logging in. Makki puts a code on every asset but the code opens nothing. 19:30 — Fieldflo rows 109, 110.
  16. Equipment location map — where every vehicle, rental and piece of heavy equipment is, with rentals/heavy-equipment toggles and per-asset popups. Makki's map shows job sites, not assets. 07:50 — Fieldflo row 56.
  17. Injuries-by-body-part and the 12-month incident chart — a trend line and a body diagram over 30 days vs 12 months. 07:00 — Fieldflo rows 39, 41.
  18. Abatement procedure checklist on the daily — install criticals, negative pressure, construct decon, pre clean, cover fixed objects, containment, removal, bag out, final clean, clearance, tear down, demob; plus cleaning verification and cloths used. This is the most abatement-specific thing in the whole demo. 31:00 — Fieldflo rows 172, 173.
  19. Containment entry log — names pre-filled, respirator used, task before, time in / time out, typed signature. 31:40 — Fieldflo row 175.
  20. Employee record depth — employee number, office/division, default cost code, union name and code, payroll group, temp-labour flag, write-ups, documents on the man, linked assets, per-employee PIN flags. 08:40 + 15:51 + 17:00 — Fieldflo rows 93, 96–99, 102.
  21. Cert photo on file — upload a picture of the actual ticket so the cert name on the scan opens the paper. Makki holds numbers and issuers only. 17:30 + 13:50 — Fieldflo rows 84, 103.
  22. Roll Call — one click from the dashboard to who is on site right now. 03:45 — Fieldflo row 204.
  23. Project Book depth — lien information, project designer, consultant, air monitoring specialist, insurance certificate, payroll information, building and owner information, custom tabs; plus prevailing wage and project phases. 22:00–23:30 — Fieldflo rows 128, 135, 136, 139.
  24. Waste registers — haulers, material types, truck types, landfills as maintained lists behind the load entry. Makki records loads and tip fees but not the registers. 23:00 — Fieldflo row 137.
  25. Project document folders — named folders with a role per folder, shared/gallery/offline flags, add folder and upload. Makki lists documents; it does not hold them. 24:00 — Fieldflo row 146.
  26. Min/max reorder levels on inventory and the low-stock reorder trigger they drive. 19:01 — Fieldflo row 108.
  27. PM-by-PM payroll approval chain with a trailing history, so payroll cannot run until named people have signed. 38:40 — Fieldflo row 200.
  28. Dashboard stat tiles the owner will look for — days without injury, client count, user count, contracts-in-progress value. 06:45 — Fieldflo row 24.
  29. Auditors on the JHA — up to 10 extra people signing the safety meeting with their own PIN. 28:30 — Fieldflo row 157.
  30. Submit a feature idea / what's new — the in-product channel Dan used to prove they listen. 33:40 — Fieldflo row 181.
  31. Evacuation plan section on the JHA, pulled from the project details. 29:30 — Fieldflo row 160.
  32. HQ dashboard across branches / multiple offices — only matters when Makki runs more than one office; the owner said "we'll incorporate it across five companies that we have." 24:23 — Fieldflo rows 148, 202.
  33. Export employees to CSV and bulk download of all QR codes. 13:20 — Fieldflo rows 205, 206.
  34. Company page, Messages page, and the three-dots admin customisation on every list. 00:00 + 13:20 — Fieldflo rows 6, 8, 65.

Part built — ranked

  1. QuickBooks — The owner asked for it by name, unprompted, at 08:00: "Connect to QuickBooks." The portal has the settings page and the sync map; it has never called QuickBooks. This is the single loudest thing in the recording and it is blocked only on the owner's QuickBooks Online login. 08:00–12:38 — Fieldflo rows 62, 63.
  2. Dashboard tabs and widget set — Makki has Today's active projects, Nearing bid hours and Certificates expiring soon; it is missing the CRM / Safety / Equipment dashboard tabs, the New Projects widget, the T&M-change-orders queue and the Messages widget. 00:00–06:45 — Fieldflo rows 14, 19, 20, 21.
  3. Scheduling board — Makki moves crews by day; Fieldflo shows crew projected vs crew scheduled per day per project, colour-codes projects by whether they are filled, and totals scheduled hours per man. 35:20 — Fieldflo rows 189, 190, 191.
  4. Inspection engine — Makki can build an inspection form and log a result; Fieldflo walks it line by line with a photo per line and turns a "no" into an assigned corrective action automatically. 20:00 + 30:40 — Fieldflo rows 49, 114, 166, 167.
  5. Project gauges and stats — Makki has bid-vs-spent rings; Fieldflo adds mandays and waste-loads gauges, days-left, and a stats panel with disciplinary actions, work delays and reportable incidents. 21:30 — Fieldflo rows 125, 126, 127.
  6. Project-level settings — allow multiple timesheets, allow multiple PSI/JHA, phases, daily overtime trigger, per-project timezone, project-level form settings. 22:00 — Fieldflo row 130.
  7. Job cost estimate page — Makki has cost breakdown and change orders; Fieldflo adds contract value, a % complete with a change log, labour estimate rows and inventory estimates by category. 24:00 — Fieldflo rows 141, 143.
  8. Proposal editor — Makki generates a proposal document from a quote; Fieldflo edits line items with markup %, drags in text/image/PDF/signature blocks, toggles Web and PDF, sets an expiration and shows bid total / margin / profit live. 35:10 — Fieldflo rows 186, 187, 188.
  9. Certificates page depth — cert photo upload, a six-field filter panel (SS last 4, union code, labor type), and the cert-name link to the scanned paper. 17:30 — Fieldflo rows 103, 107.
  10. Forms lifecycle — Active / Closed / Deleted tabs, download .pdf and .zip, and the red-until-right rule on every form. 25:20 — Fieldflo rows 176, 179, 180.
  11. End of day for a man who never logs in — Makki's End of Day is a login; Fieldflo's reaches the labourer on his phone with no account at all. 32:00 — Fieldflo rows 30, 178.
  12. Timesheet head starts — "same as previous day" and "pull from scheduling" as explicit buttons. 25:57 — Fieldflo row 151.
  13. Inventory depth — next-inspection-due column, yard/aisle location, asset tag, asset class, quick transfer, item rates (hourly/daily/weekly/monthly) and T&M cost. 19:30–20:00 — Fieldflo rows 108, 111, 112.
  14. 4-week look ahead as its own view alongside the Timeline. 37:20 — Fieldflo row 194.
  15. Payroll filters — office, project type, verify status, approval status. 38:20 — Fieldflo row 197.
  16. Role Profiles as saved, reusable permission presets rather than five fixed roles. 08:30 — Fieldflo row 29.
  17. Project Inventory Report as an exportable report rather than an on-screen panel. 21:00 — Fieldflo row 121.

Out on the owner's rail — decide, do not build

These are the only things Fieldflo does that Makki deliberately does not. Every one is RULE #1: nothing sends, publishes or contacts anyone without Omar's explicit OK, except row 62 which is the mock-data rail (#7).

The thing to say to Omar about the rail: eleven of these twelve are the same decision, not eleven decisions. Fieldflo's product is an outbound messaging machine — SMS to verify time, SMS to verify the safety meeting, SMS for the schedule, email for the digest, email for the cert warning, Send on the proposal. The owner will feel that absence before he feels any of the 34 unbuilt features, because it is what makes Fieldflo work without anyone logging in. If Omar wants parity, the question is one question: does the Makki hive get an outbound channel, and who approves each send?


Part 4 — what the three earlier analyses missed, got wrong, and what has closed since

Opened only after Parts 1–3 were written and saved: profile/Fieldflo_Call_Gap_Analysis_2026-09-20.md (169 lines), profile/Fieldflo_Video_Frames_2026-09-20.md (165 lines), profile/Master_List_2026-09-16.md Part 2 (141 tasks). Nothing in Parts 1–3 was changed after reading them.

4a. Fieldflo_Video_Frames_2026-09-20.md — 49 frames

It is accurate. I read 178 frames against its 49 and found nothing it describes that my frames contradict. Its three headline judgements are right and I reached each of them independently before opening it: the multi-language claim is a Google Translate widget, not a Fieldflo language pack; the product is written to US rules (AHERA, OSHA, Maryland and Pennsylvania county skills — nothing Alberta anywhere); and there is no phone in the whole 43 minutes, only desktop Chrome plus outbound SMS. Its closing observation — no invoice, no payment, no AR, no holdback and no QuickBooks screen in 43 minutes — is the single most useful line in any of the three files, and my 178 frames agree with it.

What its 49 frames did not reach. One frame every ~53 s, chosen by contact sheet, is a sampling method; a 20-second grid plus transcript-driven cuts reaches ten screens it missed:

  1. The training quiz itself — /safety-exam-quiz/2172 (f_1540), five multiple-choice asbestos questions with Back to Training / DONE. Its §B row asserts "an embedded video and a quiz" on Dan's word at @15:31; the quiz is not in any of its 49 frames. The claim turns out true — it was just unevidenced when written.
  2. The Trainings Needed page — /public/employee/trainings-needed/1563 (f_1500): thirteen trainings with Deploy Status (Deployed–Email / Deployed–SMS / Enrolled), Quiz Status and a "Go to training" link. This is Fieldflo's third no-login public page and the frames doc records only one (1410).
  3. The scanned certificate opening from the scan page — /company-employee/open-certificate/employee_1563_roni-lead-cert…pdf (f_1400), a photographed Weecycle Environmental lead certificate. The doc stops at the cert list.
  4. Live weather and the OSHA heat index on the JHA (f_2920) — Current 85F / 6.91mph SW / 56% humidity, Forecast 63–90F, Heat Index 88 current and 98 forecast, each with a "have you reviewed this with the crew" question. Its 2815 row lists "Weather Questions" as a section name and never opens it. This is a real Fieldflo capability that no earlier file records.
  5. The employee's own "VERIFY YOUR WORKING DAY" modal (f_3200) — time and positions correct, the break attestation "according to local, state and federal regulations", "Were you injured?" with "Once you hit submit you cannot reverse an injury", then a PIN. And the supervisor's "STOP CLOCK FOR ALL" modal (f_3140) with meal and 2nd-meal start/end.
  6. The notification email as delivered (f_1200) — the actual Gmail digest, ~60 rows of employee / cert name / expiry / View Cert. The doc has the settings page (1050) but never the message.
  7. The equipment location map (f_0735, f_0740) — "Where are your vehicles, equipment and heavy equipment", Rentals and Heavy Equipment toggles, Map/Satellite, clustered pins, per-asset popups ("Falcons Demolition / 1 AMD Drive Northwest / Skid Steer", "Oakland Coliseum Demolition / Dump Truck / Equipment Trailer"). Its 0727 row lists the equipment widgets but not this map.
  8. The CRM leads list populated (f_3440) — 158 leads · $4.2m active pipeline, ten named leads with client, status pill and value. Its 0745 is the CRM dashboard only.
  9. Project Document Management (f_2400) — the folder tree itself: Air Monitoring, Company Documents, Containment Entry Logs, Contract Documents, Form Images, Inspection Checks, Manifests, Permit & Modification, Permits/Notifications, Pictures, Plans and Specs, with a Role column per folder.
  10. The JHA signature block wording (f_2930) — the acknowledgement paragraph (including the COVID clause), "Add Visitor | Add Employee", an SMS-resend control and per-worker SMS SENT chips.

Two small corrections. Its 2600 row calls the per-form icons "translate, email, print and delete"; the bulk ⋯ menu I read at f_2520 is Translate to English · Download Forms .pdf · Download Forms .zip · Send Forms · Close Forms · Delete Forms — "print" is a PDF download. And it says the Reporting Center has 19 reports while the permission sheet at f_0900 names 18; both are right, from different screens (the Reporting Center tiles add Employee Timesheets, Production Tracking and Project Billing and drop Employee Sharing). Neither changes anything.

4b. Fieldflo_Call_Gap_Analysis_2026-09-20.md — six claims that are wrong today

Its rule was "every 'not built' claim was confirmed by searching the portal source". Measured against the portal as it stands today, six rows do not hold:

Its claim Measured today
"Form builder — Zero code in any portal file. No form designer, no section list, no field palette." Wrong — closed. Built 2026-09-23, published 09-24 (vault/DONE.md). Live now on three seats: ali/forms, sam/forms, dale/forms. Form templates / 3 on file · 3 ship with the app · build your own below, with New template, Add a field, Save template and field types Text / Yes-No / Number / Choice list / Photo / Signature
"Skills matrix / filter-by-skill dispatch — People records have trade and crew. No skills checklist." Wrong. app-people.js: <h3>Record a skill on a man</h3>, <h3>Sites that demand a skill</h3>, <h3>Sites that demand an orientation</h3>, kpi("Skills held")
"Per-diem tracking — Not in the portal." Wrong on the day it was written. "Per diem", "Per diem applies on this job", kpi("Per diem"). The Master List's own V68 was marked CLOSED 2026-09-20 — the same date. The two 09-20 files contradict each other
"Waste manifest / waste reporting — no waste-load form, no load-out tally, no manifest in any portal file." Wrong. <h3>Waste &amp; landfill tickets</h3>, Add a load, kpi("Waste tickets"), kpi("Tip fees"), kpi("Tonnes"), kpi("Loads"), kpi("Recycled loads"), kpi("Hazmat loads"). The hauler / truck-type / landfill registers are still missing, so this is Part built, not Not built
"GPS clock-in … app-ops.js shows Geo Fencing and Geo Tagging UI fields on the timesheet but their values are decorative demo flags." Wrong, and the worst error in the three files. grep -ciE 'geo.?fenc|geo.?tag' portal/*.js → 0. There is no Geo Fencing or Geo Tagging field anywhere in the Makki portal. Those two status dots are on Fieldflo's timesheet header (my f_2630). A competitor's UI was written into our source description
"Equipment with QR per asset, scan-to-inspect without login" listed under Built Overstated. Every asset carries a code (a code on every one), but no code opens a no-login inspection. The only no-login page in the portal is ?hat= for a person, which I proved live. Part built

Two smaller ones: it files the hard-hat scan under app-people.js / certs.js — it is app.js:1589, function inspectorView(code) (right conclusion, wrong file). And its §4-C says the owner's SMS failure "was present across the whole second half of the call, not just in scheduling", citing @27:47. At @27:47 Dan only says a text is coming; the owner's complaint lands at @35:48 and @36:24. The pervasiveness is an inference, not something the owner said — and the competitive point stands without it.

What it got right that still matters. the owner is in procurement, not research ("they have approved to spend money"). The real pain is adoption, not features ("some people were using it, some people weren't, everything was out of whack"). Their SMS broke live in front of him and that is the clearest opening in 43 minutes. The hard-hat QR was the "wow" and Makki already has it — I confirmed it live today on a no-login URL. And @32:09, the owner asked out loud for an orientation video for his managers and nobody has offered him one. That ask is not a portal capability, so it does not appear in my Part 3; it should not be lost.

4c. Master_List_2026-09-16.md Part 2 — 141 tasks vs 207

It under-counts the video by about a third. It reads 141 tasks; I read 207 off 178 frames plus the full transcript. The 66-row difference is almost entirely detail a transcript cannot carry, because Dan narrated in generalities while the screen showed specifics: the OSHA 300/301 tabs with their csv and xlsx downloads and case classifications; the equipment nearing-maintenance trigger columns; the equipment and rental location map; the CRM lead record and its nine money tiles; the live weather and heat index; the notification email as delivered; the Trainings Needed page; the quiz; the JHA's five hazard groups; the proposal's margin / profit / Send; the payroll SMS-sent and verified columns. A transcript-led list systematically under-counts a screen-share.

Its page count is now one short in three places. Part 4 reads "42 pages — Owner 15 · Bookkeeper 5 · Estimator 5 · Site lead 10 · Crew 4". Driven live today the portal gives Owner 16 · Bookkeeper 5 (4 on by default) · Estimator 5 · Site lead 11 · Crew 5, because Forms was added to the owner, the site lead and the crew on 2026-09-23. The total is still 42 only because the split moved.

Five of its open holes have closed since, verified live by me today rather than taken on any file's word:

And two more that no earlier file records, both since 09-20: the Form Builder (09-23, published 09-24) and tickets Edit / Delete (published 09-26, cache v25-ticketedit) — live today as To correct or delete one, open the man and use Edit or Delete on the ticket.

Still open, exactly as it says: V128/V32/V33 QuickBooks — The owner's first unprompted words on the call and still only a settings page. V104/V106/V131 the abatement paperwork — the containment log and the asbestos lines on the daily, which the owner flagged himself at @4:26 before Dan showed anything. V96 the JHA task library. V4/V136–V138 the labourer who never logs in. V130 the manager orientation video.

Its §3b is the best thing in the three files and I confirm it independently. Fieldflo showed no invoice, no payment, no accounts receivable and no holdback in 43 minutes. Makki has Collections & AR, Outstanding, To Invoice, Payments and a nightly Collector that drafts invoices. Measured live today: priya/outstanding: Outstanding Receivables / 75 invoices awaiting payment · $1.43M owed and priya/toinvoice: To Invoice / 18 finished jobs not yet billed · $561.8K. That is a whole axis Fieldflo does not have, and it should be said to the owner out loud rather than left in a file.

4d. One thing all three missed

None of the three names the shape of the difference, which 178 frames make obvious: Fieldflo is an outbound messaging machine wearing a portal. SMS to verify time, SMS to verify the safety meeting, SMS for the schedule, SMS for the location, email for the digest, email for the cert warning, email when a man is added without a ticket, Send on the proposal. Eleven of the twelve rail rows in Part 3 are that same one decision. Makki's portal is the opposite shape: everyone logs in, everything is gated at the field level, and nothing leaves the device. That is the owner's and Omar's rule, and it is defensible — but it is one decision, not eleven, and it is the first thing the owner will feel.


Fieldflo capabilities 207 — Built 68 / Part built 66 / Not built 65 / Out on rail 7 / NOT MEASURED 1 — 2026-09-26T21:37:26Z