Cleaner training brief · South Bay + Long Beach

The cleaner training brief.

Marketplace claim flow + luxury-property handoff + residential deep clean — the three manuals a PristineFlip crew member reads before their first solo visit, plus the rules every later job gets measured against.

Marketplace claim flow.

3 min read · built from this page's text

The five marketplace lifecycle states — `open`, `claimed`, `completed_unpaid`, `completed_paid`, and `completed_unpaid_with_reCleanRequested` — plus the race-safe write that defends each transition. Each item below names the column that backs the rule so a cleaner reading the brief can correlate it to the same field in the route code.

Item 1

State 1 — `open`: the row is claim-eligible on the board

The row sits on the board with marketplaceStatus `open`, no marketplaceClaimedByUserId, no marketplaceCleanerStripeSetupIntentId, and no marketplaceCompletedAt — first-claim-wins applies. Approve a job by tapping Claim; the claim route `POST /api/cleaner/jobs/[id]/claim` is the only path that flips this state.

Item 2

State 2 — `claimed`: SetupIntent authorized before the row is locked

SetupIntent authorization happens BEFORE the open → claimed transition. `ensureCleanerStripeCustomerAndSetupIntent` mints (or reuses) the cleaner Stripe Customer + SetupIntent pair, the resulting setupIntentId is folded into the same atomic write that flips the row to claimed, and a randomUUID marketplaceAuthorizationToken is persisted so the complete step has a verifier-friendly handle. The cleaner-board client does NOT mount Stripe Elements today (CSP blocks js.stripe.com), so card collection on the host side happens off-band via Stripe hosted confirmation — the columns above are what flows through. If Stripe is unreachable the row stays `open` and the client gets 503 `{ error: "stripe_unavailable" }`. cleanerEarningsCents is locked at claim time so weekly totals stay immutable even if the platform fee changes later.

Item 3

State 3 — `claimed → completed_unpaid`: PI declined, row stays completed with the PI id populated

On Complete the route captures a PaymentIntent off-session against the SetupIntent id. The PI id is REUSED as Stripe idempotency key (setupIntentId is the idempotencyKey arg), so a double-click returns the same PI — never two charges. Then the race-safe palindrome write is `updateMany({ where: { id, marketplaceStatus: "claimed", marketplaceStripePaymentIntentId: null } })` — the status filter pair with the null-PI filter is what makes a concurrent double-click during charge return 409 (`raced_during_charge`); "atomic write" alone is not enough to defend against the second POST after the row has the PI id written. On a non-success PI the row flips to marketplaceStatus `completed` + marketplacePaymentStatus `unpaid` + marketplaceCompletedAt set + marketplaceStripePaymentIntentId populated — admin surfaces the PI id even on decline so the retry queue is one column. Single ops email via marketplaceChargeFailedOopsEmail; the host does NOT receive a decline email — never relay an unverified "card declined" message to a host. marketplacePaidAt stays null on decline.

Item 4

State 4 — `claimed → completed_paid`: PI succeeded, two auto-emails fire

When the PI status is `succeeded` the same race-safe write flips marketplacePaymentStatus to `paid` and sets marketplacePaidAt to the capture time. Two best-effort emails fire from the route: marketplaceHostPaidConfirmationEmail to the host with the receipt + paid timestamp, and marketplaceOpsPaidNotificationEmail to ops with the cleaner id + PI id so ops has an audit trail without re-deriving from Stripe. Both emails are best-effort — the durable record is the row + PI id, never a rolled-back write. Recurring-plan writeback runs when the row was materialized from a RecurringPlan (recurringPlanId != null) so the next turn biases toward this cleaner; its failure path SMSs ops but never blocks the completion.

Item 5

State 5 — `completed_unpaid_with_reCleanRequested`: host invokes the 7-day satisfaction guarantee

`POST /api/host/reclean/[id]` opens the satisfaction-guarantee path. Three gates must pass: cleanStatus must be `verified_complete`, the row must NOT already have a reCleanRequestedAt set (one-and-done per turnover — the null guard makes a second request 400 `already_requested`), and the completion timestamp must be at least 7 days old. The clock is measured from marketplaceCompletedAt when set, falling back to the latest `verified_complete` audit event timestamp when the marketplace path didn't fire (non-marketplace rows can still trigger a re-clean). On accept the route writes reCleanRequestedAt = now and emails ops via recleanOpsNotification — the row is the durable record; the email is a courtesy ping. The re-clean itself is a separate ops-scheduled visit, not an automatic re-run.

Luxury property handoff.

2 min read · built from this page's text

High-tier turnover criteria — STR / LTR properties where the per-property spec governs linen tier, surface inventory, photo evidence, kitchen and bath resets, and the scent + lockup check. The default STR standard still applies; the items below add the tier-specific rules.

Item 1

