WheelsEye · App-first support
Sixty thousand tickets a month, and a phone call for every one.
How I moved India's largest fleet platform from agent-led support to an app-first, increasingly automated one: the flows, the logic under them, and what changed.


- Role
- Product UX designer, end-to-end system design
- Scope
- Operator app support, ops console, decision logic
- Surfaces
- Android, iOS, Operator Web, internal console
- Shipped
- Phase 1 · 22 June · Phase 2 · 25 August
The problem
The app could already do it. Operators still called.
Problem statement
Let operators raise, track and resolve their own issues in the app, so that starting there is easier than calling, for an operator on a highway and for the agent behind them.- No self-serve start. For most issue types the only way in was to call, and an agent typed the ticket.
- ~60,000 tickets a month across GPS, GPS Pro, Diesel Sensor and FASTag, arriving through many channels.
- CC and KAM teams spent their day creating tickets and answering "any update?" instead of resolving.
Entry points were fragmented, and several high-volume issue types had no route in the app at all.
What I found
The old Help Centre pushed people to call.
I audited the existing screens before designing anything. Calling was the biggest thing on the page, chat sat inside a long issue list, and a raised ticket said little more than "contact support".
Help Centre · before

A raised ticket · before

The core problem
What made it worse

And behind the phone
Agents couldn't pick up where a colleague left off.
Each order opened into raw installer assignments and a scroll of status changes. Nothing said why a ticket was stuck, so every call started from zero and the second agent re-asked what the first had already learnt.
The redesign · screen space
One Help & Support page, ordered by intent.
Same content, re-weighted. Each bracket is measured on the shipped screens: how much of the page each job gets, before and after.
Before

Raise via chat
0%→28%From a list item to the top of the pageCall
15%→8%Still there, by name, as a choiceOngoing tickets
21%→51%With status and the next stepAfter

Help & Support · central page
One door. A person behind it.
- Raise Issue is the only primary action; the KAM stays one tap away by name.
- Live tickets carry their state and next step, so there's nothing to call about.
- Every card uses the same five states, each with one clear action or proof.
The ticket card · five states
In progress

Verifying documents

Action needed · re-upload

Resolved · rate it

Rejected · with proof

Raising an issue · FASTag wrong toll deduction
A guided chat that answers before it tickets.
- The operator starts it. Service, issue, vehicle, then the exact transaction from the last 30 days: tap, don't type.
- The system checks first. The debit is compared with the current toll rate, assured by NPCI. If it's right, the operator gets an answer, not a ticket.
- "I still want to raise the ticket" stays available, and then asks for the right proof once, up front.
- The ticket arrives with the bank's timeline and shows up on Help & Support straight away.
































Resolve without a ticket · unable to log in
The data said it was self-solvable, so I gave control back.
Operators who didn't get an OTP had to call us to log in. Ticket data showed a handful of causes they could fix themselves.
- "Having trouble logging in?" lists five fixes, most likely first.
- Each fix shows exactly where to tap on their own phone, not a paragraph of instructions.
Catch it where it happens · diesel sensor
Ask "is this right?" on the reading itself.
A wrong fuel reading used to surface as a phone call days later. Now the fuelling card asks, and a "No" turns straight into a structured report. The same path exists in chat.



After raising · the ticket journey
Every state says what happens next.
One ticket sheet follows the issue from report to rating. The strip under the title always answers the operator's first question: when it will be fixed, what they need to do, or how it went.
- The current step sits on top as a card; everything that already happened stays below with a timestamp, so nothing feels lost.
- The technician is a person, not a status: name, phone number, place and time slot are all on the ticket.
- A failed visit explains itself and turns the strip into Action Pending with one button: Reschedule visit.
- Rating happens on the ticket, in the strip that showed the expected resolution date, not in a separate survey.
Status where the problem lives · contextual touchpoints
Operators shouldn't have to go looking for a ticket.
Each product shows its own tickets where the operator already is: on the vehicle's map, on the diesel page, on the FASTag page, and on home.
- The ticket follows the asset, not the menu. Each page shows only the tickets that belong to it.
- Open it in place. The same ticket sheet opens over the page, so context is never lost.
Escalation nudge on home
When we're waiting on the operator, say so on home.
A single strip above the bottom nav carries whatever needs the operator now, with its own action. It sits on both the new and the old home layouts.
- One strip, one action: Upload again, View & pay, or the OTP the technician needs to close the job.
- Time is shown, not promised vaguely: "12 PM – 2 PM", "2h 34m".
The five nudge cases

