Cleaner Web App

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:

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 broken auto-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 (automaticTypephoto_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 Online to Offline · 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).

Source: the FlatsBratislava operator manual.