When you book a charging session, the provider needs to accept it. But how fast? Until today, there was no way to tell whether a provider confirmed instantly or took their time. The booking list showed the status and created date, but no insight into the provider's responsiveness.
That gap is now closed. Every booking card at /bookings now includes a compact cyan pill badge showing the provider response time — computed as the difference between when the booking was created and when the provider confirmed it.
The badge sits in the booking card header, alongside the date. It uses the same pill shape and font as the status badge but in the primary (cyan) color scheme: "Accepted in 12s", "Accepted in 3m", "Accepted in 1h", or "Accepted in 2d" depending on the elapsed time. The units auto-scale from seconds through minutes, hours, and days for readability.
Under the hood, the backend now stores a `confirmed_at` timestamp on each booking. When a booking is created with status "confirmed" (the current auto-confirm flow), `confirmed_at` is set to `NOW()` alongside the auto-generated `created_at`. The `GET /api/bookings/mine` endpoint computes the difference in Rust and returns a human-readable `provider_response_time` string. Both `confirmed_at` and `provider_response_time` are included in the response — the raw timestamp is available for clients that want to compute their own formatting.
For bookings created before this feature was deployed, `confirmed_at` is `NULL` and the response time badge is simply not displayed — no broken UI, no empty state. Likewise, bookings that are not yet confirmed (pending status) won't show a badge until the provider accepts.
Why does this matter? Response time is a signal of reliability. A provider who accepts in seconds is probably attentive and engaged. A provider who takes hours might not be reliable when you actually need a charge. Over time, users can factor response time into their booking decisions — and we plan to surface it more prominently in the provider search results and vehicle detail cards.
This is an infrastructure change as much as a UI change. The `confirmed_at` column sets the stage for future features: automatic cancellation of unconfirmed bookings after a timeout, provider response time leaderboards, and notification triggers when a provider hasn't confirmed after a certain threshold. The foundation is laid.