Every piece, in the order the work moves: lead in, estimate, accepted job, work orders, materials, the field, the money, project cost, the book. One screen per module so you can walk it with the team, one at a time.
37modules
10on your list
27found for you
9parts
cover
How to walk it. Use next ▶ or press → on a keyboard to go one module at a time;
the address bar carries the module (#m14) so you can send someone straight to one.
A dot means the module was not on your list — it is something you built that
didn't come up when you named the pieces, so those are the ones worth a look first.
Under every module is the actual thing — the real page, embedded live, or the real
document. Nothing here is a screenshot, so nothing here can be out of date. Scroll inside a box,
or press open it full.
These are the real documents from one job — 105 East 37th St. The same four types exist for every job.
Scroll inside a box to read it, or open it full.
The estimate — what the customer agrees to — Estimate #1426open the estimate ↗The work order — what the crew gets — WO for Valerio Team (no money on it)open the work order ↗The bill — what the crew is owed — Bill 523, Valerio Teamopen the bill ↗The invoice — what the customer pays — Invoice #0007, $8,756.00open the invoice ↗
Part 1 · Lead in — the front door
01
Lead intake — ClickUp lead pipelines
on your list
ReplacedLeads on paper, in texts, in someone's head.
NowEvery lead lands in a ClickUp pipeline — Tidewater (THI) and 757 Coastal separately. The paid channels (website, Facebook/IG, Nextdoor, Yelp, Craigslist, Dialpad calls) and Jeff's leads, referrals and repeats all enter the same place, and it is the queue the whole sale runs on.
Where it livesClickUp — Lead Pipeline (THI) and Lead Pipeline (757 Coastal)
Who runs itJeff (sales) · Jorge
The actual thing
ClickUp opens with your login: Lead Pipeline (THI) and Lead Pipeline (757 Coastal).
source: system map lane 1 · ClickUp
Part 1 · Lead in — the front door
02
Dialpad — the office line
not on your list
ReplacedCalls nobody could look up afterwards.
NowCall logs and texts on the office line, pulled with the API. It is also how a work order reaches a subcontractor, and how we can prove what was said.
Where it livesDialpad account on the office line
Who runs itJorge · April
The actual thing
It runs on the phone system, not a page — the call log and the texts from the office line.
source: dialpad-api skill · contractor contacts
Part 1 · Lead in — the front door
03
Marketing + KPI digests
not on your list
ReplacedGuessing which ads brought work.
NowThe ads report themselves: a daily and weekly digest of spend and results, cost per lead by city, and a KPI digest for the period. Only paid channels count toward cost per lead — Jeff's leads and Jorge's own are deliberately excluded.
Where it livesDaily digest lands in Discord/Telegram
Who runs itJorge · Hermes
The actual thing
The digest arrives in Discord and Telegram as a message, so there is no page to open.
source: meta-ads-digest skill · kpi_digest.py
Part 2 · Estimate — Lane 1
04
Estimate intake — walkthrough to record
not on your list
ReplacedAn estimate started from whatever was remembered from the visit.
NowA walkthrough, a voice note or a transcript is filed against the job and becomes the record the estimate is built from — customer, scope, photos, what was actually said.
Where it livesThe job's Drive folder · the estimate channel
Who runs itJorge · Joyce · April
The actual thing
The record lives in the job's own Drive folder and its estimate channel, not on a page.
NowTwo things built together: a web estimate page the customer opens on their phone, and a matching quote in Invoice Ninja. The page follows the lane it was written in — a crawlspace estimate shows quantities and one grand total with no itemised prices; a rehab estimate shows the trade cards and the itemised estimate. Every price comes from web rates with its source.
The estimate page the customer opens — 105 Golden Sunset Lnopen it full ↗The quote behind it, exactly as it was issued — Estimate #1426open the document ↗
ReplacedTwo people describing the same service two ways.
NowOne legend and one set of cost codes decide what a service is, so the estimate, the work order, the bill and the cost sheet all count the same thing. A line item is not a service — cabinets are not countertops.
Where it livesLegend tab on the job workbook · the channel rules
Who runs itJoyce · April
The actual thing
The legend codes as they read on a scope sheet — 213 South Birdneck Rdopen it full ↗
source: service legend · cost codes
Part 2 · Estimate — Lane 1
07
Estimate view watcher
not on your list
ReplacedNot knowing whether the customer even opened it.
NowThe estimate pages are watched, so when a customer opens the link we can see it happened — follow-up stops being blind.
Where it liveswatch_estimate_views.py · estimate_views state
Who runs itJeff · April
The actual thing
Nothing to open — it is a watcher. It reports the moment a customer opens their estimate link.
source: estimate views state file
Part 2 · Estimate — Lane 1
08
Document guards — the format law, hourly
not on your list
ReplacedA document drifting out of the family it belongs to.
NowTwo guards run on a timer. Every Invoice Ninja document has to stay in its own family — an invoice is the twin of its estimate, word for word, with the estimate's own skin. Every crew and bill PDF has to obey the money law on the pinned shell. A drifting document is caught the same day.
Where it livesninja_doc_guard.py · production_doc_guard.py
Who runs itHermes (automated)
The actual thing
What the guard protects: this invoice has to stay the twin of its estimate, word for wordopen the document ↗
source: company flow 9/21 — the money-and-format law
Part 3 · Accepted — the handoff
09
#accepted-jobs — the lane
not on your list
ReplacedA job walking through five different channels, one stage each — and getting lost between them.
NowOne lane. One chat per job, named by the address. One document shown in it — the House Production Sheet. Every press, assignment and build report lands in that job's own thread, so the job's history is one scroll.
Where it livesDiscord #accepted-jobs · the lane contract
Who runs itApril (runs the lane) · Ludy (co-owner)
The actual thing
It lives in Discord — open #accepted-jobs and you see one thread per job.
source: accepted lane spec, 9/17-18
Part 3 · Accepted — the handoff
10
Accepted → invoice — the conversion
not on your list
ReplacedSomeone re-typing the accepted scope into a new document.
NowThe moment a job is accepted, the accepted estimate is converted to an invoice, and the web page the customer already holds becomes 'Accepted Scope of Work — Invoice <n>'. The optionals they did not buy are left out of the conversion, so the installers never see them. Which option was chosen is confirmed in the estimate channel first — never guessed here.
Where it livesConverted by press · Invoice Ninja is the invoice engine
Who runs itApril · Joyce
The actual thing
The invoice the conversion produces — Invoice #0007, $8,756.00open the document ↗
and the page the customer already holds becomes 'Accepted Scope of Work — Invoice 0007', with the optionals left out.
source: accepted_page_to_invoice.py · lane spec §3
Part 4 · Work orders + schedule
11
House Production Sheet
not on your list
ReplacedCrew and days agreed by phone, remembered in a notebook.
NowEvery job gets its own production sheet, same format, standing empty. Ludy or Jorge assign one thing per service: the crew, a day allowance or a flat dollar figure for a sub, an internal note, the install date. Nobody else touches it. It is the source every work order is built from.
ReplacedA work order typed by hand, differently every time.
NowPressing 'Build the work orders' is the only way a matrix gets made. It reads the sheet and shows every service with its crew and its allowance on one screen — and lists whatever is still unassigned at the bottom, so nothing quietly goes missing.
The crew's own page — only Valerio Team's work on itopen it full ↗and the PDF that goes with it — no money anywhere on a crew surfaceopen the document ↗
source: lane spec §5.2
Part 4 · Work orders + schedule
14
Bills — one per work order
on your list
ReplacedWhatever the sub said they were owed.
NowOne bill per work order, each with its own number, sequential from the job's. Each is priced off the job workbook's own day rates — never off someone's memory, and never off an estimate. The bills page is what April opens, and it carries the invoice button.
The bills page — one bill per work order, each with its own number, plus the invoice buttonopen it full ↗One of the bills itself — Bill 523, Valerio Teamopen the document ↗
source: lane spec §5.3 · bill_jobs state
Part 4 · Work orders + schedule
15
Install schedule — calendar + board
not on your list
ReplacedInstall dates living in three different calendars.
NowUnder the bills there is a live scheduling panel: a month calendar and a board, both read from ClickUp. Install dates set there are written straight back into ClickUp, so the office, the crew and the customer-facing plan stop disagreeing. Ludy schedules; April can too.
The scheduling panel sits under the bills on this same page — calendar and board, read from ClickUpopen it full ↗
source: company flow 9/21 · bills page schedule panel
Part 4 · Work orders + schedule
16
Crew report — what actually happened
not on your list
ReplacedWaiting to find out how the day went.
NowA crew report page per crew, in Spanish, on the job's own work-order project: which services, which days, what was done. It is the field side of the job readable without a phone call — the same page on the phone the crew and Ludy already carry.
Reporte de cuadrilla — the crew's own report, in Spanishopen it full ↗
source: system map lane 4 · crew report
Part 4 · Work orders + schedule
17
Change work orders (CWO)
on your list
ReplacedExtra work done on a handshake, then argued about.
NowExtra work becomes a numbered change order in Invoice Ninja with its own dollar value, and the customer's page is updated in place to show the accepted change — new total, the change card, the payment schedule moved with it. What they declined is written down as not included.
Where it livesInvoice Ninja — change order quote (e.g. CO-0003 $3,650.00)
Who runs itJorge · April
The actual thing
The change order as it shows on the job's cost sheet — CO-0003, $3,650.00, next to the estimate it movedopen it full ↗
source: change-work-orders · CWO in Invoice Ninja
Part 4 · Work orders + schedule
18
Work order delivery to the subs
not on your list
ReplacedThe sub saying 'nobody sent me that'.
NowThe work order is sent from the office line, and April confirms receipt the next day. Every subcontractor's number lives in one file, so a new office person can still make the call.
Where it livesDialpad (office line) · contractor contacts file
Who runs itApril
The actual thing
It happens on the phone system: the WO goes out from the office line and April confirms receipt the next day.
source: lane spec §8 · contractor_contacts.json
Part 5 · Materials
19
THI Master Material List
not on your list
ReplacedNobody knowing what a service should cost in materials.
NowThe master list for the crawlspace side: every material, by service, with what the receipts actually paid for it in 2026 — around 158 items. This is where a material price comes from instead of an old guess.
The live list — every material by service, at what the receipts actually paid in 2026open it full ↗
source: thi-material-list · built 9/21/26
Part 5 · Materials
20
Material + product packages
on your list
ReplacedA truck loaded from a list someone remembered.
NowEach service carries its own package of materials and products — the bundle of what that service consumes, with unit, price, supplier and a product link. The package is what makes an estimate's material side and the actual purchase comparable.
NowA receipt's lines get allocated to the service that consumed them, so a materials total can say which service it belongs to — and a job with shared receipts can split them honestly between jobs.
Where it livesAllocation on the job's own cost sheet
Who runs itApril · Joyce
The actual thing
Materials grouped by the service that consumed them, not smeared across the whole jobopen it full ↗
source: thi-materials-service-allocation
Part 5 · Materials
22
Actual materials = the receipts
not on your list
ReplacedThe estimate's guessed material number being treated as the truth.
NowThe materials that count are the ones with a record of purchase. Every line is printed the way the receipt prints it, and the lines have to add back up to the receipt's own printed subtotal and tax. What we thought we would spend is kept, but collapsed and clearly labelled as planned.
The materials section built straight off the receipts — each line as the receipt prints it, closed by its own subtotal and taxopen it full ↗
source: project cost sheet design v2, 10/01
Part 6 · The field
23
WhatsApp — the days of record
not on your list
ReplacedThe bill being the only proof of how long a job took.
NowThe crews' own WhatsApp groups are the record of the field: which houses and which trades were worked each day, the material receipts, and the customer's money. The work-day log is the days of record — a day worked is a day the bill has to answer for. Everything is exported on a timer so the record survives the phone.
Where it livesWhatsApp ops groups · exported to the MAYWO drive every 15 minutes
Who runs itLudy · the crews · April
The actual thing
It happens in the crews' WhatsApp groups — the house and the trade posted each day, exported on a timer.
source: whatsapp-ops-monitor · wa-sync cron
Part 7 · Money in
24
Invoice Ninja — the money documents
on your list
ReplacedWave, and a separate system for quoting.
NowOne engine for the money documents: estimates, invoices, change orders and the payments recorded against them. Wave is retired — where a document still says Wave, it is a label to fix, not a place the money lives.
Where it livesInvoice Ninja (THI company; Coastal to follow)
Who runs itJoyce · April
The actual thing
Invoice #0007, $8,756.00 — the real document, as the customer gets itopen the document ↗
source: invoice-ninja · Wave retired 9/18
Part 7 · Money in
25
Payment rails + the ledger
not on your list
ReplacedPayments matched to jobs by memory at month end.
NowPlastiq, checks and ACH land in the bank, and the bank side is read into the ledger so a payment can be tied to the invoice and the job it paid. What the customer still owes is read live, not estimated.
Where it livesBank + ledger (the 'All Transactions' sheet)
Who runs itMely · Joyce
The actual thing
Payment status read live on the cost sheet — what came in, and the balance still dueopen it full ↗
source: bank-transaction-automation · project cost v6 payment status
Part 7 · Money in
26
Receipt pipeline + check images
not on your list
ReplacedA shoebox of paper receipts.
NowA receipt that arrives by mail, by phone or in WhatsApp is captured, transcribed through the vision pipeline, linked into the project, and filed in the job's own Drive folder. Check images can be pulled and matched to the ledger row they belong to.
Where it livesReceipts Master · the job's Drive folder
Who runs itApril · Joyce
The actual thing
The receipts as they land on the job — each one carrying its own link back to the recordopen it full ↗
NowCommission is a bill on the job, at a fixed rate — Jeff 15% on the work he brings, Jorge 10% on Tidewater-originated work — so every job shows what it paid to sell itself.
Where it livesBill on the job (COMM-<estimate number>)
Who runs itMely
The actual thing
The commission line on the cost sheet — Jorge 10% of the project cost on this jobopen it full ↗
source: commission bills · 15% / 10%
Part 8 · Project cost
28
Project Cost Sheet — the glance
on your list
ReplacedOpening a spreadsheet and reading across 22 columns to check one job.
NowOne page per job, built to be confirmed in five seconds: the project cost, and tiles for materials, labour, crew and days worked, then the crew, the days and the receipts in short cards, then the payment status and the balance due. Every deep column is behind a toggle. It ends with the records — the estimate, the invoice, the work order and the change order, each with its own number and a button that opens the real document.
The glance — the money, then the tiles, then the crew, the days and the receiptsopen it full ↗
source: project cost sheet design v1-v10, 10/01
Part 8 · Project cost
29
The checks — document vs record
not on your list
ReplacedNobody comparing the paperwork to what actually happened.
NowThe same page runs the checks: the days on the bill against the days of record, the invoice against the accepted estimate plus its change orders, the materials on the sheet against the receipt lines, the money recorded against the money collected. Each one prints as a pair — the document and the record — and says in a sentence how far apart they are. The ones that pass are kept, behind a toggle, so you can see what was checked. 105 East 37th: 3 checks need fixing, in red at the top of the page.
The checks, red at the top of the job's own pageopen it full ↗and the demo of the idea — two jobs, 13 document-against-record checksopen it full ↗
source: mirror demo, 13 checks across 2 jobs
Part 8 · Project cost
30
Per-house project cost workbook
not on your list
ReplacedOne flat ledger for every house.
NowEach house keeps its own workbook: the overview sheet that consolidates it, the project cost analysis with every receipt line and its link, the project cost tab with estimated beside actual, and the receipts tab. This is the sheet the office books into — the page is the glance, the sheet is the record.
Where it livesThe job's own project cost link (per-house workbook)
Who runs itApril · Joyce
The actual thing
It is a Google Sheet, one workbook per house — the office's own record, opened from the cost sheet.
source: job-costing-workbooks · project cost link column
Part 8 · Project cost
31
The register — 2026 to current
on your list
ReplacedA year of work nobody could total up.
NowOne row per job, 2026 to current: the customer, the date, the job's total cost, what came in, and the ganancia. It is the spine the finished-job work hangs off, and the register for the completed jobs.
Where it lives'Main Project Cost 2026' · tab '2026 to current'
Who runs itJorge · Joyce
The actual thing
The register as a page — 190 jobs, what they cost, what came in, and the gaps it will not hideopen it full ↗
source: register, read live 10/01 — 190 rows
Part 9 · The book, and beyond
32
The book — the register as a page
not on your list
ReplacedThe register only existing inside a spreadsheet.
NowThe register as a page anyone can open: 190 jobs, what they cost, what came in, and what the last 30 days actually did against the money the doors need every month. It also shows its own gaps — the jobs with no ganancia, no job sheet linked, and no payment recorded — instead of hiding them.
The book — the last 30 days against the money the doors need every monthopen it full ↗
source: register book page, 10/01
Part 9 · The book, and beyond
33
Overhead + debt register
not on your list
ReplacedNot knowing the number every month has to beat.
NowWhat the doors cost — operating overhead, debt service, and the draws — with the calendar of what comes out on which day. It sets the target: this is how much ganancia has to arrive, and therefore how many jobs the month needs.
The overhead page — doors-open, debt service, the calendar of what comes out, and the jobs a month it takesopen it full ↗
source: true overhead register, read live 10/01
Part 9 · The book, and beyond
34
The maps — press a lane, watch it flow
not on your list
ReplacedExplaining the business out loud, differently every time.
NowTwo charts you can hand to someone new. The process poster walks one lane at a time — press a lane and the rest fades, then step through it a hop at a time. The company flow chart is the whole business in flow order with what is running and where the machine still stops.
The process map — press a lane and the rest fades, then step through it a hop at a timeopen it full ↗and the company flow — what is running, and where the machine still stopsopen it full ↗
source: built from the live state, 9/18 + 9/21
Part 9 · The book, and beyond
35
The lanes — Discord + Telegram
not on your list
ReplacedWork arriving in a personal text message.
NowThe channels are the departments. Estimates in their lane, accepted jobs each in their own thread, payments in theirs, production and April's workspace in theirs — and the same work mirrored to Telegram where Jorge is. Each channel's standing rules are written into the channel itself, so a rule doesn't live in someone's memory.
Where it livesDiscord: estimates · accepted-jobs · invoice-payments · house-production · april-workspace; Telegram: production · project cost
Who runs itEveryone
The actual thing
The lanes are the channels themselves — open Discord and the departments are the channel list.
source: accepted lane spec §1-2
Part 9 · The book, and beyond
36
ClickUp + the ERP lane
not on your list
ReplacedJob status known only by whoever last heard it.
NowClickUp carries the job's status from lead to won, and the accepted jobs move the board on as the work moves. The ERP (ERPNext) sits beside it and is fed from ClickUp nightly — an unfinished lane: the invoices, production and job cost still live in the Sheets world.
Where it livesClickUp (status) · ERPNext (in migration)
Who runs itJorge · Melrose (ERP lane)
The actual thing
ClickUp opens with your login; the ERP is the other system, fed from it nightly.
source: company flow 9/21 · clickup → erpnext nightly
Part 9 · The book, and beyond
37
Permits and inspections
not on your list
ReplacedChasing a city portal twice a week.
NowBuilding and trade permits are filed and tracked with the city, inspections are scheduled and their results checked, and the daily reports are audited against what the systems actually show.
Where it livesCity portal + the job's own document folder
Who runs itApril · Joyce
The actual thing
It happens in the city's own portal, against the job's document folder.
Built October 1, 2026 from the live system — the pages, the lane contract, the cost-sheet design and the
register, read on that day. Figures and names are the ones the sources carry; where a source had
nothing, nothing is claimed.
Pages linked here are the real ones — some ask for the crew password, because a money page is
meant to. Owner-only surfaces are deliberately not in this deck: this one is for the team.