Axel Kummerlöwe
Concept redesign2013 and 2026

Booking engine, 13 years later

In 2013 I designed a booking flow for hotels that still runs on many hotel websites today. This is how I would build it now: mobile first, honest prices from the start and a checkout with six fields instead of around 25.

Three phone screens of the new prototype: calendar with prices, room comparison and booking confirmation
The new prototype. The hotel, rooms and prices are made up, nothing is booked.
Type
Concept redesign with a clickable prototype
Role
2013: concept and UX of the original flow. 2026: audit, concept, UI and prototype
Timeframe
November 2026
Platform
Web, mobile first, light and dark theme
Stack
Next.js, React, TypeScript, built with Claude Code

Summary

A booking flow is where interest turns into revenue. I looked at how the flow runs on a hotel website today and measured it on a phone against what guests know from the big booking platforms.

I'm not allowed to show the original screens. Every before view is therefore a schematic redraw: same sequence, same problems, without logo, hotel or original graphics. It is based on a walk through the public flow at 375 px width on 9 November 2026.

Try the prototype

What stood out

I went through the flow on a phone from choosing dates to the guest details and stopped before submitting. The problems are in the order of questions, in how prices are shown and in the form.

Each comparison below shows the redrawn flow on the left and the new prototype at the same step on the right. Numbered squares mark the findings, followed by what changed and why.

Mobile, step by step

Before and after

Step 1 · Search

Guests first, then the price

Before, redrawn

Logo20/11 – 23/11/2026 · 3 nightsAdults1 ▾Children0 ▾

Dear parents, for bookings with children please contact us directly by phone or email.

Double room A€240ContinueMap and opening hours

After, prototype

New search: adults and children above the calendar

What stood out

  1. 1Guests come after the dates, with 1 adult as the default.
  2. 2So the first price is for one person: €240 for a double room. With 2 adults it becomes €390.
  3. 3Families are sent to phone and email (“Dear parents …”), even though the flow has a field for children.

What changed

  • Adults and children come before the calendar, with 2 adults as the default.
  • Each child's age on arrival is asked, because it sets the price.
  • Rooms that don't fit the group don't show up at all. The family room appears from 3 guests.

Why

The price depends on the group. Seeing €240 first and then €390 feels like a trick, even when both numbers are correct. Double rooms are mostly booked by two people, so 2 is the more honest default.

Families are not an edge case for a holiday hotel. When the flow sends them to reception, the booking often goes to a platform that can handle children.

Step 1 · Calendar

Prices in the calendar and no jump when tapping

Before, redrawn

LogoChoose arrival date‹November 2026›MoTuWeThFrSaSu123456789101112131415161718192021222324252627282930⊗Map and opening hours

After, prototype

New calendar with the price per night under each day and the stay highlighted

What stood out

  1. 1Available days are only shaded. You can't see whether the weekend costs more, and the chosen stay isn't highlighted.
  2. 2On a phone only one month is shown. Stays across the month change need the small arrows.
  3. 3After the first tap the heading changes to “Choose departure date”, the content shifts, and the second tap hits a different day.

What changed

  • Each day shows the lowest price per night for the chosen group. Full days are crossed out.
  • Four months are stacked, scrolled with the thumb instead of arrows.
  • The stay is shown as a band, and the heading stays put. What to do next is in the fixed bar at the bottom.
  • Each day is a button labelled with its date and price. Before, days couldn't be focused, so neither keyboard nor screen reader could use the calendar.

Why

On a phone, a missed tap is not a cosmetic issue, it's a wrong date. And the price per day answers the question guests have anyway when picking dates: is the weekend more expensive, would a day earlier be cheaper?

Step 2 · Rooms

Compare rooms instead of being assigned one

Before, redrawn

LogoDouble room Aselected€390Show all room types ▾Double room A€390Double room B€390Double room Con requestMap and opening hours

After, prototype

New room step: cards with photo, facts, breakfast toggle and total price

