0%
Revenue profit increase
0
Designer, sole owner
0s
Ticket listings affected
0x
Platforms validated
01 / Problem

Users couldn't tell a
good deal from a bad one

Here's the thing about MegaSeats: the inventory was great, the prices were competitive, and people still froze. Browse any event and you'll scroll past dozens, sometimes hundreds, of listings that look basically identical. Price, section, row, fees, availability all vary, but visually everything reads the same. No signal cuts through. So users hesitate. And hesitation is just a slow way of saying goodbye.

🔍

Visual flatness

Every listing carried the same visual weight. No hierarchy, no way to tell a standout from the filler.

🧠

Analysis paralysis

Too many lookalike choices with zero guidance, so users stalled right before add-to-cart. The exact spot you do not want a funnel to leak.

⚠️

Broken trust signals

"Best Deal" was slapped on half the page. When everything is the best, nothing is, and shoppers stop believing the label entirely.

💸

Lost conversion

High-intent users, the ones with a card already out, were stalling at selection. We were losing the easiest sales we had.

Before: Overuse of "Best Deal" label, signal collapse
All Tickets
Best Seats
Best Deal
Section 104, Row 12 2 tickets · $42 fees
Best Deal $89
Section 108, Row 5 4 tickets · $38 fees
Best Deal $97
Section 201, Row 8 2 tickets · $55 fees
Best Deal $112
Section 310, Row 2 2 tickets · $60 fees
Best Deal $134
⚠️ When everything is labeled "Best Deal," nothing is. Signal becomes noise, and users disengage.
02 / Process

Discovery to delivery,
end-to-end ownership

I was the sole designer on this one, which meant I owned every phase: diagnosing the real problem, designing the test, running iterations, and proving the impact. But sole owner never meant solo. I leaned hard on product and engineering at every step, because the best signal in the world is useless if the backend can't surface it. Here's how it actually unfolded.

01
Discovery
Behavioral analysis & competitive audit
I partnered with product to dig into engagement patterns, specifically where users slowed down or bailed before add-to-cart. The data was clear: hesitation spiked on dense, undifferentiated listings. Then I ran a competitive audit of StubHub, Ticketmaster, and SeatGeek to understand what shoppers already expected when they landed on us.
Funnel analysis Competitive audit Behavioral review
02
Definition
Hypothesis framing with product & engineering
I ran cross-functional alignment sessions to understand how "value" was being defined internally. Turns out the pricing logic already lived in the backend, it just never made it to the UI in any meaningful way. Classic gap between data and perception. So I framed a hypothesis we could actually test: targeted value signals would reduce decision friction and lift conversion.
XFN alignment Hypothesis writing Success metrics
03
Exploration
Concept testing: language, placement & frequency
I tested a pile of label concepts ("Best Deal," "Top Value," "Recommended," "Hot Deal") against variations in prominence, placement, and how selectively each was applied. The early finding hit fast and hard: cranking up the application frequency torched trust. That reframed the whole project for me, from "how many labels" to how credible is one label.
★ Best Deal
Tested, dropped
✓ Recommended
Tested, dropped
↑ Top Value
Tested, dropped
🔥 Hot Deal
Selected ✓
Label variants Placement testing Trust research Frequency modeling
04
Design
Visual system + filter integration
I designed the badge with strong contrast, placement aligned to the natural eye path, and deliberately tight application rules. Then I pushed past the obvious: I wired "Hot Deals" into the sort and filter system so users could actively hunt for value instead of stumbling onto it. That turned a decoration into a discoverability system.
Visual design Filter UX Interaction design Visual hierarchy
05
Validation
A/B test rollout & iteration
I ran a controlled A/B test on MegaSeats as the primary proving ground before anything touched TicketNetwork. I tracked conversion rate (event page through checkout), selection-confidence proxies, and add-to-cart velocity. Then I let the data do the arguing: badge criteria, copy, and application thresholds all evolved live through the test cycle.
A/B testing Conversion tracking Live iteration
03 / Solution

A value signal system,
not just a badge

The fix wasn't a prettier label. It was a disciplined rethink of how deals get surfaced: one credible signal, backed by filter-level discoverability. My guiding principle the whole way was restraint. Fewer, stronger signals beat more noise every single time.

