PortAventura World · Product Designer · 2024–2026

Redesigning the ticket kiosks and booking flows for one of Europe's largest resorts.

In a 4-person product design team, via Randstad Digital — self-service kiosks, the in-app Park Ticket funnel, and Hotel Reservations.

PortAventura World — Shambhala and Dragon Khan roller coasters against a clear blue sky
Shambhala & Dragon Khan, PortAventura Park

The problem

PortAventura World runs park tickets, hotel reservations, and physical self-service kiosks as three connected surfaces — but they'd grown independently. Guests hit friction switching between booking online and completing a purchase at a kiosk on-site, and the legacy kiosk UI wasn't pulling its weight against the app.

One of the core challenges was a disparity of frontend UI terminals — mainly across the kiosks — running on an old legacy ticket system that had never been reconciled with "Express Ticket," the selling system designed a year earlier for the Android/iOS apps. Express Ticket had already proven itself and become the de facto standard once Randstad Digital joined the project — the job was unifying the kiosk fleet around that same proven system instead of maintaining two parallel ticket logics.

My scope covered all three: the Park Ticket purchase funnel, the Hotel Reservations flow, and a full redesign of the self-service kiosk hardware UI — plus the motion and accessibility work needed to ship it at the resort's scale.

Roughly the in-app season revenue growth, year over year
4
Person product design team covering the whole surface
Outpaced
Redesigned kiosks beat legacy kiosk revenue in their first 6 months live

The flow — kiosk to confirmation

Below is a raw screen recording of the actual Express Checkout flow — pass selection, quantity, what's included, cart, and purchase confirmation — followed by the one real kiosk capture. Nothing on this page is a re-mocked screen.
  1. Language & entry

    The kiosk opens on a language selector — Spanish, Catalan, French, English — over live park footage rather than a static screen, so it reads as part of the resort, not a generic terminal.

    Real capture below
  2. Pass & ticket selection

    Guests choose the pass type (single park, combined, Express) and date. This step carries the most decision weight, so it was designed to surface the highest-intent options first based on time-of-day and queue data.

  3. Add-ons & upsell

    Optional add-ons (fast-track access, parking, meal plans) are presented without blocking the core purchase path — a deliberate trade-off between revenue opportunity and keeping the kiosk queue moving.

  4. Payment

    Card-present payment flow, tuned for the kiosk's touch hardware and outdoor lighting conditions — larger touch targets, higher contrast than the in-app equivalent.

  5. Confirmation & handoff

    Ticket issuance with a clear next step (print, QR to phone, or both), closing the loop from kiosk back into the guest's day at the park.

Raw screen recording, unedited — Multipases Express selection through purchase confirmation.

Desktop booking

The same ticket logic ported to desktop — multi-day, multi-park passes with a live selection summary and running total, for guests booking ahead rather than at the kiosk.

PortAventura World — Entradas ticket selection page, shown on MacBook Pro

Real capture — Entradas step, multi-day/multi-park selection with live cart summary.

Multi-brand design tokens

PortAventura World runs four main brands under one roof — PortAventura Park, Ferrari Land, Caribe Aquatic Park, and, last but not least, PONIENT Hotels — and the dev environment had a genuinely painful problem: typography and color tokens named after their aesthetic ("medium", "bold") instead of their role. That works for one brand. The moment a second brand needs "bold" to mean something visually different, the token itself becomes a lie.

The fix was a unified style-token system managed through the Tokens Studio Figma plugin, connected directly to our repo — semantic naming (base / variant / interactive) instead of aesthetic naming, so the same token resolves to a different value per brand without changing what it's called. MCP sits in that pipeline too: it flags naming or value inconsistencies at the pull-request stage, before a token JSON change ever reaches main.

Design tokens naming convention — before (aesthetic naming: medium, bold) vs after (semantic naming: base, variant, interactive)

Real slide from the token system documentation — old aesthetic naming vs. the current semantic naming.

Craft details

Motion → engineering handoff

Produced Lottie JSON animations for production handoff, so motion detail survived the trip from design file to shipped kiosk without engineering having to hand-code transitions.

Accessibility on hardware

Touch targets, contrast, and timing were tuned specifically for outdoor kiosk conditions — different constraints than the in-app equivalent, and not something a generic component library solves out of the box.

High-traffic conversion

Every screen was designed against real queue-time pressure — the kiosk needed to move guests through fast without cutting corners on the upsell or the ticket-selection decision.

Design system → Storybook

Figma design system components synced through to Storybook branch previews, so engineering could review live components in PR context — fewer handoff gaps, faster builds.

The story, from the team

Randstad Digital's own recap of the project — the CTO and Tech Lead on what actually changed under the hood, told better than I can from the design side alone.

Want the full walkthrough?

Specific revenue figures stay off this page for confidentiality — happy to walk through them directly.

Ask for a walkthrough → Bikiot — bike detail screen
Check out this other project
Bikiot
Digital passport for your bicycle — hardware, app, and brand from zero.