Linen tier follows the per-property spec, not a global default

Restock to the per-property linen tier — bath + hand + wash counts per guest, sparing-use rule on extras, replacement procedure for stained items. The per-property spec (counts + brand) lives on the job card; do not improvise from a standard checklist when the property specifies a different tier.

Item 2

Surface inventory is material-aware, not a one-product-fits-all

Marble, brass, lacquered, oiled wood — each takes a different product. Marble tolerates oxblood within the documented acceptable definition; no abrasive contact on stone. Copper and brass are treated with neutral pH only; never a generalized acid or abrasive. Stone and wood get a soft cloth; chrome gets zero-residue polish.

Item 3

Photo evidence covers every room plus entry timestamp

Full per-room photo set (kitchen, every bath, every bedroom, living areas), entry timestamp on the lockbox / smart-lock photo, and the auditor-anchor shot of cleaner-at-entry-on-lockup. STR luxury pass fails without the coverage; an inspector can ask for more and the photos surface from the same set the QA history already references.

Item 4

Kitchen reset handles glass cooktops and metalware separately

Cooktop glass-clean, appliance exteriors streak-free, no cross-product residue. Copper and brass trims treated with neutral pH only. Oven interior post-test-run photo, microwave interior post-test-run photo, fridge interior inside-and-out. Trash + recycling emptied and dry before lockup.

Item 5

Bath reset clears glass + chrome + waterline under bathroom lighting

Shower glass streak-free specifically under bathroom lighting (not just daylight), chrome zero-residue, waterline spotless, grout uniform across every tile. Mirror streak-free with no cleaning-product cameo. Toilet bowl + waterline ready for the next guest. Bath floor dry and clean before lockup.

Item 6

Scent + air is neutral; no sting, no plug-in air freshener

No cleaning-product sting across any room. No plug-in air freshener at any tier of the home. Thermostat reset to the documented setpoint (per-property spec, not a global default). Neutral-air check on lockup — stand at the entry for 10 seconds and decide whether a guest would register "clean" vs "scents trailing in".

Residential deep clean.

2 min read · built from this page's text

Residential deep-clean standards for kitchen, bath, and floors — plus the owner-present vs owner-absent handoff delta. Sub-verticals (move-in, move-out, deep clean, recurring maintenance, post-renovation) carry the same outcome targets; the items below are the same shape across all of them.

Item 1

Kitchen: inside cabinets limited to empty-unit visits

Inside cabinets only on an empty-unit visit (move-in / move-out / deep clean on a vacant home). Otherwise wipe exteriors only — opening occupied cabinets means seeing private items, not cleaning them. Appliance exteriors + insides on every visit: oven, microwave, fridge. Countertops, sink + faucet, range hood degrease — all to the same standard whether the home is occupied or vacant.

Item 2

Bath: shower glass, chrome, tile, toilet, mirror, exhaust fan

Shower glass + chrome + tile + grout + toilet bowl + waterline + mirror + exhaust fan — every visit. Chrome gets zero-residue polish; tile and grout uniform, no darkening in corners; mirror streak-free. Exhaust-fan dusting is the detail the weekly visit misses; do not skip it on a deep clean or post-reno visit.

Item 3

Floors: baseboards, edges, vents, the corners the weekly visit misses

Baseboards, edges where the wall meets the floor, vent dusting, the corners behind furniture and around appliances. The weekly visit hits traffic lanes; the deep clean resets what was missed. Quote is per-square-footage and documented against the per-room scope so a homeowner knows what they're paying for.

Item 4

Owner-present handoff: walk-through, sign-off, photo-set optional but offered

Walk-through with the homeowner at the end. Sign-off on the room list (kitchen, every bath, every bedroom, living areas). Photo-set offered even when the homeowner is present — they can decline, but the offer is made and recorded so a later dispute is over the sign-off, not over whether photos existed.

Item 5

Owner-absent handoff: lockbox sign-off, entry timestamp, completion SMS, escalation on surprise findings

Lockbox-style sign-off with entry-timestamp photo at the door; SMS to homeowner on completion so they have the same minute the crew locks up. Phone-call escalation for any found-condition that would change the quote — water damage behind an appliance, pest evidence, a load-bearing concern — those don't wait for an SMS thread; the homeowner hears about it the same day.

Start here

New cleaner? Begin with the rubric + checklist.

The 13-gate rubric named here is where a new cleaner verifies their first unsupervised clean — observable pass conditions and exact escalation owners for any gate that cannot pass. The print-ready checklist is the consolidated, room-grouped walking list every later clean gets measured against.

Next: the consolidated checklist.

The brief above is a reference; the consolidated handbook checklist is what a cleaner carries onto every visit. Open the print-ready checklist to walk the five room-grouped sections (Kitchen, Bath, Floors, Inspection, Office) in execution order.

Open the print-ready checklist