New tab backed by dashboard_api /analytics/fuel-fills(+/recent): KPI strip
(litres, KES spend, fills, KES/L, vehicles), spend+litres daily trend, per-vehicle
table (incl. km/L), by-department breakdown, recent fills. Shares the filter state
plus new department/fuel-type dropdowns; lazy-loads on first open. Recent-fills
time renders the Africa/Nairobi wall-clock value directly (no double tz shift).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- #view-tickets is now a MapLibre map: live vehicle DOM markers (ported from
FleetNow) + INC (red) / CRQ (blue) ticket circle layers from /webhook/tickets
- Layers toggle with counts; open/all status filter; lazy-init + map.resize()
- Header KPI strip shows INC/CRQ open + vehicles/moving on the Tickets tab
- Logistics analytics tab unchanged
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Wrap the existing analytics dashboard as the Logistics tab
- Add a scaffolded Tickets tab (per-tab KPIs, recent-tickets + by-status
cards, informative empty state)
- Shared header KPI strip swaps per tab; tickets load lazily on first open
- Ticket data source left as a dashboard_api integration point — no S3
credentials embedded in the static SPA
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auto-deploy verified (push->Forgejo webhook->Coolify->Traefik). Reverting the
test meta marker.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Harmless <meta> marker to confirm a push to staging triggers a Coolify
redeploy. Safe to revert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>