Walkthrough scenes
The cleaner app is six scenes the cleaner moves between during a cleaning.
1. Main checklist (web-list)
The home screen for the current cleaning. Header shows the property, the X/N done count, and elapsed time. Below: scrollable list of checklist items, each with:
- A checkbox (manual items) OR a camera icon (photo-required items).
- A status badge —
Pending/Done HH:MM/Skipped: <reason>/Waiting for signal(signal-auto-resolved items).
Items can be completed in any order — no forced "current item" pointer. The cleaner can do the bedroom photo first, the kitchen check second, the bathroom checklist last.
Sticky footer:
- Mark all remaining done — opens the bulk-mark sheet.
- Report issue — opens the issue report modal.
- Finish cleaning — only enabled when all checklist gates pass; opens the completion summary.
2. Item detail · camera open (web-item)
Tapping a photo-required item opens the camera inline. Cleaner can:
- Take a photo with the in-app camera (preferred).
- Pick from gallery if a photo is already saved.
- Add notes (free text, optional).
- Skip with a reason (dropdown of common skip reasons + free text "Other"). Skipping with reason
brokenauto-redirects into the issue report flow. - Mark done.
Multiple photos per item are allowed — tap the camera icon again to add a second one.
3. Bulk-mark sheet (web-bulk)
One-tap mark all remaining manual items as done. The sheet:
- Lists every remaining item with its current state.
- Warns on photo-required items — "These items require a photo. Mark them anyway?" — operator can mark done without photo, but it shows up flagged in the completion summary.
- Excludes signal-auto-resolved items (
automaticType∈photo_sent,message_sent,nuki_charge_detected, …) — these can't be bulk-marked because they're waiting for an external signal.
The cleaner can cancel; nothing is marked until the cleaner taps Mark these N items done.
4. Issue report modal (web-damage)
Open from the sticky footer or auto-opened when an item is skipped with broken reason.
Inputs:
- Category — picker (broken appliance / missing supply / damage / cleaning issue / other).
- Location — apartment → room hierarchy.
- Multi-photo — camera or gallery, multiple per report.
- Voice note — hold-to-record, up to 60 s.
- Description — free text in the cleaner's language.
On submit: toast Issue reported, operator notified. The report is routed via LLM intent classification into the operator's task templates — no bespoke "damage report" model.
The cleaning continues without losing checklist progress.
5. Offline · queue indicator (web-offline)
When the device goes offline:
- The service worker keeps the checklist JSON cached — the cleaner can keep marking items.
- Completions are queued locally with timestamps.
- The header swaps from
OnlinetoOffline · N changes queued. - On reconnect, the queue POSTs to the server in order.
No data loss across a basement-lift dropout. See Offline mode for the full lifecycle.
6. Done · summary (web-complete)
After tapping Finish cleaning, the cleaner sees a summary:
- Property + cleaning task ID
- Items done / skipped / flagged
- Photos count
- Issues reported
- Elapsed time
The operator gets one WhatsApp digest at this moment — not one per item.
The cleaner can tap Back to plán to see their next assignment if any, or close the app.
Language
Every UI string is sk / en / uk based on the cleaner's teammates.language. No English leakage in a Slovak or Ukrainian flow.
Implements: gh#524 Slice 3 (React PWA 6 scenes).