What stood out

  1. 1One room is preselected. The others are hidden behind “Show all room types”.
  2. 2The list is plain text with name and price. Two rooms cost the same and nothing says how they differ. Some rooms have neither photos nor a description in their detail view.
  3. 3There is only a total, no price per night and no specific cancellation deadline. Tapping the room that's already selected does nothing, and no continue button is visible.

What changed

  • All fitting rooms are listed as cards: photo, size, bed and what sets them apart.
  • Breakfast can be added right on the card, and the price updates immediately.
  • The total including city tax is the big number, with the price per night and the free cancellation deadline below.
  • Fully booked rooms stay visible, greyed out, and suggest the next available arrival date.

Why

Guests who get a room assigned compare elsewhere, usually on a platform. The choice between two rooms is made with photos and hard facts like a balcony or step-free access, not with the room's name.

“Until when can I cancel for free?” is the key trust question when booking a hotel. So the answer sits next to the price, not in the terms.

Fully booked family room suggesting the next available arrival date
Fully booked is not a dead end: the room suggests the next free date, and one tap takes it.

Step 3 · Checkout

Six fields instead of around 25

Before, redrawn

LogoTitle *First name *Last name *Street *Postcode *Town *Country *Email *PhoneBirthday *Fellow guest 1Title *First name *Last name *Birthday *City tax12 €Total402 €Continue

After, prototype

New checkout with labels above the fields and errors right at the field

What stood out

  1. 1No field has a label, only placeholders in 12 px text. iOS zooms in on every focus, and what the field was for disappears while typing.
  2. 2Title is required, a birthday for every guest too, and all fellow guests are asked for here. For 2 guests that added up to about 25 fields.
  3. 3Country is a free text field, email a plain text field without the email keyboard.
  4. 4The €12 city tax only appears in the form. The price jumps from €390 to €402 here.

What changed

  • Only name, email and payment are required. Phone and requests are optional, and country is a selection.
  • Every field has a label above it. Fields are 48 px tall with 16 px text, the right keyboard and autofill.
  • Errors appear right at the field and as a summary at the top. Focus moves to the first missing field.
  • The amount is on the book button, and the summary with every item can be expanded. Apple Pay, Google Pay, PayPal, credit card and paying at the hotel are on offer.

Why

Every required field is a chance to give up, and on a phone every field costs more than on a computer. The hotel needs dates of birth at the earliest for the registration form at check-in. So they move there, after the booking.

A price that rises in the last step feels like a trick, even if it's only €12 of city tax. In the prototype the final amount is fixed from the room card onwards.

Payment methods as cards with icons: Apple Pay and Google Pay, PayPal, credit card, at the hotel
Four payment methods as large cards. Before, there were invoice, debit card, credit card and paying on site, but no wallets.

All steps

A fixed bar and clear progress

Before, redrawn

LogoSSL badgeRoom 1:Personal detailsFirst name *Last name *ContinueMap and opening hours

Please let us know your arrival time.

After, prototype

New checkout with step indicator in the header, expanded summary and fixed bar with the book button

What stood out

  1. 1Logo, address, contact details and an SSL badge sit above every step. The actual content starts further down.
  2. 2There is no progress indicator on phones. Steps are greyed-out headings in the page flow, while desktop shows a bar with “13 %”.
  3. 3The continue button sits in the page flow, with the footer, map and opening hours directly below.
  4. 4The request for the arrival time is in the footer, where hardly anyone reads it.

What changed

  • The header holds only the hotel name, “Step 2 of 3” and three short bars. The back arrow goes one step back without losing anything.
  • The main action sits in a fixed bar at the bottom of every step, within thumb reach, with the current price next to it.
  • After each step change the page returns to the top and focus moves to the step heading, so screen readers announce the new step.
  • Arrival time and online check-in come after the booking, see below.

Why

On a phone the thumb zone decides. An action that disappears in the page flow has to be searched for, and a footer right below invites people to leave the flow.

