VISUAL · Hero

Animated result card: the price flips from “CA$555” to “CA$555 or 55,500 pts”, then to the discounted “CA$430 · Save $125 with 12,500 pts”. 4–6 s loop.

Keep · Fintech · Web 0→1 · 2025

Turning business card points into flights

Timeline

3 weeks to dev handoff
Launched Sep 2025
Iterated through 2026

Team

1 designer (me)
1 PM
3 engineers

Role

Sole product designer,
end to end

Platform

Web
(desktop + mobile web)

Problem

Keep’s best customers carried a second card, usually Amex, and saved those points for flights. On Keep, points could only become cashback.

What I did

I studied how the best travel sites and the PM’s working prototype handled every step, designed the booking flow end to end in 3 weeks, and kept improving it after launch with an A/B test.

~$1M

CAD booked in the first year

2 → 122

bookings per month, Sep 2025 → Aug 2026

35%

of businesses that booked came back to book again

~75%

of booking value paid with points

Final designs

VISUAL · Final designs carousel

6 desktop screens, auto-advancing, one-word captions: Travel home → Search → Results → Fare options → Checkout → Confirmation. Optional: one 15–20 s recording of the full flow.

Context

Keep was the second card. Amex won on flights.

Founder interviews in early 2025 showed our best customers carried another business card, usually Amex, and saved those points for flights. On Keep, points could only become cashback.

VISUAL · Before

Redeem modal: points could only become cashback or a statement credit.

VISUAL · After

Redeem modal: “Book travel (NEW)” next to cashback.

“Travel is the highest perceived-value redemption… especially compared to cashback or statement credits.”

Keep Travel strategy review, Apr 2025

Hypothesis

If business owners can turn Keep points into flights, a reward they value more than cashback, they’ll put more of their spend on Keep to earn those points.

Approach

Booking is a solved pattern, so I studied it before I drew

Flight booking is one of the most established patterns on the web, and the PM had already built a working prototype.

Instead of polishing it, I reviewed it the same way I reviewed Amex Travel, Google Flights, Expedia, TravelPerk and Ramp: step by step, noting what worked and what didn’t. By the time I opened Figma, the first wireframe had already formed.

VISUAL · Approach collage

Competitor screens with green / yellow sticky notes → the PM’s prototype with my audit notes → the lo-fi flow. Slow pan or scroll-linked.

✅ Adopted

Indented multi-airport cities · child ages · per-person, round-trip price · separate Details and Select · breadcrumb back · two-column checkout

⛔ Blocked by the API

Picking a fare right after each leg · a grid view comparing cabins side by side

💡 Liked, not built

Public search without logging in · defaulting “From” to your location

Design

Key design decisions

Search is intent, so booking goes full screen

Travel has its own place in Keep’s navigation, separate from Rewards, so it’s easy to find and can grow beyond points. The moment you start a search, booking takes over the full screen, with a clear way back to Keep.

VISUAL · Nav → full-screen search (loop, 6–8 s)

Keep sidebar → Travel → Travel home inside Keep → Search → the sidebar slides away and results open full screen with “← Back to Travel”. Optional inset: indented airports (New York → JFK / LGA / EWR) and the child-age picker.

Results built for scanning and choosing

Three details make a long list of flights easy to scan and safe to act on.

01

Filters stay within reach

When you scroll, sort and filters stick to the top, so you can narrow the list at any point without losing your place.

02

Clear targets

“Details” and “Select” are separate buttons, so you always know whether you’re checking a flight or choosing it.

03

Times next to airports

Departure and arrival times always sit right next to the airport code, so you know exactly where you’re landing.

VISUAL · 01 · Sticky filters

Short loop: the results list scrolls, the search bar scrolls away and the sort / filter row sticks to the top; a filter is applied mid-scroll.

VISUAL · 02 · Details vs. Select

Zoomed result row: hover on “Details” opens the flight details; “Select” is a separate, clearly styled button.

VISUAL · 03 · Times next to airports

Zoomed result row with a callout on “10:45 PM / YVR → 6:25 AM / YYZ”: time and airport code grouped together.

01 / 03

Filters stay within reach

When you scroll, sort and filters stick to the top, so you can narrow the list at any point without losing your place.

02 / 03

Clear targets

“Details” and “Select” are separate buttons, so you always know whether you’re checking a flight or choosing it.

03 / 03

Times next to airports

Departure and arrival times always sit right next to the airport code, so you know exactly where you’re landing.

VISUAL · 01 · Sticky filters

Short loop: the results list scrolls, the search bar scrolls away and the sort / filter row sticks to the top; a filter is applied mid-scroll.

VISUAL · 02 · Details vs. Select

Zoomed result row: “Details” opens the flight details; “Select” is a separate, clearly styled button.

