Case Study

Responsive Reservation App

Users kept hitting "no results" because the app demanded exact dates. I redesigned the booking flow to match how people actually plan camping trips.

Responsive Reservation App

A campervan rental platform for road trips. The booking flow seemed fine on paper: pick dates, pick location, see campers. But users almost never got results. The app wanted exact dates, and people planning camping trips just don't work that way. They'd happily shift by a few days for the right camper, but the app never showed them that option. I redesigned the booking flow around how people actually plan.

The challenge in detail

The existing flow was simple: choose dates, choose location, choose travelers. But most of the time, users completed it and hit a wall. "No results." Users who would have been happy with nearby dates never saw those options, and the app silently lost them.

Before: the original booking flow. Exact dates were required, and a one-day gap meant a dead end.

Original no-results screen

The silent "no results" screen. No nearby-date suggestions, no alternatives, no way forward even though inventory existed.

Pain point 01

Rigid exact dates

People planning camping trips usually do not have exact dates. They know roughly when they want to go: sometime in August, or a week in early summer. They would happily shift by a few days for a great camper. The app demanded a fixed start and end date or it would not search at all.

Pain point 02

Silent "no results"

When there was no perfect match, the search returned nothing. No suggestions, no nearby dates, no alternative campers. Users who were one day off from an available booking saw an empty state and left, while the inventory was sitting right there.

Pain point 03

Hidden inventory

Users who played around manually, trying different date combinations, would eventually find available campers. But that is work the app should do automatically. Most users will not do it. They will just leave and book somewhere else.

The app was hiding inventory from willing customers. The dates were not the problem. The flow was.

The constraint nobody mentioned

Before we even started designing, the technical team had already decided to build a responsive web app instead of going native. That one choice quietly shaped everything that came after. No push notifications for booking confirmations. No offline access to saved reservations. A tighter budget for transitions and animations. We didn't get a say in those trade-offs as designers, they were simply the ground rules. Going mobile-first wasn't some big philosophy statement, it was just the most practical path. If we could make the experience work well on a small screen, the desktop version would naturally benefit from that same simplicity.

Two flows, one booking

The core insight was simple: give users two paths based on how they actually plan trips. Some people know roughly when they want to go and will shift dates for the right camper. Others have exact dates locked in already. The flow should match the plan, not force the plan to match the flow.

Flow 01

Flexible dates

For users who know roughly when they want to travel but do not have fixed dates. They pick a general timeframe, how long they want to go for, and how flexible they can be. The result is a list of campers along with all their available date ranges, not a binary yes-or-no.

This is the flow most first-time planners need, and the one the old app never offered. It turns "no results" into "here are your options."

Flexible dates flow
Flow 02

Exact dates

For users who already know exactly when they are traveling, because they booked time off or coordinated with friends. Standard calendar picker: start date, end date, see available campers.

This is the flow that already existed, kept for the users who benefit from it. The redesign did not remove precision, it added flexibility alongside it.

Exact dates flow
Shared steps

Where both flows converge

After choosing dates, both paths lead into the same shared steps: location, traveler preferences, and results.

Location and search step after redesign

Location step: search cities directly or browse popular destinations. Same screen for both flows.

Travelers and preferences step

Travelers and preferences: pets, kitchen, bathroom. Preferences filter results without hiding them.

Results screen with available campers and their date ranges

Results screen: real campers with all their available date ranges instead of a binary yes-or-no.

Camper details with exact available dates

Camper details: specs, amenities, pricing, and the calendar showing availability.

The complete booking journey

Both flows converge into the same shared steps:

01

Pick dates or a range

Flexible users choose a timeframe and flexibility. Exact users pick specific start and end dates. Both paths look native, not bolted on.

02

Location and details

Search cities or browse popular locations. Add travelers and preferences like pets, kitchen, or bathroom.

03

Results with real options

Campers with their available periods and pricing. No more silent dead ends. If no perfect match exists, nearby options still show.

Design system

Responsive design system

Everything designed mobile-first, then expanded to desktop. Camping plans happen on phones: at the kitchen table, on the train, during lunch. The design system covers colors, typography, input components, buttons, cards, calendar components, and progress indicators, all built to scale up to larger screens without losing the mobile hierarchy.

Design system: foundations

Foundations: colour, typography, and spacing scale built to hold up across breakpoints.

Design system: components

Components: inputs, buttons, cards, and calendar elements with their states.

Design system: patterns

Patterns: layout, navigation, and progress indicators scaled from mobile to desktop.

Why two flows, not one

The first wireframes used a single search flow. Pick your dates, pick your location, see what's available. It seemed logical enough. But when we put it in front of actual campers, a clear split appeared. Some people plan around a place. They already know they want to go back to Krka and just need to find an open slot. Others plan around a window of time. They have a free week in August and want to see what's out there. A single flow forced one of those groups to answer a question they didn't have an answer to yet, which created friction right at the first step. Splitting the entry into two paths, one starting from location and one from dates, let everyone begin with what they already knew.

What changed

Flexible search

A new booking path built for the majority of users who do not travel on exact dates. No more "no results" for people who were one or two days off from a match.

Mobile-first experience

Booking works on a phone from the first tap to the last. Camping plans happen on the go, so the responsive layout scales up to desktop instead of down from it.

Scalable design system

Colors, typography, inputs, buttons, cards, calendar components, and progress indicators, all documented so future features ship with the same patterns.

What I learned

Match the way people plan

Nobody plans a camping trip with exact dates locked in. "Sometime in August" or "a week in early summer" is how people think. The search should start from there, not from a rigid date picker.

"No results" is a design failure

The campers were available. The search just couldn't find them. When a search returns nothing, it should suggest alternatives instead of just showing an empty page.

Mobile-first is where trips start

Real planning happens on a phone at a kitchen table or on a train, not at a desk. Designing from small to large kept the flow simple and the hierarchy obvious.

Two flows beat one compromise

I tried making one flow work for both types of planners and it just didn't. Splitting into two clean paths meant each group got something that actually fits how they think.

The app had the inventory. It just was not letting people find it.

Why this matters

"No results" "Here are the campers that fit your plan"

Search flows built for databases instead of people are quietly losing customers. This redesign worked because it started from how people actually plan trips, not from what the existing search endpoint could do. The flexibility flow was not a new feature layered on top, it was the default path for the majority of users.

The broader lesson: when users keep hitting a wall, the wall is usually the interface, not the inventory. Change the flow, and the existing product suddenly performs.

About this project

Curious about the details? Ask the AI assistant anything about this case study - the process, decisions, challenges, or outcomes.

Ask AI about this project

Hi\! I can tell you all about this case study. Pick a question or type your own.

Explore more

More work

Open