FleetPilot — Current Status
Updated: 2026-06-17
Update this file at the end of every session.
Where we are
Deep into Phase 2. The core product is built and functional. The PCN AI pipeline is complete and hardened, and violations urgency now accounts for discount deadlines throughout the UI. Incidents has just been fully revamped to match the design system and the Violations triage/expandable-row pattern, including a real link to the matched booking. Inspection photos are now organised into named sections (front/rear/sides/interior/other) per booking.
Recently completed (last 2 weeks)
| Ticket |
What |
Date |
| SAA-118 |
Incidents page revamp — triage hero (3 lanes), filter pills, expandable rows, inline edit (single save), renter/booking cards with real link to /bookings/[id], detail page consolidated to one form, full design token migration (no hardcoded grays/hex) |
2026-06-17 |
| SAA-95 |
Inspection photo sections — front/rear/driver/passenger/interior/other per phase (12 slots total), new section column on inspection_photos, section-scoped lightbox, X to dismiss failed uploads, stuck-at-0% timeout fix |
2026-06-13 |
| SAA-117 |
Violations triage — "Expiring discount" amber lane, click to filter, hidden at zero |
2026-06-13 |
| SAA-116 |
Violations urgency now reflects effective deadline (discount when sooner and active, full due date otherwise) — effectiveDeadline() helper in violations-types.ts |
2026-06-13 |
| SAA-115 |
Surface discounted due date in violations UI — stat strip primary/secondary, table sub-label, detail metadata row; lib/violations/discount-due.ts helper extracted |
2026-06-12 |
| SAA-114 |
PCN review form fixes — same-day discount deadline now valid (> not >=); discount fields clearable (min removed); empty string → null confirmed in all actions |
2026-06-12 |
| SAA-113 |
Cross-field validation on PCN review form + Claude calculates discounted_due_date from "within N days" phrasing |
2026-06-12 |
| SAA-112 |
Bug: PGRST204 on violation insert — resolved by running supabase db push after SAA-86 migration |
2026-06-12 |
| SAA-86 |
PCN discount tiers — discounted_amount_gbp + discounted_due_date on violations; Claude extraction, scan flow, review form, expanded panel, detail page, all write actions |
2026-06-12 |
| SAA-81 |
Duplicate PCN detection — processing-time + confirm-time dedup, amber badge, warning banner, operator override |
2026-06-09 |
Active / In Progress
Nothing currently in progress.
Next up (prioritised)
- SAA-119 — Incidents auto-match to booking/customer based on incident date + vehicle, with non-blocking warning on manual override that conflicts with booking dates. Builds directly on SAA-118.
- SAA-80 — Toast notifications. Foundational UX primitive.
- SAA-79 — Navbar revamp + wire badge counts to real data.
- SAA-46 — UK GDPR compliance. MUST be done before first real operator onboards.
- SAA-31 — Social DM pipeline (Instagram → bookings). Big Phase 2 differentiator.
- SAA-65 — Driver identity + licence verification (Pro feature).
- SAA-56 — DVLA reg plate auto-fill on vehicle add.
- SAA-44 — Inline vehicle availability calendar on booking form.
- SAA-32 — Live GPS hub (real tracker API integration). Phase 3.
Backlog (all open tickets)
Improvements (labelled)
| Ticket |
Title |
Notes |
| SAA-79 |
Navbar revamp |
Fix hardcoded badge numbers first |
| SAA-80 |
Toast notifications |
Foundational UX primitive needed everywhere |
| SAA-119 |
Incidents auto-match + date-conflict warning |
Builds on SAA-118 (done) |
Phase 2
| Ticket |
Title |
Notes |
| SAA-31 |
Social DM pipeline (Instagram) |
Major differentiator, needs Instagram API research |
| SAA-44 |
Inline vehicle availability calendar |
Blocked by SAA-91 (done) |
| SAA-46 |
UK GDPR / legal compliance |
Do before first real operator |
| SAA-48 |
Violations + incidents on booking detail |
Partially covered by SAA-49/63/118 |
| SAA-56 |
DVLA reg plate lookup |
Improve vehicle add UX |
| SAA-58 |
PCN queue reminder letters |
Improve PCN flow |
| SAA-65 |
Driver identity + licence verification |
Pro feature, DVLA KADOE + Credas |
| SAA-67 |
Admin vs employee permissions |
Fine-grained RBAC |
| SAA-68 |
Tracker brand display in UI |
Show tracker logo in fleet/bookings/live |
| SAA-69 |
Vehicle tracker/immobiliser config |
Add tracker to vehicle profile |
Phase 3
| Ticket |
Title |
| SAA-32 |
Live GPS hub (real tracker API) |
| SAA-33 |
Smart location intelligence |
| SAA-66 |
Speed/time graph |
Phase 4
| Ticket |
Title |
| SAA-70 |
Customer-facing booking layer (white-labelled) |
Evergreen / Standards
| Ticket |
Title |
| SAA-20 |
Ideas backlog |
| SAA-29 |
Feature ideas backlog |
| SAA-35 |
Pricing strategy |
| SAA-37 |
Mobile standard (living reference) |
Known issues / tech debt
- SAA-48 — violations + incidents on booking detail page partially done but not fully wired
- Email notifications stubbed (Resend not configured) — violations recovery notices log only
- Real GPS not wired — live tracking uses mock data from
lib/mock/fleet-positions.ts
- Mapbox tiles not integrated — live tracking uses placeholder SVG map
- Navbar badge counts are hardcoded — SAA-79 will wire to real data
- Incidents booking-match select (manual flow, SAA-118) shows the vehicle's 20 most recent bookings rather than date-filtering to ones covering
incident_date — flagged with a TODO in code, to be tightened as part of SAA-119
What's been validated
- Multi-tenant auth with Supabase + FastAPI JWT middleware — working in production
- PCN scan pipeline — tested with real PCN documents (Croydon Council, TfL)
- Cloud Tasks job queue — working with retry, hardening, and dedup (SAA-81)
- Document upload to GCS — working with signed URLs
- Bookings create + detail page — fully wired (SAA-89, SAA-91)
- Violations end-to-end — triage, smart-match, dedup, archive, queue dismiss, discount tiers, inline editing, due date extraction, cross-field validation, discounted due date UI, effective-deadline urgency, expiring-discount triage lane (SAA-74 through SAA-117)
- Incidents end-to-end — triage hero, filter pills, expandable rows, inline edit, auto-no-reload renter/booking updates, linked booking card to
/bookings/[id] (SAA-118)
- Inspection photos — sectioned upload (front/rear/sides/interior/other), real GCS storage, signed URL reads, section-scoped lightbox (SAA-61, SAA-94, SAA-95)
- Photo upload error-state UX — dismiss without retry, auto-timeout on stalled 0% progress (SAA-95 follow-up)
- Login security — httpOnly cookie, no URL params (SAA-108)
Pricing (not built yet)
| Tier |
Price |
Fleet |
| Starter |
£49/month |
≤10 cars |
| Growth |
£99/month |
≤25 cars |
| Pro |
£179/month |
≤50 cars |
14-day free trial on Growth, no card required.
Validate with first 3-5 real operators before hardcoding.