Measured, not estimated

BeforeAfter
Text in input fields12 px16 px, no zoom on iOS
Input field height39 px48 px
Fields in checkoutabout 25 for 2 guests6, of which 3 required
Progress on phonesnoneStep x of 3 and bars
Main actionin the page flowfixed bar with price
Email fieldtype="text"type="email" with the right keyboard
Calendar with keyboardnot usableeach day a button with date and price
City tax visibleonly in the formin the price from the room card

Desktop

On a computer: the same flow, two columns

The desktop view is not a second flow but the same three steps with more room. Once the app is at least 768 px wide, every step gets two columns: content on the left, a panel on the right that stays in place while scrolling.

Before, desktop is the only view with a progress bar (“13 %”) and otherwise follows the same sequence as on a phone. There is no sketch here: in the audit I clicked through the old flow on a phone and only glanced at desktop.

Desktop search: two calendar months side by side, guests, stay and “Show rooms” on the right
Search: the calendar uses the full width, guests and action sit in the panel.

What changed

  • The panel on the right takes over from the fixed bar at the bottom of the phone: summary, price and the one action of the step.
  • In the search the guests sit in the panel, and the calendar shows two months side by side.
  • Room cards lie sideways, photo on the left, facts and price on the right, so two rooms fit on the screen at once.
  • In checkout the list of all items is always open next to the form, which is limited to a readable width.
  • The header names the three steps instead of showing short bars.

Why

A computer has no thumb zone, but room to compare. The action still stays in one fixed place, so nobody has to look for it. And because both views use the same building blocks, there is only one flow to maintain.

Desktop room step: room cards lying sideways, summary with total on the right
Rooms: cards lie sideways, the panel shows the chosen room and the total.
Desktop checkout: form on the left, list of items and book button on the right
Checkout: the item list is always visible, the book button carries the amount.

After booking

What the booking doesn't need comes afterwards

The old form asked for fellow guests and birthdays before booking (checkout sketch, mark 2), and the arrival time was a request in the footer. I didn't see the old confirmation page, because I stopped before submitting.

In the prototype the booking is done with three required fields. The confirmation then shows the stay as a reservation slip and offers two things the hotel really needs: the rough arrival time, so the key safe code arrives in time, and online check-in for the registration form.

In the check-in every guest is marked as adult or as a child with their age on arrival, and the first guest carries the name from the booking. Both are optional and can be done until arrival.

Confirmation as a reservation slip with room photo, arrival and departure and booking numberOnline check-in with guest 2 as adult and guest 3 as child, 7 years on arrival

Its own face for every hotel

The flow runs on the websites of many hotels, so it has to adapt to each one. The fictional Hotel Talblick shows how that can look: warm linen tones with fir green as the only accent, Instrument Sans for the interface and Newsreader for headings.

One detail runs through every step: one dot per night. It sits next to the number of nights in the search, the rooms, the checkout and on the slip, so the length of the stay reads at a glance.

Before measured on 9 November 2026, on a phone

Result

25 → 6fields in checkout for 2 guests, of which 3 required
12 → 16 pxtext in input fields, no zoom while typing
Step 2from here the total includes city tax, before only in the form
3 stepssearch, rooms, checkout. Check-in and arrival time afterwards

Limits and what I'd do next

  • Not tested with guests: The improvements come from the audit and known patterns. Next I'd have five people book with the old and the new flow on their own phones and compare time, errors and drop-offs.
  • Before only up to the guest details: I stopped before submitting. I don't know the old flow's error messages, summary or confirmation.
  • Desktop less tested: The two-column view came after the mobile one and has been tested less. I didn't check tablet widths.
  • Everything simulated: Prices, availability and payment are made up. I didn't look at the hotel's side: administration, rates and interfaces.

What I take away

Most of the improvements are not new features but a different order: the right question at the right time, a price that no longer rises, and everything the booking doesn't need afterwards. On a phone, that is exactly what decides whether people book.