Harry's Clean Team
The grid reads the standing roster underneath it and any dated exception on top. Click a square to mark someone sick, on leave, or available for a one-off. Nothing here blocks an assignment — the scheduling board warns you and makes you confirm, because reality overrides a roster often enough that a hard block would just teach you to stop keeping it current.
The week
Loading…
Loading…
Demand is job length × crew size for every clean booked that day. Supply is what the roster says exists, capped at each person's daily maximum. A red day cannot be crewed from the roster on file no matter who you assign — that is a hiring or a re-booking problem, not a scheduling one.
Rostered on At or over their daily cap Rostered off Exception (sick, leave, holiday) No roster on file
Standing roster
The normal week for each cleaner. Tick the days they work, set the window they are contactable within, and cap their day. A cleaner can hold more than one pattern now — Mon–Fri 09:00–17:00 and Sat 09:00–13:00 — so long as two patterns do not claim the same day at the same time. This table edits their main one; use Apply to several above to set the same week across a group.
Apply one pattern to several people
Cleaner Days From To Max h/day Notes
Loading…
Fill the week
One button proposes a crew for every uncrewed job in the range, ranked by who usually cleans that property, who is freshest, and who has hours left in the day. Nothing is saved until you press Commit. Change anyone you disagree with first — this is a suggestion, not a decision. The draft is internally consistent: nobody is proposed for two jobs at once, and hours drafted here count towards their daily cap.
Open shifts
Jobs put in front of the whole team on Telegram. First person to tap Accept gets it and everyone else is told it has gone. A job needing two people stays open until both slots are taken, so the first acceptance does not close it. Anyone not linked to the Telegram bot still needs a phone call.
Job When Status Closes Responses
Loading…
Crew the unassigned jobs
Every scheduled clean with nobody on it. Pick one and the right-hand side ranks all eight cleaners against it — rostered, free, under their cap, not already somewhere else — worst last, with the reason spelled out.
Needs crew
Loading…
Pick a job on the left
Nothing selected.
Same-Day Turnovers
—
Tap to view bookings
Check-outs Today
—
Properties to clean
Check-ins Today
—
Must be ready
Cleans Done
—
Submitted today
Currently occupied —
Loading…
Checklist due
—
Across all properties
Checklist overdue
—
Missed period
Consumables tracked
—
Across configured properties
Today's Priority Operations
Loading…
—
Guest stay
Owner block
+N more
Check-out
Scheduled clean
Unassigned
Clean done
Crew gaps
—
Slots still to fill, soonest first
Loading…
Select a day
Click any day to see its events and actions.
Notifications
Last 7 days · bookings & changes
Loading…
Revenue This Month
—
Across all properties
Active Now
—
Currently occupied
Upcoming 30 Days
—
Confirmed check-ins
Avg Nightly Rate
—
Blended across OTAs
All Bookings
Loading…
Shortage Alerts
—
Check-in within 7 days
With Service
—
Sets out for cleaning
At Properties
—
Sets in place
Total Sets Tracked
—
Across all properties
Linen Status by Property
Loading…
Loading…

Cleaners raise flags from the Supply Check on the clean form. The shopping-list generator on the Consumables tab builds from open flags.

Clients

Contact & billing details per client, and the email address the daily cleaning-report draft is sent to.

Loading…
Submitted Clean Reports
Loading…
Upcoming Schedule
Loading…
Pay per clean: $
Cleans by Cleaner
Loading…
Client history
Loading…
Audit Log
Audit log
Activity audit log will surface here when the audit module ships.
Crew activity
Everything the staff put in — clock on/off, checklists, jobs closed off, and every Telegram tap
Loading…
Properties

Click a property to manage its amenities and guest access info.

Loading…
Property Checklists
Create and edit cleaning checklists for each property
Loading…