Build the Route Optimization route planner UI in groombook/web:
- New /admin/routes page with date picker + groomer selector
(auto-filtered for groomer role via GET /api/staff/me)
- react-leaflet + OpenStreetMap tiles, lazy-loaded so Leaflet ships
as a separate code-split chunk (RouteMap-*.js / .css)
- Map with numbered teardrop divIcon pins + route polyline, auto-fit
bounds; numbered pins avoid the Leaflet default-marker asset issue
- Stop-list panel: per-stop card with time, client name, address,
travel time from previous stop, and tight-schedule conflict flag
- Total travel time + distance summary + route status badge
(draft / optimized / in_progress / completed)
- "Optimize" button wired to POST /api/routes/optimize
- Reads daily route via GET /api/routes/daily?staffId=&date=
- Tests for stop rendering, summary, role auto-filter, optimize call
- Updated UAT_PLAYBOOK.md §5.28 — Route Planner Page
Co-Authored-By: Paperclip <noreply@paperclip.ing>