rain 2pm
● TurnoverSat 10:00–2:00From service apps that didn’t fit to one operations system
None of the service apps I tried fit how The Maine Cleaning Company worked, so I designed and built BrightBase: one affordable system for scheduling, rental turnovers, client texts, leads and payouts.
Requirements, data model, testing and rollout were mine; built with Claude Code and reviewed line by line.
Python · FastAPI · React · PostgreSQL · Stripe · Twilio · Google APIs
Before → after
The Maine Cleaning Co. at a glance
- collected since 2023
- $1.08M
- visits since 2023
- 4,916
What BrightBase was built to protect
“The level of communication is phenomenal and the knowledge of the cleaners is incredible!”
“I have had to cancel and reschedule a few times and they have always been kind and accommodating.”
“We have used Megan and her team for all our Air BnB turnovers and have been lucky to have such a professional overseeing the cleaning services.”
- 01Mapped the processRequest to paid, with the office and crews: 4 systems, 3 manual handoffs.
- 02Found the breaksBank records, visit exports and payroll screens showed where data got retyped or lost.
- 03Wrote the requirementsBusiness rules, user stories and acceptance criteria, each tied to a test.
- 04Built and rolled outPhased releases alongside the old tools until the numbers matched.
Where it broke


Sample requirement: the subcontractor payout ledger
In September 2026 we moved from employees to subcontractors. Hourly payroll was the wrong shape — a subcontractor is paid per job. The ledger records what’s owed for completed work, tracks it to paid, and keeps year-to-date totals for 1099s.
- RulePaid per job at the agreed rate — never by the hour. Only completed work creates an amount owed.
- FR-3Payouts move only forward: due → sent → paid, or void. Paid and void are final.
- FR-6Year-to-date totals per subcontractor, by the year the work was done, flagged at the 1099 threshold.
- NFR-1Generating twice for the same period creates no duplicates — enforced by the database.
Every acceptance criterion maps to a named automated test — 19 for the payout ledger alone, out of 4,100+ across the project, all run in CI on every pull request.
How it rolled out
No big bang. Each change was its own pull request, gated by automated tests, and the crew app shipped in five phases while Connecteam kept running until the two agreed for a full pay period.
- 1Today, Schedule & checklists
- 2Accept or decline jobs
- 3Open-jobs board
- 4Weekly availability
- 5Training docs
What's next
Retire Jobber after one full billing cycle in BrightBase, and add an alert on every outside integration — a misrouted phone webhook once failed silently for months, and that shouldn’t happen again.










