AI for Route & Crew Scheduling
Lust For Dust is a house cleaning company, and every day starts with the same puzzle: who cleans what, when, and in what order.
For years that puzzle lived in one giant Google Sheet, with the owner juggling staff and client availability, travel time across town and a steady stream of last-minute changes, all by hand. So we built them a custom web app with an AI scheduler at its core.
Take the manual work out of scheduling without taking the owner out of a single decision.
Moving Parts
Every booking balances crew skills, client time windows, travel distance and priority, all at once.
Travel & Routing
Crews cross town all day. A bad stop order burns hours and gas that never show up on an invoice.
Real-Time Disruption
One 7am call-in reshuffles the whole day, and the schedule has to rebuild around the gap fast.
Judgment Calls
Every schedule has rules. Real days break them, and knowing when is a judgment call no spreadsheet makes.
Every project starts with one question:
buy, automate, build, or wait?
We find the software that already solves it, vet it against how you work, and get your team running on it. Live in days.
We connect the tools you already use so the manual steps disappear and data moves on its own.
We design and develop something custom from the ground up. Built for how your business runs, owned by you.
We tell you when holding is smarter. You leave with a clear reason and a date to revisit.
Why We Choose Build
- ✗ Buy failed: no off-the-shelf scheduler models a cleaning crew's real constraints.
- ✗ Automate failed: wiring spreadsheets together doesn't solve the optimization or the judgment calls.
- ✗ Wait failed: every week in the spreadsheet costs real hours.
Before we recommend anything, we score the project on three things: how unique the work is, what a mistake costs, and how much of it runs on human judgment.
The engine solves; Katie decides.
Intake
Unified data modelCrew availability, client windows, job types, and priorities all live in one place instead of scattered across a spreadsheet.
Solve
Constraint solverThe engine generates a full day or week at once, assigning crews and ordering stops to satisfy the most constraints and cut drive time.
Route
Google Distance MatrixEvery route is scored against live road times and ETAs, so crews aren't doubling back across town.
React
Event-driven re-solveA call-in or cancellation fires an event and the affected day rebuilds itself in seconds, no manual scramble required.
Override
Human in the loopKatie can pin, swap, or force any assignment. The system treats her call as fixed and recalculates drive times and ETAs around it.
Notify
AWS Pinpoint SMSClients get texts only when they should. Per-client rules and a notify-some-or-all control keep it precise, with dedupe so no one gets doubled.
Bill
Time + invoice syncTeam leads log a cleaning-vs-checking split before clocking out, and it flows onto pending invoices for admin review and approval.
Before vs. After
| Task | Before the Optimizer | With the Optimizer |
|---|---|---|
| Building the weekly schedule | Hours in Google Sheets, by hand | Generated in seconds, ready to tweak |
| Drive-time planning | Guesswork and memory | Live ETAs and optimized stop order |
| A morning call-in | Manual scramble, rebuild by hand | Automatic re-solve around the gap |
| Client notifications | Manual texts, easy to double-send | Rule-based and deduped, notify some or all |
| Breaking a rule for one job | Only in Katie's head | Built-in override with recalculated impact |
| Billing accuracy | Cleaning vs. checking tracked loosely | Enforced split on every timecard |
The Technical Build
Models crew skills, client windows, travel, and priority as constraints, then searches for the schedule that satisfies the most of them. Where optimization logic earns its keep.
Real road times between every stop, so routes are ordered against actual traffic instead of a straight-line guess on a map.
A call-in or cancellation emits an event; the affected day re-solves on its own instead of waiting for someone to notice and start over.
Any assignment can be pinned or forced by hand. The solver treats it as fixed and recalculates everything downstream around it.
Custom two-way texting with an inbox UI - less work than forcing messages through a third-party field tool, and fully under our control.
Tracks exactly who's already been told, so hitting "notify everyone else" never doubles up a client who already got the text.
| Optimization | Constraint solver weighs crew skills, client windows, travel, and priority in a single pass. |
| Routing | Google Distance Matrix for real drive times, with stops ordered to cut total mileage. |
| Real-time | Event-driven workers re-solve the day the moment a call-in or cancellation lands. |
| Messaging | AWS Pinpoint two-way SMS with a dedupe ledger and a pending-communications queue. |
| Overrides | Any human decision is locked, and the schedule recalculates its impact around it. |
| Roadmap | Built MVP-first, with House Call Pro sync and granular crew permissions scoped for later. |
Have a schedule too complex to keep doing by hand?