/* ============================================================================
MOWDEW PRO — Worker mobile app (MOBILE ONLY)
Privacy-first: the Pro NEVER sees customer names — only a property label
like "Crestline Ave pool". No pricing, no payment. Just the route, auto
check-in/out, before/after + chemistry capture, and field notes to the office.
========================================================================= */
const PRO = { name: 'Marco Ruiz', role: 'Pool & garden Pro' };
// name-hidden route stops
const PRO_STOPS = [
{ id: 's1', label: 'Oak Ridge Ct', vert: 'garden', svc: 'Mow & edge', status: 'done', in: '9:06 AM', out: '9:41 AM', dur: '35 min', eta: null, geo: true },
{ id: 's2', label: 'Crestline Ave', vert: 'pool', svc: 'Pool service', status: 'onsite', in: '10:12 AM', out: null, dur: null, eta: null, geo: true },
{ id: 's3', label: 'Brookhaven Ln', vert: 'garden', svc: 'Mow & blow', status: 'upcoming', in: null, out: null, dur: null, eta: '11:15 AM', geo: true },
{ id: 's4', label: 'Marin Vista', vert: 'pool', svc: 'Pool service', status: 'upcoming', in: null, out: null, dur: null, eta: '2:30 PM', movedFrom: '12:30 PM', geo: true },
{ id: 's5', label: 'Cypress Ct', vert: 'pool', svc: 'Pool service', status: 'upcoming', in: null, out: null, dur: null, eta: '1:20 PM', geo: false, isNew: true },
];
// field notes sent to the office (owner), not the customer
const PRO_NOTES_LOG = [
{ id: 'n1', label: 'Crestline Ave', vert: 'pool', t: 'Customer asked if we can add a monthly filter deep-clean. Routing to you.', at: '10:31 AM', status: 'sent' },
{ id: 'n2', label: 'Oak Ridge Ct', vert: 'garden', t: 'Back gate latch is loose — flagged for the owner to mention.', at: '9:38 AM', status: 'seen' },
{ id: 'n3', label: 'Marin Vista', vert: 'pool', t: 'Skimmer basket cracked, replaced from truck stock.', at: 'Yesterday', status: 'seen' },
];
function proChip(s) {
if (s.status === 'done') return Done;
if (s.status === 'onsite') return On-site;
return Upcoming;
}
/* privacy banner */
function PrivacyNote({ style = {} }) {
return (
Customer names stay private. You see property labels only.
);
}
/* ============================== PRO · TODAY / ROUTE ==================
Calm by design: ONE stop — the active (or next) one — gets the hero
treatment and the only button. Every other stop is a quiet numbered row.
No status pills; record-mark type only. */
function ProToday({ go, openFab, toast }) {
const doneCount = PRO_STOPS.filter(s => s.status === 'done').length;
const active = PRO_STOPS.find(s => s.status === 'onsite') || PRO_STOPS.find(s => s.status === 'upcoming');
const av = VERT(active.vert);
const onsite = active.status === 'onsite';
return (
}>
Tue, May 12 · {doneCount} of {PRO_STOPS.length} done
Hi, Marco
{/* map */}
{}} />
{/* heading-to-next — ETA only, no live trail */}
{/* THE one thing that matters now */}