Inbound travelers — especially Americans planning European trips — stood out from our core domestic audience. While local users often searched and booked within days, inbound customers began planning weeks or even months in advance. Their behavior looked more like airline booking: they compared multiple options, left, and returned later to decide.
The problem was that our product wasn’t built for this. When these users came back, fares had often changed and they had no way to quickly recover the ticket they had considered. The result was frustration, loss of trust, and sometimes churn.
When searching again meant lost sales
Convert Qualified visits into 1 Search
Convert 1st search in subsequent searches
Convert searches into first transaction
An experience that makes you want to travel again
We framed the opportunity around a simple but powerful hypothesis: if we gave Inbound travelers a way to save and return to specific journeys, they would be more likely to re-engage and eventually book.
Our design exploration centered on two competing models:
Save a search — bookmark a city-to-city route and date, allowing users to revisit results.
Save a specific train — pin an exact departure and time, preserving the context and fare.
Both options had trade-offs. Saving searches felt flexible, but when users returned later, the results often looked very different due to fare and availability shifts. Saving a specific train provided clarity and continuity, but demanded a stronger technical solution to keep the information fresh.
Through testing sessions, we saw a clear pattern: users gravitated toward the concreteness of favoriting a specific train. It matched their mental model of planning — they weren’t just browsing in the abstract, they were imagining themselves on a particular train, at a particular time.
The search-based model felt too vague and caused confusion when new results appeared or fares shifted.
This insight gave us confidence to pursue the “save a train” direction, setting the stage for deeper product and technical exploration.
We started with the simplest possible expression of the idea: a heart icon to “like” a train. The design pattern was familiar to users, but its placement wasn’t trivial. The search results screen was already dense with critical information — departure times, journey duration, operators, prices, and fare conditions.
Introducing a new pattern risked being overlooked or, worse, adding noise to an already busy interface. We explored multiple placements and visual weights for the heart, testing how quickly users could discover it without distracting from the booking flow.
We also had to ensure the pattern scaled consistently across all markets, which led us to place the heart on the left side of the card — a location that proved both discoverable and unobtrusive.
Heart pattern at the fare level
Saved fares live in Travel Plans
At the same time, we were shaping the Travel Plans page. This was more than just a list of saved trains — it needed to feel like the start of a planning hub. From the beginning, we wanted it to be visual as well as functional. That raised a design question: should we use a single generic image, or bring in destination-specific imagery?
Because Trainline operates across Europe, consistency was important — but so was local relevance. We decided to curate imagery for the top 100 most-booked routes, hand-selecting visuals that gave each trip a sense of place. And when a destination wasn’t in the top 100, we built a fallback mechanism: the app would display a curated image for the country of that destination, ensuring that every saved journey felt contextual and human.



Price freshness wasn’t trivial. Carrier APIs imposed strict limits on how often we could fetch fare updates, and hitting those limits risked degrading performance across the entire app, and cost us loads financially. To get around this, engineering built a caching system that stored results from every search run by our global user base.
This meant that whenever any user worldwide searched for a journey, that fare data was saved to cache. As a result, trains saved in Travel Plans were almost always up-to-date — not because we fetched them directly, but because someone, somewhere, had already searched for them.
Fun fact: Google later adopted this system to power live European train fares in their travel module.
On the signaling side, we designed more than just notifications. The goal was to make Travel Plans a place where users could quickly assess whether action was needed. We introduced a set of urgency and status indicators directly inside the experience:
Price changes — clear indicators when fares went up or down since the last visit.
Availability signals — warnings like “Only 3 tickets left at this price” to highlight scarcity.
Status updates — showing when a saved train was already booked or no longer available, reinforcing the idea of Travel Plans as a live planning tool rather than a static list.
These cues gave users confidence to plan at their own pace, while gently nudging them toward booking when it mattered.
-
With the fundamentals of saving and monitoring trains in place, the next step was to make Travel Plans feel less like a static list and more like a planning companion. We introduced a map view — a modern, visual layer that helped travelers see their saved journeys in context.

For Inbound users, this was especially powerful. Many weren’t just booking a single train, but building a multi-city itinerary across Europe. The map turned abstract train choices into a connected journey, giving them a clearer sense of how trips fit together.
It also elevated the UI: Travel Plans now felt more like a tool for discovery than a transactional list.
Other High Value Users — An Exponential Reach
This visual shift also opened the door to collaborative features. By representing journeys spatially, it became easier to imagine Travel Plans not just as something you keep for yourself, but something you share with others. This laid the groundwork for future functionality like trip sharing, group booking, and split payments — features that made particular sense for Inbound travelers often organizing trips as couples, families, or groups of friends.
With saving, price freshness, and maps established, the next step was to help users plan beyond a single trip. For Inbound travelers especially, one journey was often just part of a longer European itinerary.
To support this, we introduced suggested next destinations. Backed by a machine learning model trained on booking patterns across millions of journeys, the system surfaced relevant onward trips in context — for example, nudging Paris → Lyon travelers toward Marseille, or Milan visitors toward Florence.
Continue Searching
AI Destination Suggestion
-
This wasn’t just about inspiration. It was a deliberate product investment to drive repeat transactions and strengthen Trainline’s role as a planning hub. By keeping users engaged across multiple bookings, Travel Plans created value for travelers while directly supporting growth.
Travel Plans began as a mobile-first experiment, but the long-term value depended on extending its reach. We focused on two fronts: coverage (bringing the feature to web) and CRM activation (bringing users back through reminders and promotions).
CRM Hooks
We introduced CRM hooks that allowed users to subscribe for updates on saved trips. Price changes, availability updates, and prompts to complete a booking were delivered via push and email — driving return visits well beyond the initial 1% adoption we saw in the first weeks.
Results
Travel Plans launched softly, with about 1% of users saving at least one fare in the first weeks. While adoption was modest, the impact was clear.
Return rates lifted: ROW users +12% (8.1% → 9.1%), US users +26% (7.4% → 9.4%).
Stronger conversion: the “planning funnel” outperformed the baseline (7.0% vs 5.3%).
High stickiness: 90% of users who saved but didn’t book returned within 3 weeks; 38% of them converted.
Even at 1% adoption, Travel Plans contributed incremental revenue. At 10% adoption, projections showed €7.3m in international markets and £3.9m in the UK annually.
Most importantly, the feature validated a bigger bet: by supporting high-intent travelers with planning tools, Trainline could turn them into repeat bookers. In short: when used, it worked — exceptionally well.
🌎
+12% return rate
🇺🇸
+26% return rate
🌎
+1.7pp of CvR
Internal Marketing: Release Videos
At Trainline, I turned every feature launch—and even our A/B test updates—into a brief, engaging motion-design video. These internal release films became my go-to way to rally the company around new features and experiences that the team shipped.
Below are the videos I crafted for the class-upsell project: