
Ticket and hotel checkout, and self-service kiosks, for one of Europe’s largest resort destinations. I worked in a 4-person product design team.
Park tickets, hotel reservations and the self-service kiosks had grown independently. The kiosks ran on a legacy ticket system that had never been reconciled with Express Ticket, the selling system built a year earlier for the iOS and Android apps.
The job was to unify the kiosks around that proven system instead of keeping two ticket logics alive. My scope covered the Park Ticket funnel, the Hotel Reservations flow and the kiosk redesign.
The kiosk opens on a language choice, Spanish, Catalan, French and English, over live park footage, so it reads as part of the resort rather than a generic terminal. Touch targets, contrast and timing were tuned for outdoor use.
Pass selection carries the most decision weight, so the highest-intent options come first. Add-ons such as fast-track, parking and meals never block the core purchase, which keeps the queue moving.
A raw screen recording of the Express checkout: pass selection, quantity, what is included, cart and confirmation.
With the PortAventura design team, we redistributed the page so each element sits where it helps the choice, and added a summary fixed on the right that always shows what has been picked and how to continue.

The options can change, but the summary and the next step stay in the same place, so people never lose track of their choice.
We also worked on conversion and accessibility across the high-traffic booking journeys. Happy to share the exact figures on a call.
PortAventura World runs four brands under one roof: PortAventura Park, Ferrari Land, Caribe Aquatic Park and PONIENT Hotels. Tokens named after their look, like “medium” or “bold”, broke the moment a second brand needed bold to mean something else.
We moved to semantic names, base, variant and interactive, managed in Tokens Studio and connected to the repo, so one token resolves per brand without being renamed.

I also aligned the shared React web components used in the web view inside the React Native apps, and handed motion to engineering as Lottie JSON, ready for production.