IHG Hotels & Resorts

IHG — One room card, four rate types, four viewports

The choose-room-and-rate step of IHG's booking flow — one room card, four rate types as states of a single component, designed across four viewports.

Role
Lead UX/UI Design
Team
Years
2026
Industry
Hospitality · Booking
Headline result
4

Viewports designed as first-class layouts — 1440, 1180, 768 and 375 — with one room card and one rate component across all of them.

The choose-room-and-rate step of IHG's booking flow — one room card, four rate types as states of a single component, designed across four viewports.
Primary surface
Fig. 01

[ The problem ]

Choosing a room is where a hotel booking either closes or stalls. The guest has to compare rooms, then compare rates within a room — public, member, preferred, points — and every one of those carries its own conditions. The existing step put that comparison in a dense list where the rate a guest qualified for was rarely the one they saw first, and where the same information was laid out differently at each screen size.

[ Goals ]

    Approach

    The room card carries the decision. Every card holds one photograph, the occupancy and bed facts a guest actually filters on, the cancellation terms, and one rate — with a View Prices control that opens the rest rather than stacking them all on the page. Rates are the hard part. A single room can carry a public rate, a member rate, a preferred rate through AAA or a corporate agreement, and a points option. The design treats them as one component with states rather than four layouts: the same card, the same price position, with the qualifying rate shown against the public rate it beats. A non-member sees what membership would save; a member sees the saving already applied. Four viewports were designed as first-class layouts, not as a desktop that squeezes. At 1440 the filters sit in a toolbar above a wide list; at 1180 and 768 the toolbar collapses to a filter row with a More Filters sheet; at 375 each room becomes a full-width card with the rate pinned where a thumb reaches it. The empty state was designed with the same care as the full one: filters stay visible and set, so a guest can widen a filter instead of starting the search again.

    The room list, the non-member and member rate states, and the no-results state — the four layouts the rate component had to satisfy.
    The room list, the non-member and member rate states, and the no-results state — the four layouts the rate component had to satisfy.

    [ Scope and constraints ]

    What I owned
    Room card and rate component design Rate states — public, member, preferred and points Filter toolbar and More Filters sheet Four viewport layouts: 1440, 1180, 768 and 375 Empty and no-results states Developer-ready specification across all viewports
    Constraints
    How it was tested

    [ The work ]

    The surfaces.

    BeforeAfter
    1

    The room card

    Give a guest one place to judge a room — what it is, who it sleeps, what it costs and whether they can cancel.
    Objective

    Give a guest one place to judge a room — what it is, who it sleeps, what it costs and whether they can cancel.

    Process

    One photograph with a carousel, occupancy and bed type as icons, free breakfast and cancellation as plain text, and a single rate with View Prices to open the rest. Scarcity ("Only 2 remaining") sits with the room, not the price.

    Outcome

    One card, reused at every viewport and behind every rate type.

    ihg-rooms-rates
    2

    Member value, shown not claimed

    Make the difference between a public rate and a member rate legible at the moment of choosing, without turning the page into an advert.
    Objective

    Make the difference between a public rate and a member rate legible at the moment of choosing, without turning the page into an advert.

    Process

    Non-member on the left, member on the right. The qualifying rate takes the price position and the public rate sits struck through above it, so the saving is arithmetic a guest can see rather than a claim they have to trust.

    Outcome

    The same component serves both audiences — the rate a guest qualifies for is the one they see first.

    ihg-rooms-rates
    3

    Preferred and negotiated rates

    Handle the rates a guest brings with them — AAA, corporate, association — without a separate layout for each.
    Objective

    Handle the rates a guest brings with them — AAA, corporate, association — without a separate layout for each.

    Process

    The preferred rate takes the price position with the public rate struck through above it, and the qualifying programme is named under the room so a guest knows which of their memberships is doing the work.

    Outcome

    A fourth rate type landed as a state of the existing component rather than a new page.

    ihg-rooms-rates
    4

    When nothing matches

    Keep a guest in the search when their filters return nothing.
    Objective

    Keep a guest in the search when their filters return nothing.

    Process

    The filter toolbar stays in place with the selections intact, and the message sits in the results area rather than replacing the page — so widening one filter is a single click away.

    Outcome

    The empty state is a step in the search, not a dead end.

    ihg-rooms-rates
    5

    Four viewports, one system

    Design 1180 and 768 as real layouts rather than as a desktop that squeezes.
    Objective

    Design 1180 and 768 as real layouts rather than as a desktop that squeezes.

    Process

    At 1180 the filter toolbar keeps its row and the room card holds its horizontal layout. At 768 the toolbar collapses to primary filters with a More Filters sheet, and the card narrows without stacking. The rate component is identical at both.

    Outcome

    Each viewport was specified from the same file, so the room card and rate rows never had to be re-solved in development.

    ihg-rooms-rates
    6

    Mobile

    Carry the whole comparison to 375px without losing the rate detail that makes it a decision.
    Objective

    Carry the whole comparison to 375px without losing the rate detail that makes it a decision.

    Process

    Each room becomes a full-width card with the photograph, the facts and the rate stacked in reading order. Rate options open in place, and the member discount toggle sits at the top of the list where it applies to everything below it.

    Outcome

    The same decision, one thumb-width wide.

    ihg-rooms-rates

    [ The system underneath ]

    [ Results ]

    4 | Viewports designed as first-class layouts 4 | Rate types as states of one component 1 | Room card used at every screen size

    The rate system shipped as one component with states rather than a layout per rate type, which is what let member, preferred and points rates land without a redesign each time. The work went to development across all four viewports from the same file, with the room card, the rate rows and the filter toolbar specified once and reused.

    What I carry forward

    Designing the rate types as states of one component rather than as separate layouts was the decision that held. Every new rate type after that was a state, not a redesign.

    ← All work

    More work