Case study

UBA — Mobile Maritime Booking

Designing the Union des Bateliers Arcachonnais's first mobile application to digitize excursion booking and QR ticket access on the Arcachon Bay.

High-fidelity mockup of the UBA app home screen on iPhone, showing the day's excursions on the Arcachon Bay with the five-entry iOS tab bar anchored at the bottom.
Company
Union des Bateliers Arcachonnais (UBA)
Role
UX Research · UX Design · UI Design
Team
2 designers, 1 project lead
Timeline
Sept 2023 — Jan 2024
Deliverables
UX Research · Wireframes · UI Design · High-Fidelity Mockups

Context

The Union des Bateliers Arcachonnais is a maritime company founded in 1954 that operates 35 boats and serves the Arcachon Bay from seven embarkation points. Its website generates over a million visits a year but has historically remained non-transactional for fixed-schedule excursions. I joined the project as a Product Designer, working alongside a second designer and a project lead, with a clear mission: to design the company’s first iOS mobile application.

Problem

In 2023, UBA ticketing rested on two channels: a website and a network of physical desks near the embarkation points. Online booking did exist, but the funnel was tedious, many steps, an interface ill-suited to mobile, reliance on a strong connection, and many users abandoned along the way. A tourist discovering a cruise to Bird Island from their phone would fall back on the desk: they had to travel there, wait in line, and hope for a seat. On the operations side, every departure meant a queue, a paper check, and a manual re-entry. One million web visits a year, with no dedicated mobile app to capture them, summed up the gap to close: capturing demand where it originates, all the way through to the ticket scanned at the embarkation kiosk.

Challenge 01 — Mapping the bay visitor’s journey

The challenge: understanding how a tourist decides to step aboard (on which device, at which moment, with which information) before drawing a single screen.

My approach: at the project’s kick-off, we ran interviews with recent travellers and UBA desk agents. Two usage patterns emerged sharply: planned booking (the evening before, from a hotel) and impulse decisions (on the pier, ten minutes before departure). These scenarios imposed opposing constraints: one accepts detailed reading, the other demands a decision in three taps. Low-fidelity wireframes were the tool that let us arbitrate this tension without getting lost in visual detail.

Sheet of ten low-fidelity wireframes covering the full scope of the UBA app, organised in two rows. First row: personalised home with a featured experiences carousel and quick access to core features, excursion search with type filters and results list, My Ticket screen mapping out the QR code placement, Bay map with embarkation points and a date picker, Account screen with settings and preferences. Second row: booking tunnel laid out step by step — trip selector and calendar, passenger input, time-slot picker with fares, options and equipment (bike), multi-method payment and final confirmation.
Low-fidelity wireframes: scope of the app in two rows, from the main journey to the booking tunnel.

Challenge 02 — Stabilising a five-entry iOS tab bar

The challenge: giving the two critical flows a permanent entry point without overloading navigation.

My approach: I arbitrated the information architecture on five tabs: Home, Search, Ticket, Map, Account. Ticket is the non-negotiable one: a user who has booked must reach their QR from anywhere in the app, in a single tap. Map materialises the seven embarkation points on the Bay, a direct response to the orientation need surfaced in interviews. Search and Account were kept as standalone entries rather than buried in a menu, to honour native iOS heuristics.

Sheet of five high-fidelity iPhone mockups showing the screens that materialise the iOS tab bar of the UBA app: Home with quick access to the day's excursions and a featured experiences carousel, Search with results filtered by excursion type (cruise, event), Ticket with a centred QR code, booking number and Apple Wallet link, an interactive Map of the Bay with embarkation points (Jetée Thiers Arcachon) and a date picker, Account with upcoming bookings and access to settings.
High-fidelity mockups: the five key screens materialise the iOS tab bar — Home, Search, Ticket, Map, Account.

Challenge 03 — Shipping a QR ticket that scans without friction

The challenge: a ticket that fails to load at boarding means a lost booking and a customer redirected to the desk. The tolerance for error is zero.

My approach: I treated the Ticket screen as a standalone component, designed around a single constraint: being readable by a kiosk scanner in a few seconds, on a phone with variable brightness. The QR is centred, at maximum contrast, with no decorative elements around it. Trip metadata (time, dock, passenger count) is pushed below the code. Ticket access remains available offline once the booking is confirmed, a non-negotiable constraint on a coastal area with uneven coverage.

Sheet of five high-fidelity iPhone mockups detailing the post-booking ecosystem of the UBA app: interactive map with the detailed sheet of an embarkation point (Jetée Thiers — schedules and next departures to Banc d'Arguin and Cap Ferret), satellite view of the Arcachon Bay filtered by type (Excursions, Cruises, Activities) with location pins, My Tickets screen — Upcoming tab showing a Next Departure Arcachon → Cap Ferret with a See QR Code button and a Later booking, My Tickets screen — Past tab with navigation history and a Book again button, Settings screen with notification preferences (departure, promotional offers, weather alerts, boarding reminders), language and currency choice, and a Sign out button.
High-fidelity mockups of the post-booking ecosystem: dock map, My Tickets split between upcoming and past, settings and preferences.

Iterations and design decisions

V1 placed the Ticket tab under Account, logical from an architecture standpoint (a ticket belongs to an account), but costly in use: two extra taps under the pressure of boarding. V2 promoted it to a root tab. On the payment tunnel, I tested in V0 a compacted version merging time-slot picking and passenger entry on a single screen; feedback flagged a loss of clarity on the booking state (“have I paid yet?”). The final version splits those steps again to preserve status clarity, a deliberate reversal after testing.

Sheet of five high-fidelity iPhone mockups showing the UBA booking tunnel: Book screen with trip selector, July 2024 calendar and passenger picker (adults, children, infants); Navette Express to Cap Ferret excursion sheet with trip map, duration and fare; time-slot picker with consecutive schedules (9 am, 11 am, 1 pm…) at €15; Options and passengers screen letting users add equipment (bike) with a running summary at €35; Order summary screen with payment method (bank card, Apple Pay) for a €35.00 total.
High-fidelity mockups of the booking tunnel: from calendar to payment, in five legible steps.

Results and impact

  • 2 critical flows shipped as high-fidelity mockups: full booking and QR ticket access.
  • Five-entry iOS tab bar stabilised and validated through internal UX review.
  • 7 embarkation points integrated into the app’s interactive map.

Reflection

The payment tunnel was, by far, the most complex challenge on the project. Designing four screens that hold together (slot, passengers, payment, confirmation) while keeping the booking state legible at each step, was less a screen problem than a grammar problem. I underestimated, at first, the cognitive load of a mobile transactional tunnel: every hierarchy decision on a single screen has a cascading effect on the trust the user feels about the payment.

What was hard: keeping coherence between the in-progress, validated and failed states without multiplying screens. The temptation is to add variants; the discipline is to compress them without losing legibility. More broadly, a mobile payment tunnel concentrates on its own every product constraint (technical gateway, legal obligations, native keyboard, input errors) and each one must be reconciled into a single flow.

What I would do differently today: stress-test the tunnel on real users from V0 onwards: not in a lab, but on the pier, ten minutes before a departure. Decisions made in a quiet room from a Figma prototype don’t always survive the reality of a packed summer day on the Bay. The iOS heuristics gave me a frame; fieldwork would have given me the right trade-offs sooner.