MEGAINFRA-WEBAPP/scripts
DEIs 87f75dd98f feat(plant): fleet map page with GPS-denormalised vehicles, clustering, and tile switcher
Adds /dashboard/plant/map: a Leaflet view of every vehicle scanned from
the MEGA Clock kiosk, plotted at its last known position.

Schema
- vehicles.last_latitude / last_longitude / last_scanned_at /
  last_location_accuracy_m denormalised off fuel_logs so the map page
  renders every vehicle in a single query. Same best-effort pattern as
  attention_dismissed_at; updated by /api/clock/vehicle-scan after every
  successful scan. PB init defaults new number cols to 0 (not null) —
  filter uses 'last_latitude > 0 || last_latitude < 0' to mean 'real fix'.
- Indexed via idx_vehicles_last_scanned.

Map UI
- Custom SVG markers per unit_type: car silhouette for fuel, tractor
  silhouette for plant, 24x24, drop-shadowed.
- Clustering via react-leaflet-cluster over Leaflet.markercluster.
  Cluster icons colour-ramp with size (green->sky->amber->rose) and
  scale 32->54px.
- Three-button base-layer switcher: Street (OSM), Dark (ESRI Dark
  Gray Canvas — CartoDB watermarks tiles without a key), Satellite
  (ESRI World Imagery). Last choice persists in localStorage.
- Site pins: small purple map-marker divIcon, click flies the map to
  zoom level 15.
- Empty-state is a floating chip on the map rather than a full-page
  card so the map is always visible.

APIs
- /api/clock/vehicle-scan: stores the GPS fix on the fuel_logs row
  AND denormalises onto the vehicle when present; missing-coord
  scan leaves last_* untouched.

Sidebar: new Map entry under Plant group.
2026-09-22 21:39:25 +02:00
..
migrations feat(plant): fleet map page with GPS-denormalised vehicles, clustering, and tile switcher 2026-09-22 21:39:25 +02:00
build-icons.mjs feat(clock): replace icon with clock-on-cube design + OG share preview 2026-09-13 21:55:40 +02:00
build-og-image.mjs
compare-dn-pipelines.mts fix(dn): let staged ingestion run against the real PocketBase schema 2026-09-20 23:49:58 +02:00
dn-board.mts chore(dn): add two read-only checks for the staged rollout 2026-09-21 01:00:44 +02:00
dn-snapshot.mts chore(dn): add two read-only checks for the staged rollout 2026-09-21 01:00:44 +02:00
download-all-delivery-notes.py fix(dn-pipeline): enhance product resolution by incorporating article numbers 2026-09-17 22:59:09 +02:00
generate-plant-hours-template.ts fix(plant-hours-template): ESM-safe __dirname + freeze note 2026-08-28 12:55:08 +02:00
migrate-delivery-notes-ocr.py feat(delivery-notes): enhance delivery note upload and processing 2026-08-26 15:33:30 +02:00
migrate-dn-item-units.py chore: final review polish (trailing newlines, JSDoc, changelog tense) 2026-09-17 12:49:37 +02:00
migrate-plant-hours-backfill-vehicle.py refactor(plant): enhance PlantPage and PlantView for fuel log integration 2026-09-02 12:36:10 +02:00
patch-next-dev-blocker.cjs
pb-add-dn-alias-keys.py fix(dn-pipeline): key aliases on what actually identifies a product 2026-09-17 22:47:55 +02:00
pb-add-dn-batch-uploaded-at.py fix(scripts): backfill uploaded_at from real sources, add a dry run 2026-09-17 21:25:33 +02:00
pb-add-dn-batches.py fix(dn-batches): heal created/updated fields on existing live collections 2026-09-17 15:17:17 +02:00
pb-add-dn-doc-type.py feat(dn-pipeline): classify document type instead of assuming delivery note 2026-09-17 21:45:08 +02:00
pb-add-dn-item-aliases.py feat(dn-pipeline): add the remembered product alias table 2026-09-17 21:34:37 +02:00
pb-add-dn-item-units.py feat(delivery-notes): add qty_raw/unit_raw/unit_converted to line items 2026-09-17 12:07:59 +02:00
pb-add-dn-note-dismissed.py feat(dn-batches): dismiss a single duplicate note, and stop erasing promoted counts 2026-09-18 00:44:57 +02:00
pb-add-dn-open-pages.py fix(delivery-notes): a stray page no longer condemns good notes 2026-09-17 21:49:16 +02:00
pb-add-dn-staged-ingestion.py fix(dn): keep an operator's correction through the next run 2026-09-20 23:55:56 +02:00
pb-add-fuel-prices.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-add-site-coordinates.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-add-site-job-start-date.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-backup-collection.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-bootstrap-schema.py feat(plant): fleet map page with GPS-denormalised vehicles, clustering, and tile switcher 2026-09-22 21:39:25 +02:00
pb-delete-fixed-costs.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-enable-batch-api.py fix(dn): let staged ingestion run against the real PocketBase schema 2026-09-20 23:49:58 +02:00
pb-relax-dn-zero-fields.py fix(dn): let staged ingestion run against the real PocketBase schema 2026-09-20 23:49:58 +02:00
pb-relax-rules.py feat(clock): add clock_events PocketBase collection 2026-09-12 00:14:13 +02:00
pb-show-fixed-costs.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-show-sites.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb_env.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00