VISUAL · 03 · Times next to airports

Zoomed result row with a callout on “10:45 PM / YVR → 6:25 AM / YYZ”: time and airport code grouped together.

Fare selection

Both legs on one page. Fares for each leg sit together, with plain ✓ / ✕ / $ labels for bags, changes and refunds.

A grid view I couldn’t ship. I wanted a grid that compares cabins and fares side by side, but our travel API (Duffel) didn’t support it.

VISUAL · Fare options (static)

Both legs with Ultrabasic / Economy / Econoflex cards. Optional: a small thumbnail of the grid-view exploration tagged “Not supported by the API”.

Checkout borrows from e-commerce

Checkout works like a good online store. Inspired by Square’s checkout, you fill in traveller and payment details on the left, while a trip summary stays on the right as a reference. Three short steps (Passengers → Extras → Payment) keep each screen focused.

VISUAL · Two-column checkout

White form on the left, grey trip summary on the right. Optional loop: stepping Passengers → Extras → Payment while the summary stays fixed and the total updates.

No trip management yet, but you can still see your trip

Managing trips (changes, cancellations) was out of scope for the first release. I still added a simple list of upcoming trips with the confirmation number, so people know their booking went through.

VISUAL · Upcoming trips list (static)

The Travel page cropped to the Upcoming trips list (dates, route, travellers, confirmation #) and the support card.

Details

The moments in between are where trust is won

Booking a flight means waiting on an airline and trusting what you see. These small states make that wait feel calm and honest.

VISUAL · Loop

Loading modal with a Lottie animation while the airline confirms.

“Hang tight. We’re locking in your trip!”

A calm wait while the airline confirms the order, instead of a bare spinner.

VISUAL · Loop

Upcoming trip showing “Pending”, then confirmed.

Pending trip

The trip shows up right away, and is honest that it’s still processing.

VISUAL · Loop

Mixed-cabin flag opening the cabin-by-leg modal.

Mixed cabin ⚠

Added after a customer searched for premium and got an economy leg.

After launch

Card-first payment, then an A/B test that found the leak

Release 2: card first, on purpose

The next release let people pay with their Keep card, or split points and card. I explored three options and chose card first: the card is the default, and points are one toggle away. It supports Keep’s goal of more card spend without making points harder to use.

VISUAL · Option 1

Payment step: three equal choices (card, points, points + card).

Option 1 · Three equal choices

Clear, but nothing steers people toward the card.

VISUAL · Option 2

Payment step: points applied first, card for the rest.

Option 2 · Points first

What many people expect, but it works against card spend.

VISUAL · Option 3 ✅

Payment step: default card + “Redeem Keep points” toggle + breakdown.

Option 3 · Card first ✅

The card is the default; points are one toggle away.

Then data showed where people were dropping off

VISUAL · Funnel chart

Control group funnel: search → choose fare is the biggest drop (−60%).

1 · Insight

6 in 10 businesses that searched never picked a fare. Customers asked: “Can I see how many points I need?”

VISUAL · A/B result card

Price card leading with the points discount; control vs. test.

2 · Test

I designed prices that lead with the points discount. In an A/B test, fare selection rose from 40% to 52%, but bookings stayed flat.

VISUAL · Payment before → after

Before: points toggle off, full price. After: points on by default, “You saved $X”.

3 · Fix

The discount disappeared at payment. So I turned points on by default and kept “You saved $X” visible to the end.

A small, directional test (Mar–Apr 2026).

Impact · Sep 2025 – Aug 2026

A year in: ~$1M booked, mostly with points, and 1 in 3 businesses came back

Monthly bookings grew from 2 in the first month to 122 in August 2026, with about three quarters of the value paid in points: the redemption customers told us they wanted.

336

businesses booked a flight

665

bookings in the first year

17.9M

points redeemed in Aug 2026 alone

VISUAL · Monthly bookings chart

Sep 2025 → Aug 2026 (2 → 122), redrawn in the site’s style, last bar in brand green. Don’t paste the Metabase screenshot.

“I’m going to move all my employees onto Keep, so I earn more points for travel.”

Keep customer, Feb 2026 (paraphrased)

Reflection

What I’d do differently

Carry the anchor price through to payment, from day one

The A/B test found the leak after launch: the discount disappeared at payment. I could have designed for it before.

Ship a new visual style with a rollout plan

Travel was where I first tried tonal layers: white surfaces on a tinted background. It’s still the only part of Keep that looks this way. On Keep Mobile, I went flat instead.

This is the short version.

I’m happy to walk through the full case study: how I reviewed the PM’s prototype, the card-first debate with engineering, and what the A/B test taught us.

Create a free website with Framer, the website builder loved by startups, designers and agencies.