Airtel · Travel Mode · Freelance

You've landed. Is your phone working?

the first tap is an argument. every tap after is a door.

Airtel's app sells a roaming pack, then says nothing until the bill. I redesigned roaming in Airtel Thanks around the questions a traveller asks, in the order she asks them. Then built it, so you can try it.

Mobile UX · Research to code · Motion

Timeline
July 2026, one month
Team
Solo
Role
Product designer
Status
Not launched
Research
Desk research, no interviews
Try the prototype

Every screen on this page is a capture of the working prototype. Open it and try any trip.

The problem

Imagine you fly to Singapore on Tuesday.

Then Malaysia, then the UAE. Nine days. You're on postpaid, and every bank OTP you get comes to this number. So before you go, you open the Airtel app and tap International Roaming. A web page starts to load.

A list of packs. Nobody asks where you are going or for how long, so working out which one covers nine days is on you. The only thing you can edit is your mobile number. You pick ₹2,999.

The current Airtel app: International Roaming opens a web page that says Please wait, we are loading the page for you.
  • cannot know you have landed
  • cannot hold on to your trip
  • cannot reach you
A web page, not a screen.

A green tick. Request received. Has ₹2,999 left your account? Is a request a yes? It doesn't say. It says the pack will switch on when you land, and that to manage it, you follow three steps by hand.

Then nothing, until the plane door opens. The device settings you need were shown back at checkout. If the phone doesn't connect, the support chat needs data you don't have, and the WhatsApp number cannot be tapped.

The current Airtel app after buying: a green tick over Request received for ₹2999 pack, then three manual steps to manage the pack.
A success tick for a request. I could not tell whether ₹2,999 had left my account.

The brief said awareness and adoption of roaming packs were low. Buying one in the live app showed the sharper problem. Airtel has already flattened foreign rates into one simple pack structure, so "which pack is right for me" is answered commercially. It is not answered in the interface, and after the purchase the app goes quiet.

The current experience is a catalogue. What travellers need is a companion.

That traveller is who I designed for. The rest of this page follows her trip, one question at a time.

Research

No travellers to interview. So I read where the worry shows up.

Seven public sources, none of which needed anyone's permission. Search and complaint data come from people who hit problems, so I read them as a map of where worry sits, not how often things break. Each worry became one of her questions.

Before you fly

  1. 01Where is roaming in this app?

    Recorded walkthrough · app reviews

    International Roaming opens a web page inside the app. And not one of the app reviews I read mentioned roaming at all.

  2. 02Which pack covers my trip?

    MyJio, walked myself

    Jio asks for the destination and the dates, then filters its plans. Airtel asks for neither.

  3. 03Is this charging me now?

    Google autocomplete

    Type "roaming usage" and all ten suggestions are rewritten to charges.

The moment she lands

  1. 04Is my phone working? Will my OTPs reach me?

    Google autocomplete · public complaints

    Type "roaming not" and the suggestions are countries: Bahrain, USA, Nepal, Canada. "Want to use it for getting important OTPs here in Canada."

Every day after

  1. 05How much do I have left?

    Airtel terms

    Roaming usage is "not available with Airtel in real time".

  2. 06Why was I charged for that?

    Airtel FAQ · public complaints

    Without a pack, a one-day pack switches on by itself. "Sir its activated automatically."

  3. 07What happens when the pack runs out?

    Airtel terms

    The credit limit is not monitored while roaming.

Two segments. They diverge on what happens when benefits run out.

Frequent traveller · postpaid

Short work trips. Wants it handled, and fast.

What breaks: silent billing. The bill is the first she hears of a charge she never started. So every charge is named with its cause.

Occasional traveller · prepaid

One longer trip. Compares carefully, even against a local SIM.

What breaks: being cut off. Prepaid stops when the allowance is gone. So it warns early, and exhaustion gets its own screen.

The whole flow is postpaid. Prepaid is written up in trade-off 02, not designed.

Data is the thing they buy. The number is the thing they need.

OTPs, bank messages and UPI all depend on the Indian number. No eSIM can provide it.

Before you fly · 1 of 7

Where is roaming in this app?

In the category row, as a Travel tile. A state the app enters, not a place she has to find.

