Field-service software · Delivered
Black Water Window Cleaning
The operating software behind a working service business, from the first quote to the final invoice.
The brief.
Black Water Window Cleaning needed quoting, office work, and crew coordination to follow the same job instead of living in disconnected handoffs.
What we built.
- Public website, instant quoting, CRM, and scheduling.
- Dispatch and a crew app for the work on site.
- Invoicing, payroll export, and an owner-controlled job record.
How it works.
- 01A customer starts with a quote.
- 02The job moves into the owner workflow for scheduling and dispatch.
- 03The crew works from the assigned job; invoicing and payroll export follow.
The result.
The delivery record is dated July 27, 2026. A live quote-to-CRM journey was exercised at handover, and the temporary test record was removed afterward.
Where it stands.
Delivered software scope is documented here. Customer revenue and efficiency outcomes are not part of this project record.
Earlier engineering notes · July–August 2026
Preserved from the original build record. Product status and offers may have changed; the current project summary appears above.
- Problem: an owner API token had been committed into the repository during the build — our mistake, on our side of the fence. Fix: rotated it on delivery day and then proved the containment instead of assuming it. We replayed the old token against the live API and confirmed it was rejected, and the file holding it was untracked and ignored. A credential you have rotated but never tested is not a credential you have contained.
- Problem: a deployed page carried a machine-readable tag naming an unrelated company — invisible to a human reading the site, fully visible to anything parsing it. Fix: stripped it from the served page, kept the reasoning in the commit record, and re-verified the deployed file against the source on disk byte for byte after the deploy.
- Problem: our own pre-commit gate reported zero tests and blocked the build — but only when automation ran it, never by hand. Root cause: outside an interactive terminal there is no locale set, and in that fallback the pattern we used to count tests cannot match the test reporter's multibyte prefix. The suite had been green the entire time; the gate was the thing that was broken. Fix: a locale-proof parse, with the zero-test control still failing closed. We now audit every gate for the same class before trusting a red from cron.
- Problem: cleaning-solution volume for a job was guesswork carried in someone's head. Fix: per-surface coverage rates derive the mix from measured area, the owner's typed volume always overrides the derived one, and the crew app's calculator persists nothing — the job-of-record mix stays owner-set. Proven end to end through the public path on the live system, then cleaned back out.
- Rule we keep: it was handed over empty. Zero leads, zero jobs, zero invoices. We pushed one record through the live quote-to-CRM-to-owner-digest path to prove the wiring, then deleted it, so day one runs on the owner's data and nothing else.

