The cascade, step by step
- Decline — the cleaner taps No on the link. Lemon records the response, tells the host and offers the job to the next cleaner in priority order straight away.
- No answer — every offer has an expiry. Lemon checks about once a minute; when an offer has expired it is marked timed out, the host is told, and the next cleaner is offered.
- Nobody left — the job is marked as waiting for cleaners and the host is told. 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 is put on hold and 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. If a cleaner accepted but does not start on time, the host is told, with the number of minutes late 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.
Technical details
- A decline notifies the host with
cleaner_declinedand the next offer goes out within the same sync cycle. - Each offer carries an expiry (
offerExpiresAt). A background processor runs about once a minute; an expired offer sendsjob_offer_expiredto the host. - With nobody left, the job moves to
waiting_for_cleanersand the host receivesall_cleaners_declined. With no cleaners on the list, the job sitson_hold. - A cleaner who accepted but does not start on time triggers
cleaner_no_start.