Travel Mode is true a few days a year. So the question was what kind of thing it should be. Four options, one test.

Chosen

It extends a control the app already has for filtering this surface. Entering is a tap on Travel, leaving is a tap on All, so there is no exit to design and no way to feel trapped. And it can be selected for her on arrival.

The test: can Travel Mode become a state the app enters on its own, or does she have to go and find it? Only the tile answers yes. It can be selected for her on arrival, which is what lets the app speak first.
Prototype home screen before a trip: the category row reads All, Travel, Wi-Fi, Postpaid, Bank, and International Roaming is a row that says your plan doesn't work outside India.
Before a trip. Travel joins All, Wi-Fi, Postpaid and Bank.

Before you fly · 2 of 7

Which pack covers my trip?

The one her dates need. So the app asks for the trip first, and the pack comes second.

Today the app sells a pack to a number. There is no idea of a trip anywhere in it.

Every pack covers the same 180+ countries, so asking where she is going filters nothing. I still ask. It tells her she is covered. It sizes the pack to her dates instead of leaving that maths to her. And it gives the app a trip to hold on to: without dates there is no day 3 of 9, no arrival to spot, no alert before the pack ends.

The recommendation is computed, not written. Change the trip.

A pack that ends before she flies home loses 25 points. Every unused day costs 1.5. Minutes matter from day five. Price is judged per day.

Four trips here. Any trip in the prototype.

Packs for a 9-day trip to Singapore, Malaysia and UAE: ₹2,999 for 10 days is recommended, covers all three countries and outlasts your 9 days by one.
"Outlasts your 9 days by one" is checkable. "10 days, unlimited" is not.

Before you fly · 3 of 7

Is this charging me now?

No. Postpaid does not pay here, so the screen says what will happen instead.

The whole flow is postpaid, so nothing is paid when she confirms. Once she picks a pack, the review screen says what will happen instead: the amount, the GST, which bill it lands on, when that bill is due, and that the pack does not start until she is out of India. "Nothing is charged yet" sits under every button before this one.

The button, three ways

Pay ₹3,519

Reads as a payment. Nothing is taken now.

Confirm request

What the app says today. A request can be declined, so she does not know if she is covered.

₹3,519 on your bill dated 2 Sep

The fact she is agreeing to, in the words the bill will use. If it is wrong, she sees it now and not in September.
Review screen: ₹2,999 for 10 days, charged to your postpaid bill, ₹2,999 plus ₹520 GST, ₹3,519 added to your bill, shows on your 2 Sep bill, due 12 Sep. The button reads ₹3,519 on your bill dated 2 Sep.
Review. Enough about the money that she knows nothing is taken now. The button carries the fact, not a verb.

Nothing was paid, so nothing is celebrated. One fact settled, two dated.

Today she confirmed the pack. On 25 August the trip starts. On 2 September the bill arrives. In that order, because what she is actually asking is whether the bill comes before the trip or after.

The version I submitted resolved a tick and grew the timeline. Watching it, the tick still read like a receipt. The problem was never the tick. It was the ring blooming out of it. So the mark became a stamp, and the stamp got rules.

The word is Confirmed.

Never Paid, Success or Done. Stamps mean recorded: a visa, a boarding pass.

No ring, no loop.

One light pass, once, after it settles. A loop turns arrival into shimmer.

Uphill, not downhill.

It lands at −7°. A clockwise tilt reads as deflating.
Confirmation screen: a Confirmed stamp, your phone will work in Singapore, and a timeline: now pack confirmed, 25th Aug your 9 day trip starts with nothing paid yet, 2nd Sep ₹2,999 plus GST on your bill.
Confirmation. Quiet on purpose. It says Confirmed, not Paid or Done, because on postpaid nothing has been paid yet.

The moment she lands · 4 of 7

Is my phone working? Will my OTPs reach me?

Her phone tells her before she asks. Arrival is where the worry peaks, and today the app has nothing for it.

Type "roaming not" into Google and the suggestions are country names, typed by people already abroad with a phone that is not working. So the app speaks first: she did not open it, she landed and it told her. The number comes before the data on purpose. Her worry is not gigabytes, it is whether her bank OTPs will still reach her.