Closing the loop · feedback
Low ratings come with a reason.
- Rating is the last message of the chat, not an email a day later.
- A low score opens six specific reasons (technician late, too many follow-ups, visit scheduled too late…), pick up to two.
- "Others" takes a voice note or text. For operators who'd rather speak than type, that's the difference between feedback and silence.
AI for the agents · Customer 360
The call drops. The context doesn't.
Calls broke off mid-way, and an operator who rang back reached a different agent who started cold. An AI summary now does the handover: why the ticket is stuck, what changed, and the one thing the agent on the line can unblock.
- The old console had no place for AI. It was built around one order: a wall of installer assignments and status changes on a single long scroll. A summary dropped in there would have been one more block for the agent to scroll past mid-call.
- So the console was rebuilt around the caller. The agent searches the mobile number and the page opens on that operator. The AI summary gets a fixed rail that stays in the same place on every screen.
System-level · the logic under each chat
Every design started as a decision tree.
Before any screen, I mapped each high-volume issue as a tree: every question, every branch, every dead end closed. The chat screens are that tree, drawn for an operator.
| Check in the tree | Where it runs | What it prevents |
|---|---|---|
| Duplicate check | Before any intake | A second ticket for an issue that's already open |
| NPCI toll rate | Wrong toll deduction | Tickets for debits that were correct |
| Balance branch | FASTag closure | Refunds sent down the wrong path |
| RC via OCR + Vahan | Vehicle number change | Invalid details reaching an agent |
| OTP | Any irreversible step | Changes without the owner's consent |
| Slot + pre-payment | Field visits | Wasted technician trips |
Impact · Phase 1, four weeks after launch
Tickets operators raised themselves went from 40% to 60%.
Weekly share of tickets created through the app and web, 25 May to 27 July. Phase 1 launched on the Play Store on 22 June with 21 of 78 issue types, covering ~74% of volume.
Behaviour change like this usually takes about three months to settle; these are early indicators, not the full business impact.
Impact · Phase 2, live 25 August
From agent-assisted to app-led and automated.
Coverage
98% of ticket volumeVehicle number change, FASTag closure, AIS escalations, name change and login issues added.Real-time resolution
~32% of all ticketsResolved inside the chat the moment the operator asks, so no ticket is ever created: vehicle deboard, number change, transfer, name update and false fuelling.Resolution speed
Same-day non-ops: 50% → 66%Automated resolution already saves 25% of the resolution team's bandwidth.Workload · estimate
~25% fewer CC/KAM callsAt steady state across Phase 1 and 2, roughly ₹80 lakh a year.| Problem | What I designed | What moved |
|---|---|---|
| P1 Couldn't self-initiateTHE CORE PROBLEM | Operator-started flows for 98% of volume: guided chat, self-fix for login, and nudges on the diesel card and home. | 40% → 60%tickets operators raised themselves Measured |
| P2 High cognitive load | One Help & Support page ordered by intent and a tap-only chat. | Chat 0% → 28%of the page, measured on the screens Design measure |
| P3 Inaccurate tickets | Checks built into the tree: NPCI toll rate, OCR, Vahan, duplicates. | ~32%resolved in real time, no ticket Measured |
| P4 No resolution visibility | Ticket journeys, contextual touchpoints and the home nudge. | −10% · −14%follow-up calls · inbound calls Measured |
| P5 Context lost between agents | Customer 360 with an AI summary and one timeline per ticket. | Shippednot measured separately yet Qualitative |
Reflection & what's next
The design was never the hard part. The habit was.
For supported flows, CC and KAM teams now route operators to the app instead of creating tickets for them, and agent-created tickets are limited to genuine exceptions. Getting there took internal rollout as much as screens.
If I did it again, I'd design the agent-side habit change alongside the operator flows from day one.
- 22 JunPhase 1 · Android21 issue types, ~74% of volume. iOS on 20 July, Operator Web in August.
- 25 AugPhase 298% coverage and real-time resolution for ~32% of tickets.
- NextAn AI support agent, available 24×7Answer information queries first, then the long tail of 55 issue types, and eventually make the app the default for the ~1.25 lakh monthly inbound calls.