Tidewater — the whole company in flow order state of record: 2026-10-05
previous page: 2026-09-21 · measured this run: 50 automation jobs (41 live) · 184 skills (101 touched since last page) · 886 scripts · 96 state files changed · green = runs today · amber = to build · blue = a rule · red = broken right now
Bottom line: the estimate and build half runs like a shop twice your size, and your own app is now the money system — it makes the estimate and the invoice in-house (no Invoice Ninja), prints the Wave-look document with Joyce's rules, and keeps job, cost and payment in one place. What is missing is the last step: getting the invoice to the customer. Everything below was read off your machine in this run.
SINCE 2026-09-21 — what actually got built (2 weeks)
Tidewater Ops app — the big one
Service tree, materials by package, estimate section, sub-parents, structural/waterproofing breakdowns. You iterated on it all weekend; it is the first real candidate for "one place that holds the company".
The app became the money system
Your own app creates the estimate and the invoice in-house (create_invoice_from_estimate — "the app is the system"), prints the Wave-look document with Joyce's rules, and records the served document's hash. ERPNext is now a read-only mirror of history; Wave is retired.
Cost & overhead registers
Project cost register + per-house cost sheets + the overhead/debt register with its own web page (tidewater-overhead).
Accepted-job lane → production
ClickUp accepted-jobs webhook relay, production packet trigger that hands the sheet to April when services get dates, WO/bill builders.
Pages you can open
Web estimator pages, Cloudflare page-slot watch (you lifted the project limit), register ("the book") page.
Tool hunting became a routine
A daily Hugging Face scan now runs — and so does a second copy of it (see gaps). Kitchen/cabinet design tools explored: IngeTrazo rejected, an HF 3D cabinet designer found.
THE FLOWS — as they run today
1leads
Solid
Web estimator pages (Cloudflare)
Meta/FB ads → weekly digest
Dialpad calls/SMS
ClickUp leads
Jorge-direct & Jeff leads = not paid marketing
Runs on: Meta ads API, Dialpad, ClickUp, Cloudflare Pages.
Gap: you pay per lead but cost-per-lead only counts paid channels — a lead that arrives from a page you built for free reads as free, which hides what the page earns you.Cost-per-lead is a weekly digest, not a live number.
2estimate
Excellent — better than shops much bigger than you
Intake gate
Crawlspace estimate (master workbook)
Web estimate page → link to customer
Jeff Wilson estimates
Service tree + materials (in the Ops app)
Never quote a price that was not named
Runs on: the Ops app (the record) + sheets (material prices) + Cloudflare estimate pages (the customer's copy).
Gap: the app holds the estimate and prints the Wave-look document — notes, warranty and the 50%-up deposit computed from the lines. The sheet and the web page are copies that can drift from it.App holds 5 estimates / 20 lines.
3accepted → production
Works — newest and best-wired half
ClickUp #accepted-jobs lane
Webhook relay (local 8645)
WO + bill builders
Production packet → April
Install-date watcher
Crew WO = no money shown
Runs on: ClickUp + local relay + Google Docs/Drive.
Gap: the packet goes out when services get dates, but the invoice to the customer is not part of that trigger — that is the step you asked about twice today.No confirmation the customer was sent anything.
4build / VA ops
Works but manual
VA daily tracker + 3 Word docs / 9pm
WhatsApp ops monitor
Walkthrough transcript filing
VA report audit
Permits & inspections (city / VA)
Runs on: WhatsApp, Drive, the vault, Word builders.
Gap: a walkthrough video becomes one undifferentiated block of text — you cannot tell your words from the VA's from the customer's without reading it all.Who-said-what has to be added.
5receipts
The most automated thing you own
Vision watch (5 min)
Email receipt poll (10 min)
WhatsApp → Master sync (15 min)
Re-verify pass (hourly)
Daily chat sweep + watchdog
Missing-receipt 5pm re-check
Runs on: local vision models + Drive + Sheets.
Gap: heavy for what it does (6 jobs), and the OCR verdict is trusted from one model — no second opinion on a bad photo.No per-receipt confidence, so a wrong number looks the same as a right one.
6costing
Not there yet — this is the real weak spot
EXPENSES ledger analysis
Per-house cost sheets
Project cost register + page
Overhead / debt register + page
Cost sheet mirror (per job)
Reconcile app ↔ sheet
Runs on: Sheets + Drive + Cloudflare pages + skills.
Gap: ask "did 830 Partridge make money?" and the honest answer is still open a spreadsheet. Ledger, receipts, register and app each hold part of the answer.No house-level profit figure that updates itself.
7bill → collect
Broken today
App: invoice from accepted estimate + change orders
App: Wave-look document, printed locally
App: document sha256 recorded on generation
App: mark paid / void + payment rows
Sending to the customer — notice only, no mail transport
ERPNext history mirror — DOWN (HTTP 000)
Payments only on the emailed invoice
Runs on: the Ops app (system of record, git-tracked) · ERPNext = read-only mirror of history (310 invoices) · Wave retired.
Gap: the app's send step has no transport — it writes "would email …" and stops, so nothing leaves the Mac.App has issued 1 invoice; 310 of history exist only in the mirror.
8company brain
Strong, but one machine holds it
Obsidian vault (8 flows + mermaid views)
Drive per-house folders
SOP / BOS docs
This page + register pages
Tidewater Ops app as system of record
Channels are isolated worlds
Runs on: Obsidian (iCloud), Drive, Cloudflare Pages, the Studio.
Gap: every flow above is a script on one Mac. No version control (886 scripts, 90 of them temp files), backups exist but have never been restore-tested.One dead Studio = no estimates, no receipts, no invoices.
GAPS — ranked, worst first
1 · The invoice never leaves the app
You asked twice today which channel sends it. From the code: none yet. The app builds, prints and hashes the invoice, then send_invoice() logs "would email …" — there is no mail transport in the app at all.
2 · ERPNext is down — history only, billing not blocked
Watchdog reported HTTP 000 pointing at the docker stack. Because your app is the money system this stops the mirror, not the invoicing — which is exactly why it sat unnoticed.
3 · Four live jobs are failing, quietly
KPI digest (exit 1), Invoice Ninja backup (delivery target not configured), estimate-field fill and lead-status sync (local service refused connection).
4 · "Did this house make money" still needs Excel
Ledger, receipts, register and app each hold a piece. No per-house profit that updates itself.
5 · Ten jobs report only to a file
A failure in the silent half is invisible until you go looking — which is how #3 stayed broken.
6 · Duplicate daily HF digests
Two jobs now scan Hugging Face daily (7:00 and 7:30) and both deliver here. One should go.
7 · The app is under git; the rest is not
The app has commits and a restore point (Oct-2 reset recovered). The 886 helper scripts (90 temp, 304 touched in two weeks) have none, and no backup has been restore-tested.
8 · Same job, three copies
Estimate: app + sheet + web page. Customer record: ClickUp + Drive + app. Each copy can drift and nothing compares them.
WHAT CAN COMPLIMENT EACH FLOW (the thing you asked for — one add per flow, with where it runs)
| Flow | What to add | Where it runs | What it changes for you |
| Receipts | granite-docling-258M — tiny document reader (269k downloads) as a second pass on photos | Mac Studio, free | A bad photo gets flagged instead of quietly landing a wrong number in the ledger. |
| Walkthroughs / VA voice | Nemotron-3-Diarization + an ASR pass (Audio8-ASR-Infinite, 4B, 40k downloads) | Mac Studio, free | Transcripts say who spoke — you, the VA, the customer — so a site video becomes a readable report. |
| Job costing | Local search: Qwen3-Embedding-0.6B + Qwen3-Reranker-0.6B over your own files | Mac Studio, free | "What did we pay for LVP at Partridge" gets answered from the file, not from a two-hour spreadsheet hunt. |
| Estimate / plans | Qwen3-VL-8B for reading plans, labels and photos locally | Mac Studio, free | Plan details pulled into an estimate without retyping. (Hermes itself never reads images — this is the script doing it.) |
| Kitchen / 3D design | The HF cabinet designer you found + a real cabinet plugin path; Qwen-Image-2.1 for renders | Cloud GPU for renders | Customer-facing 3D you can approve and send, without IngeTrazo. |
| Bill → collect | Give the app a real send: mail out of the app (SMTP or the Gmail it already has) plus a send-log row | Mac Studio, free | Turns send_invoice() from a notice into the actual hand-off, so "sent" means sent. |
| Ops app | Keep going: sqlite modules + the app as system of record, feeding the cost register | Mac Studio | One place holds the job, and costing stops being a copy job. |
| Marketing | Cost-per-lead broken out by channel weekly instead of paid-only | Existing data | You see which page/agency actually earns, including the free pages. |
THREE DECISIONS — the only ones that matter this week
1 · Give the app a real send
Wire the app's send step to actual mail and log it — the invoice then reaches the customer from the app you already own.
The one thing between shadow and live.
2 · Move the history across
310 invoices live only in the ERPNext mirror; the app has 1. Decide the date the mirror stops being the reference.
A data decision, not a rebuild.
3 · Tidy the machine
Merge the two HF digests into one, fix or retire the 4 failing jobs, and make the silent ones report a failure somewhere you will see.
15 minutes, and the noise stops.
Key: runs today to build a rule broken now
Measured in this run from: cron job list (50 jobs, 41 live), ~/.hermes/scripts (886 files, 304 touched since 2026-09-21), ~/.hermes/state (96 files changed), skill library (184 skills, 101 touched), the Obsidian vault Flows/ notes, and your own turns since 2026-09-21. Nothing here is assumed — where a figure could not be read, it says so.