Lock screen, Tue 25 Aug: You are in Singapore, and you are online. Your pack went live by itself. Day 1 of your 9-day trip, unlimited data, about 100 minutes of calls a day.
She did not open the app. It spoke first, with the day count the dashboard will use.

The screen it opens

Everything on that screen was saved to her phone before she flew, so it opens with no internet. The help card carries the free number and lives on the lock screen. WhatsApp is there because it works on airport Wi-Fi when the SIM does not.

Failure told in the same language as success.

Arrival screen, connected: You're in Singapore and you're connected. Your number is working, bank OTPs and UPI will reach you here. Your ₹2,999 pack just started.
Tapping it opens this. The number comes first: her OTPs will reach her. The plane flies the arc and lands on the flag.

Every day after · 5 of 7

How much do I have left?

Data is unlimited on this pack. Minutes and texts are what run out, so those lead.

Airtel's terms say usage can reach them up to four hours late. So every figure is an estimate and the screen says so. The minutes bar drains from full, because she is watching a balance disappear, not a total accumulate. Scrub through the trip.

Unlimited data marches. It never fills.

A bar that fills says there is a limit. A moving dotted line says there is nothing to fill towards.
Trip dashboard, day 3 of 9: 45 of 100 minutes left today, 83 texts, 8.4 GB used.
Day 3 of 9
Day three: 45 minutes left today, 83 texts and 8.4 GB for the trip.

When it runs low

The red zone is a fifth, not a quarter.

It was 25% and read as alarmed far too often. 25 of 100 with a week to go is a normal Tuesday. A fifth is where the figure is worth a colour.
A heavier trip on day 8: 18 of 100 minutes left today and 13 of 100 texts, both in red, with a note that usage reaches Airtel up to four hours late.
A heavier trip on the same day 8. Minutes and texts under a fifth, both red.

Every day after · 6 of 7

Why was I charged for that?

The cause sits beside every charge, and the banner arrives the day it happens, not a month later on the bill.

"My minutes were still being used as calls were getting diverted to voicemail," one traveller wrote. Every call forwarded to voicemail in India is billed as an outgoing roaming call. Today she learns that from the bill, with no reason beside it.

Lock screen, Thu 27 Aug: ₹41 for calls you didn't take. Three calls were forwarded to your voicemail in India. Each one is billed as an outgoing call.
The same day. The banner names the cause, because that is the difference between a bill and a betrayal.

Here the banner arrives the same day and names the cause, and the dashboard lists it under the pack: ₹35 for three calls forwarded to voicemail, ₹6 for a call she declined, which still connects. The ₹41 on the banner is the same ledger total, so the two cannot disagree.

People are not angry about the amount. They are angry that nobody told them why.

Below the meters on day 3: this trip so far ₹3,040, ₹2,999 pack plus ₹41 you didn't start, itemised as ₹35 voicemail divert for 3 calls forwarded and ₹6 for a call you declined.
The cost so far. The pack, then ₹41 she did not start, each with its cause.

Every day after · 7 of 7

What happens when the pack runs out?

Nothing is cut off. She hears two days before, and after it ends every rupee is counted with its cause.

On postpaid nothing stops when the pack ends. Calls, texts and data carry on at standard roaming rates, and Airtel's terms say the credit limit is not watched while she roams. So the risk is not being cut off. It is a bill nobody warned her about. Two days out, the banner says the pack is ending and that nothing happens automatically. When it ends, "still work" comes before the rates.

Lock screen, Tue 1 Sep: Your pack ends in 2 days. ₹2,999 adds another 10 days. Nothing happens automatically.
Two days out. Worked out from the pack days left, so it only says tomorrow on the day that is true.

Behind every answer

One trip, every surface. A banner cannot say something the dashboard doesn't.

Six notifications and a Live Activity, all derived from the same trip object as the dashboard. Nothing is typed twice, so nothing can disagree.

One trip

  • Singapore, Malaysia, UAE
  • 25 Aug to 2 Sep, 9 days
  • ₹2,999 pack, 10 days

feeds

  • The arrival screen
  • The dashboard and its day count
  • The cost so far, with causes
  • Six lock-screen banners
  • The Live Activity

The Live Activity

The file drew the widget collapsed and nothing else, so the expanded state was built. Four fixed moments (Landed, Today, Last day, Home) rather than one cell per day, because this is read at a glance off a locked phone.