💡 Swapping "Best" for "Hot" wasn't a copy tweak, it was a trust reframe. "Best" makes a promise a dynamic pricing system can't keep. "Hot" is timely, contextual, and honest. It signals urgency without pretending to be objective truth.
Design exploration: Badge variants & contextual tooltip system
Hot Deal badge variants and contextual value tooltip showing '406 tickets sold in the last hour' and '4 tickets from $262 — 20% cheaper than similar seats'

Three badge states tested (filled, outlined, ghost) alongside a contextual tooltip surfacing real-time demand and relative value signals, giving users both urgency and confidence.

After: Selective "Hot Deal", high signal, low noise Live prototype, tap a filter 👆
All Tickets
🔥 Hot Deals
Best Seats
Under $100
Section 104, Row 12 2 tickets · $42 fees
Hot Deal $89
Section 108, Row 5 4 tickets · $38 fees
$97
Section 102, Row 3 2 tickets · $40 fees
$76
Section 201, Row 8 2 tickets · $55 fees
$112
Section 310, Row 2 2 tickets · $32 fees
Hot Deal $118
Section 308, Row 14 3 tickets · $28 fees
$64
✓ 2 of 6 listings flagged Hot Deal. Scarcity maintained, signal trusted. Users know exactly where the value is.

Key design decisions

Contextual value, not universal

A "Hot Deal" is relative to similar inventory in that event, not some global standard. That kept the label honest even as pricing shifted hour to hour.

Selective application

I set a hard ceiling: no more than ~20% of listings could wear the badge. Scarcity is what keeps a signal worth trusting. Go past that and you're back to noise.

Filter integration

I turned "Hot Deals" into an active discovery tool, not a passive sticker. High-intent users could filter straight to value, basically a fast lane to checkout.

Eye-movement aligned placement

Placed it in the natural scan path, just left of price, exactly where eyes were already landing while comparing options.

Why I capped the badge at ~20%

This was the call I had to defend the most, so here's the argument as a toy you can play with. Drag the slider to badge more listings and watch the signal collapse into wallpaper. It's the whole "when everything is Best Deal, nothing is" insight, live.

20%
High signal. The badge means something, eyes go straight to it.

Extending the signal to the seat map

The badge didn't stop at the ticket list. I mirrored Hot Deal sections straight onto the interactive seat map, so hovering or selecting a flagged listing lights up the matching section with the same 🔥 marker. That closed the loop between the list and the map and reinforced the signal at every touchpoint in the selection flow.

Live product: Hot Deal badges mirrored on seat map, section-level signal
MegaSeats seat map for Justin Timberlake at Honda Center showing Hot Deal badge markers overlaid on corresponding sections in the interactive map view
01
List-to-map sync: selecting or hovering a Hot Deal ticket in the list highlights the exact section on the map with the same 🔥 marker, so users never lose spatial context.
02
Section-level badging: rather than cluttering every seat, only sections with active Hot Deal listings carry the marker, keeping the map scannable.
03
Consistent visual language: the same flame icon and red accent from the list badge appears on the map, building one unified system instead of two disconnected UI patterns.
04 / Prototype

I built the spec as something
you could actually click

Static mockups tell the story, but they leave too much open to interpretation the moment engineering starts wiring things up. So I used AI to turn the Hot Deals spec into a working, interactive prototype in hours instead of waiting on a build cycle. It pulled double duty: it gave developers a behavioral source of truth, the real tab switching, the badge logic, the map overlays, so there was no guessing from a flat file, and it gave stakeholders something tangible to react to in review, which is a far faster way to reach internal alignment than another round of slides.

🤝 A clickable prototype answers "wait, what happens when..." before it ever becomes a ticket. If a state isn't in the prototype, it isn't in the spec. Engineering and stakeholders could align by tapping through it together, instead of finding the gaps in QA.
AI-built prototype: three live states Tap the screen or pick a state 👆
MegaSeats Hot Deals prototype screen, Justin Timberlake at Honda Center
Tap through the states

