The problem
Palm Heaven took in $1.44M of guest payments a year across 2,541 bookings, and it ran on memory and text messages. Most of the gaps landed on me.
Cleaners worked from verbal instructions. When a guest claimed damage or an owner asked for proof, we had nothing to show. I was the middleman for every booking, change and cancellation, and at 2,052 turnovers a year a slip was never far away: a guest walking into a dirty house, or a cleaner driving out for nothing.
Pricing lived in PriceLabs, with the real levers buried under jargon. Over 100 per-listing settings had never been set. Every cleaning task carried a template $95 cost with no invoice behind it, so $195K a year of cleaning cost sat on a placeholder and nobody knew what a turnover really cost.
The public site was a vendor template. Visitors hit a "no listings found" dead end 171 times in 90 days, and we weren't even tracking reservations. Every guest we lost there either left for good or booked through a platform that took its cut.
Who it's for
The crew app works one-handed on a cheap Android phone in weak Wi-Fi, because I designed it around one cleaner. My brief described her as "a fifty-five year old woman with reading glasses holding an inexpensive Android phone in one hand and a spray bottle in the other." Every screen had to pass the test I wrote next to that: "If the answer is not obviously yes, the design is wrong." It runs in English and Spanish.
The crew sharpened it fast. A lead cleaner pointed out that regular cleaners didn't need guest arrival details, so only leads, inspectors and admins see them now. In July only about half the properties ran their cleans through the app, so I added a way to mark a clean done outside it and kept the record whole. Managers wanted status without admin access, so they got their own console. I wanted that one myself. At 1 a.m. I'd had no fast way to check when a unit was last cleaned.
Guests got the same scrutiny. One week in September, counting real visitors only, 56 people viewed a home, 20 saw a real price, 4 pressed Reserve and none finished. That funnel put the next round of work squarely on the booking box.

Key decisions
Crews use the app daily and no price moved without my yes, because every big call came down to trust. Cleaners had to trust the app with their work, and I had to trust software with live prices and live bookings on a $1.44M business.
Cleaners use the phone's own camera, since a custom one on cheap Android phones was a rabbit hole. Wi-Fi is weak in concrete-walled Puerto Rico apartments, so every tap saves on the phone first and syncs when the signal comes back.
Photos come first
CleanerProof turns every clean into evidence. Before photos, the checklist, after photos and any issue reports become a timestamped report with a PDF and a share link, ready for an owner or an Airbnb dispute. That's 2,000+ turnovers a year with proof behind them.
Let cleaners stay honest
A cleaner can finish with required items unchecked after a warning that lists them, and the admin sees each one flagged. A forced fake checkmark would poison the evidence trail, so the honest answer is also the fastest one.
No price moves without my yes
I switched the pricing goal from revenue and occupancy to profit after the real cost of each turnover. At 75.6% occupancy, filling more nights cheaply only bought more cleans and more wear for the same profit. The tool could touch only an allowlist of 30 homes, and every change ran the same path: back up, write one value, read it back, log it, with one-command rollback. One house went first. No setting moved more than 15% in a round, and a changed house got 21 days to cool off.
A double booking is a hard failure
0 double bookings since launch, because my requirement was "I don't want to get any double bookings." Right before every reservation the site re-checks availability live and gives the booking a duplicate-proof key. Unpaid holds release through the property system, so every channel reopens at once. Guests see all-in totals the moment they pick dates.

How I built it
I shipped three production systems between April and October 2026: 244 commits on CleanerProof and 557 on the booking site. Writing always came first. The CleanerProof brief ran 57 paragraphs, and for the booking site I wrote an 8-page PDF of decisions that we broke into 104 requirements.
Each feature went brainstorm, spec, plan, build. CleanerProof alone has 15 specs and 11 plans, and I settled its manager console in a visual brainstorm with mockups. The pure logic, like hold schedules and pricing rules, got automated tests in Vitest, then separate review passes checked the work.
My corrections became rules files every later session had to follow. One says to check each page at 375, 768, 1440 and 1920 wide before calling it done, because a visual audit once passed while my browser showed a blank grid of homes.
I kept my own hands on the dangerous parts. The pricing tool once compared a nightly floor price with a cleaning cost and built a whole recommendation on it. I caught it and pulled the proposals before a single price moved. With the math fixed, one-night stays still added money toward rent.
The same playbook built a recruiting pipeline for on-the-ground staff, with phone validation, de-duplication and a review screen before any outreach went out.

What changed
CleanerProof gives about 15 cleaners back more than an hour each, every day. That's 15+ crew hours a day, 5,400+ hours a year and 2.5 full-time jobs' worth of time, worth $100K+ a year. It went to production on April 19, 2026, one day after the first commit, and the crews have used it daily ever since. The clearest proof of how hard they lean on it came on June 24, when the whole team reported it hanging on open. I had it fixed that day.
The work itself got better. Cleanliness complaints fell 50%, 95%+ of cleans finish before check-in, turnovers run faster and crews stopped mixing up which home was ready.
Pricing now runs on profit. The engine analyzed 2,541 bookings and $1.44M of guest payments over 12 months and replaced the $95 template with real cleaner payouts. Then 8 base prices came down live, each one approved and read back. Profit-first pricing is set to add $115K+ a year.
The new booking site for 56 Puerto Rico homes replaced the vendor template on September 17, 2026, with every old URL kept. On a throttled phone the homepage's main image dropped from 5.2 seconds to 1.26, 4x faster. Every stay that books direct skips a platform fee, worth $20K+ a year.
The first real direct booking reached its arrival day unpaid. I turned that into a rule: unpaid-hold deadlines never fall at night or after check-in.

What's next
Next I'd turn those 4 Reserve clicks into paid stays. I'd watch real guests try to pay on their phones and fix every step that loses them, until direct booking carries a real share of the $1.44M. Then I'd ship the guest inbox prototype, one place for 130,000+ messages across all 65 properties, and get CleanerProof into every house that was still skipping it in July.