Lock screen Live Activity on Thu 27 Aug: Live in Singapore, day 3 of 9, 7 days to go, a rail from Landed to Today to Last day to Home, 45 minutes left, 83 SMS left, ₹41 extra spent.

How it was built

Built in code with Claude Code, not Smart Animate, so the per-layer timing survives and every number computes.

Two easing curves throughout. The stamp gets a spring loose enough to undershoot, because it is the one thing that makes contact. Recordings of the working prototype, beside the timing each was built to.

The first tap

about 3.8 s

A split-flap board turns "after you land" into "before you fly", then an iris opens onto the trip.

Review to confirmation

about 2 s

The confirmation slides over the review, then the stamp lands and undershoots. That undershoot is the press.

A day passes

per day

Day 3 to day 8. Minutes reset each midnight; texts and data run for the whole pack.

Swipe for the next screen

Three transitions I replaced

V1

A cross-fade into the trip.

Both screens double-exposed at half opacity. Replaced by a clip-path reveal: the incoming screen is opaque from frame one, only the circle moves.

V2

Endings coloured from the hero artwork.

A swappable asset deciding what a transition looks like. Now both wash to the screen white every root already is.

V3

A second, shorter piece for every tap after.

Delightful once, a toll thereafter. I tried a half-version for repeat taps and cut that too. The set piece plays once a load; every tap after is a plain navigation, with nothing to get wrong.

From Figma to something that runs

22 → 11

Figma screens to routes. Most screens are states of one screen.

1.17 MB

The scene-graph player I threw away. 2,790 positioned nodes, not one real input.

0

Numbers typed twice. The reason sentence, day counts and ledger all compute from the trip.

The first build replayed the Figma file: pixel-perfect, and dead. Making it functional meant some things had to disagree with the file, so every departure is written down, including the one number that changes (GST) and three places the source contradicted itself. Fidelity is checked by dropping the exported PNG over the live screen in difference blend mode. Anything that moved lights up.

What running it caught

Running the prototype against real dates caught four things a static file never shows. Each is fixed in the code.

  1. 01Minutes that never reset. The meter said daily and behaved like a total for the whole trip.
  2. 02Day 1 of 10 beside Day 1 of 9. One counted pack days, the other trip days, and neither said which. Now every count names what it counts.
  3. 03"Ends tomorrow" two days early. The banner now reads the pack days left, the same arithmetic as the dashboard.
  4. 04An end date from the wrong thing. The pack-ended screen dated the end from the trip, not the pack.

Evidence

It never launched, so there are no results to show. This is what I would measure, and the first test I would run.

Primary

Packs bought before departure

The share of roaming packs bought before she flies rather than after she lands. Asking for the trip first only works if it moves buying earlier.

Guardrail

Roaming calls to support, and bill disputes

Per thousand travellers, especially the ones that start with why was I charged. Naming every cause should bring these down, not move them somewhere else.

Leading signal

The arrival banner, opened within the hour

And the Live Activity kept on through the trip. If she opens it on landing and keeps it, the app is speaking at the right moment.

The first test I would run: five people who travelled abroad this year, on the prototype, offline, starting from the not-connected state. Is the Travel tile found without a hint? Is the arrival screen understood by someone stressed and without signal? Does naming the cause of a charge stop the urge to call support?

Trade-offs

Seven decisions I could have made differently, and what each one cost.

One thing I could not resolve. Airtel's terms do not say whether an unactivated postpaid pack still appears on the bill if the trip never happens. I designed around what is published, and made cancelling self-serve instead of a phone queue. A production version needs the actual policy.

What I would do next

This is the spine, not the product.

  1. 01Finish the flows this design points at. Add days, add data, change a pack, turn voicemail off. Each is a chevron with nothing behind it.
  2. 02Prepaid as a first-class flow. It deserves its own pass.

What this project changed in me

The honest number is less satisfying than the exact one. It is the one the bill agrees with.

  • When I cannot reach users, the published constraints are the research.
  • A confirmation is a record of what will happen and when, not a celebration.
  • Motion is an argument or it is decoration.

Ask where she is going.

Say what it costs before she taps.

Speak first when she lands.