The cascade, step by step
- Decline — the cleaner taps No on the link. Lemon records the response, notifies the host (
cleaner_declined) and offers the job to the next cleaner in priority order within the same sync cycle. - No answer — every offer has an expiry (
offerExpiresAt). A background processor runs about once a minute; when an offer is past its expiry it is marked timed out (job_offer_expiredto the host) and the next cleaner is offered. - Nobody left — the job moves to
waiting_for_cleanersand the host receivesall_cleaners_declined. From the dashboard the host can assign a specific cleaner directly (the job is marked as manually assigned and is protected from later automatic changes), restart the cascade, or broadcast. - No cleaners on the list at all — the job sits
on_holdand the dashboard shows a card asking the host to add cleaners; adding one starts assignment automatically.
Reminders and reconfirmation
Accepted jobs get a reminder before the scheduled time, and Lemon can ask for a reconfirmation ("Reply YES") on a configurable schedule. A cleaner who accepted but does not start on time triggers cleaner_no_start to the host, with the number of late minutes on the job.
Cleaner-side cancellations
A cleaner can cancel an accepted job from the link with a reason. Lemon records who cancelled and when, restarts the cascade (skipping that cleaner), and counts the restart. Hosts can set a minimum cancellation notice so a cleaner cannot drop a job an hour before checkout without it being flagged.
What the host sees
Every step is a notification the host can route to email, push, Telegram, WhatsApp or SMS per event type — 17 booking, assignment, progress, photo and alert events. Jobs that need attention are filterable on the Jobs page in one tap.