Live Activities for S7 Airlines — Flight Status on the Lock Screen
S7 Airlines is one of Russia’s largest airlines. In the app, passengers buy tickets, check in, track flight status, and rate their flight. I designed Live Activities so passengers could see up-to-date flight status without opening the app.
Problem
Business. After a flight, users rarely returned to the app, so S7 was missing feedback while the experience was still fresh. We wanted to lead passengers to rate the flight and test Live Activities as a new engagement channel without push notifications or opening the app.
Passengers. In store reviews and interviews, people said they lacked timely flight information — terminal, gate, and boarding time. Finding it meant opening the app or searching through email and SMS, which added friction at the airport.
Goal
Design a Live Activity that keeps current flight information visible on the Lock Screen and Dynamic Island, then leads into post-flight rating after arrival.
Patterns from other products
I looked beyond aviation: delivery, ride-hailing, sports, and travel apps were already using Live Activities across more scenarios.
The useful pattern was simple: the best widgets do not show everything. They answer the most urgent question for the current stage. That became the product principle for S7.

iOS constraints
I started with Apple’s documentation. A Live Activity has to support four presentations: the Lock Screen plus expanded, compact, and minimal in the Dynamic Island. Each comes with its own dimensions and constraints. So the challenge was not just to resize the same widget, but to keep the flight logic clear across all four presentations.

From the existing flight widget to Live Activity
The app already had a flight widget with similar state logic. I used it as a starting point, but simply adapting it didn’t work: there was too much information and the hierarchy broke down.
After several iterations, it became clear that each state needed its own priority — especially in compact and minimal Dynamic Island.

Journey stages
I rebuilt the approach around the stages of the trip and defined the passenger’s main question at each one:
- before check-in — when is the flight and which terminal?
- check-in — which desk and how much time is left?
- boarding — which gate and how does boarding work?
- in flight — what’s my seat?
- arrival — was the flight delayed and where is the baggage?
- after the flight — how do I rate it?

Check-in
When check-in opens, the widget shows the desk numbers and time until closing.
The progress bar shows how much time is left and changes color as check-in gets closer to closing.

Boarding
When check-in closes, the widget switches to boarding and shows the gate and boarding method — jet bridge or bus.
We didn’t have data on whether a specific passenger had checked in, so the state change follows the flight stage rather than the user’s action.

In flight
During the flight, the widget shows the passenger’s seat and aircraft model. For S7-operated flights, we knew the exact model and showed the matching aircraft illustration.
For partner flights, the exact model wasn’t available, so we used a neutral aircraft illustration.

Arrival
After landing, the widget shows whether the flight was delayed or arrived early.
If the passenger has baggage to collect, it also shows the baggage belt number so they don’t have to look it up separately at the airport.

Post-flight rating
Tapping the stars opens the rating form in the app. After the rating is submitted, the Live Activity ends.

Dynamic Island
Compact and minimal leave even less room, so for each stage I had to decide which information really mattered in the Dynamic Island.
In minimal, there is essentially room for one signal — a number or icon that has to communicate the current status.

Results
The iOS version was fully developed but never shipped. We first ran into issues with how the Live Activity behaved across system themes, and after updating it for iOS 17, the S7 app was removed from the App Store and new iOS releases stopped.
I later adapted the solution for Android, where it was launched. There are no product metrics for the iOS version because it never reached production.
What I’d do differently. I would test system theme behavior on real devices earlier to reduce unnecessary iterations.
