/* ============================================================================ MOWDEW LIVE DEMO — "Reviews" (the 6th synchronized flow) Fires at PEAK TRUST — right after the invoice is paid. The homeowner is asked once; the sentiment FORKS to protect the rating: thumbs-up → posts a public 5★ review → owner notified (public) thumbs-down → a PRIVATE fix-it note → owner notified (private, off the public rating) World/actions/tracker/hints live in Mowdew Live Demo.html; per-phone UI here, mounted from the demo phone shells. ========================================================================= */ function Stars({ n = 5, size = 16, color = '#7C6FF0' }) { return ( {Array.from({ length: n }).map((_, i) => )} ); } /* ─── HOMEOWNER · the ask + sentiment fork (sits on the visit feed) ──── */ function HomeReviewCard({ world, act }) { // only at peak trust — once the month is paid if (world.invoice !== 'paid') return null; const r = world.review; if (!r) { return (
Happy with Marco's work?
Balanced water, clean pool — looked like a good one.
WE ASK SPARINGLY · ONCE IN A WHILE
); } if (r === 'up') { return (
Thank you!
Posted to Google — it helps Marco & Diego reach more neighbors.
); } // private fix-it return (
Thanks — Diego will make it right
Sent privately to Diego — he reaches out personally. Never posted publicly.
Stays between you and Diego
); } /* ─── OWNER · the review landing (sits in the Inbox tab) ─────────────── */ function OwnerReviewCard({ world }) { const r = world.review; if (!r) return null; if (r === 'up') { return (
Reviews
Emma Walsh
POSTED · GOOGLE
A new 5★ review just went live — straight to your Google listing.
); } return (
Reviews
Emma Walsh
Private feedback · just now
FIX-IT NOTE
Came to you privately — off your public rating, so you can make it right first.
); } Object.assign(window, { Stars, HomeReviewCard, OwnerReviewCard });