Same screen, three states. Developers could click each one to confirm exactly what changes between them, the listings, the map overlay, the badges, with nothing left to interpret.

05 / Curveballs

What didn't go my way
(and how I handled it)

No project this fun is a straight line. The interesting part of being senior isn't avoiding the curveballs, it's how you catch them. Here are the three that tried to derail this one, and what I did instead of caving.

🧨

Scope creep: "can we badge everything?"

The curveball

Once stakeholders saw the badge convert, the asks piled up fast. "Add Top Value." "Add Lowest Price." "Trending too." Everyone wanted their slice on the page, which is exactly how we got into the "Best Deal" mess in the first place.

My move

I didn't say no with an opinion, I said no with a test. I pointed back to the early finding that high label frequency tanked trust, and reframed the ask: every new badge dilutes the one that's working. We agreed to ship one signal, measure it, and earn the right to add more later. Saying no got easier once the data was doing the talking.

🔧

Engineering: real-time "value" was expensive

The curveball

My ideal version compared each listing against live, similar inventory in real time. Engineering flagged that doing it perfectly on every page load was a heavy lift, and I was not about to torch the timeline chasing a v2 dream.

My move

I sat down with eng and co-scoped a leaner v1: a rule-based threshold against cached comparables that captured most of the value at a fraction of the cost. Good enough to validate the hypothesis, cheap enough to ship now. We parked the fancy version as a fast follow once the concept proved out.

📉

My first badge styling tested worse

The curveball

I went in loving a loud, filled-red badge. It was bold, it was confident, and in testing it read as an ad. Users glazed right over it. Humbling, but that's what testing is for.

My move

I let go of the version I was attached to and followed the signal. I dialed the badge back, paired it with a contextual tooltip that explained why a deal was a deal, and tightened the application rules. The quieter, more honest treatment is the one that won. Design ego costs conversion; I'd rather be right than precious.

🧭 My throughline for all three: protect the signal, and let evidence settle the debate. Scope creep, technical limits, and my own first drafts all bend the same way once you anchor the conversation to a hypothesis and a test instead of who has the loudest opinion.
06 / Results

Perception changed.
Revenue followed.

Moving from noisy, overused labels to a disciplined value-signal system lifted conversion in a way we could measure. The takeaway I loved most: the bottleneck was never inventory, pricing, or intent. It was perception. Fix what people can feel, and the numbers move on their own.

+35%
Revenue profit increase without touching a single price, purely through better perception and decision confidence.
2x faster
Ticket selection velocity improved. High-intent users moved to checkout with less hesitation.
Validated via add-to-cart time tracking
Repeatable
Delivered a reusable A/B testing framework for future merchandising experiments at TicketNetwork.
Scaled beyond single initiative

Conversion funnel improvement

Control conversion: Browse 82%, Select 41%, Checkout 19%. Hot Deals variant: Browse 83%, Select 56%, Checkout 27%.
📊 The biggest lift landed at the selection stage, exactly where the friction lived. That's the part that made me grin: it validated the core hypothesis that this was a decision-making problem, not an intent problem.

Beyond the numbers

Validated

MegaSeats as a test bed

Proved MegaSeats as a faster, lower-risk testing ground before rolling changes up to TicketNetwork. Quicker learnings, less exposure, happier stakeholders.

Delivered

Scalable A/B framework

Walked away with a documented, repeatable experiment framework applicable to future merchandising and pricing initiatives.

Demonstrated

Design as business strategy

Revenue grew without touching pricing or inventory, proof that design decisions move business outcomes at scale.

Strengthened

XFN trust

Led end-to-end with full ownership. Built credibility with product and engineering as a design partner who thinks in systems and ships results.

07 / Takeaways

What I'd carry
into every project

Restraint is a design decision
The instinct is to add more signals. The discipline is to add fewer, better ones. Every label you remove makes the ones you keep more powerful.
Connect data to perception, that's the gap
The backend already had the information. Users just couldn't feel it. Design's whole job here was closing the gap between what's technically true and what's perceptually obvious.
Features scale when they're systems
Wiring "Hot Deals" into filtering turned a one-off badge into a platform capability: discoverable, intentional, and ready to extend into future experiments.