Visit live site ↗ CASE STUDY · 2026
● case study design · engineering · product

Keep testing
simple.

Upload the HTML. Share the link. Get feedback.
Live project · in personal use · Built solo · 4 working days · 2026
OVERVIEW · three-step.flow 01 / 01
1
Upload
Drag an HTML file or ZIP: drop zone, not a terminal.

checkout-v3.html
2
Share
Each test gets its own link. Send it to anyone.
link: /t?proto=checkout-v3
3
Review
Success, ease, quotes, and per-task timing on one page.
"I missed the skip link at first…"
Role
Design, engineering
& product, solo
Stack
React · Netlify · Clarity
Timeline
4 working days
2026
Status
Live, in personal use
HOW IT WORKS

Four things happen. That's the whole tool.

01 UPLOAD
Drag in an HTML file or ZIP
No build step, no CLI. If your ZIP has multiple HTML files, you pick the entry point. Live URL in 1–2 minutes.
filecheckout-v3.html
size142 KB
statusdeploying ✓
02 CONFIGURE
Pick exploration or guided tasks
Exploration: testers roam freely, optional prompt. Guided: up to 10 ordered tasks with per-task timing. Name the test, get the link.
Exploration
Guided ✓
1 Find a product under $40 ⋮⋮
2 Apply a student discount ⋮⋮
3 Get to checkout ⋮⋮
+ add task
03 CAPTURE
Pre + post questions, plus the replay
4 intake questions, Clarity records the session, then 4 post-session questions: intent, success, confusion, ease. Session ID links all three.
preage, device, tech, fam
duringclicks, scrolls, rage
postin their own words
04 REVIEW
Aggregate here, replays in Clarity
Success, ease, per-task breakdown, and every tester's quotes on one page. Jump to the replay in Clarity filtered by session ID.
this pageaggregate + quotes
claritysession replay
bridgesession_id
TWO MODES, ONE LINK

Freeform discovery, or scripted validation.

The tester link is the same shape either way. What changes is how much structure you ask the tester to follow, and how much quantitative data you get back.

Exploration

MODE · EXPLORATION

Drop testers in with an optional prompt. Good for early concepts, directional feedback, vibe checks: when you want to see what they notice before you tell them what to do.

Prompt optional Time limit none Signal qualitative
PLAYGROUND · YOUR PROMPT
Here's what to try.
Explore however feels natural. There are no wrong answers.
"Act as if you're buying a gift for a friend whose birthday is tomorrow. Find something under $40 and get as close to checkout as you can."
Use when: you want to see where they get stuck, not whether they can complete a known path.

Guided tasks

MODE · GUIDED

Up to 10 ordered steps. Each task tracks completion, time-to-done, and "I'm stuck" signals. Good for validating specific flows: checkout, onboarding, a new settings page.

Tasks up to 10 Per-task timing + status Signal quantitative
PROTOTYPE · CHECKOUT-V3
Checkout: pick a plan
(Prototype renders above. Task panel sticks to the bottom.)
TASK 2 OF 3
Find the student discount and apply it.
I'm stuck
Done, next →
Use when: you want to measure success rates, completion times, and stuck-points across a cohort.
● GUIDED MODE · WALKTHROUGH

How guided mode actually feels. Both sides, step by step.

Two independent walkthroughs running in parallel. On the left, the maker's side: configure the test, share the link, get the report. On the right, the tester's side: welcome, tasks, post-session questions. Click through each at your own pace.

MAKER Your side · ~90 seconds setup
playground-uxtg.netlify.app/upload
Configure your test
One page. Drop a file, name it, add tasks, done.
TEST NAME
Checkout V3
TEST MODE
Exploration
Testers explore freely. Optional prompt.
Guided tasks
Ordered tasks. Use for defined flows.
TASKS 2 / 10
Task 1
Find the pour-over mug.
Task 2
Add it to cart and reach checkout.
+ Add task
PROTOTYPE FILE
Drag and drop your file here
or click to browse · HTML or ZIP · max 512KB per file
Create test →
playground-uxtg.netlify.app/t/k2x9
LIVE
Your test is live
Share this link. Expires in 5 days or after 8 sessions.
Password
9m3z
Sessions
0 / 8
Expires
Oct 29
No accounts. No dashboard to check. The report comes to you.
mail.google.com · inbox
P
Playground
reports@playground.test
9:14 AM
Your test is ready · checkout-v3 · 8 sessions
Your 5-day window closed. Here's what happened:
8
Sessions
75%
Success
3.8
Ease
Lowest completion: task 2, apply a discount code. 5 of 8 completed, median 47s.
View full report →
playground.test/r/k2x9
checkout-v3
8 sessions · 4 days
8 sessions · 5 completed all tasks. Task 2 had the lowest completion rate.
5 yes 2 partial 1 no
LOWEST COMPLETION
Task 2 · apply a discount code · 5 of 8 completed. Median time to success: 47s (vs 12s average on other tasks).
"I missed the field at first; looked like a label, not an input."
Session 04 · guided
Step 1 of 4 Configure the test: name, mode, tasks, prototype file. All on one page.
TESTER Their side · 3–5 min session
playground.test/t/k2x9
Playground
You're about to test a prototype.
Three short tasks. Takes about 4 minutes. Your cursor and clicks are recorded: no video, no mic.
Estimated time~4 min
Tasks3
RecordedCursor + clicks only
Start →
playground.test/t/k2x9/session
🛒 0
🫖
Teapot
$48
Pour-over mug
$32
🥣
Bowl
$24
TASK 1 OF 3
Find the pour-over mug on the homepage.
Stuck
Done →
playground.test/t/k2x9/session
🛒 1
NEW
Pour-over mug
$32
Terracotta · 12oz
Checkout →
TASK 2 OF 3
Add it to your cart and reach checkout.
Stuck
Done →
playground.test/t/k2x9/end
That's it.
Three quick questions, then you're done. Their answers, in their own words, land in the report next to the click data.
01 · WHAT WERE YOU TRYING TO DO?
I was shopping for a housewarming gift under $40…
02 · DID YOU SUCCEED?
Yes Partially No
03 · HOW EASY WAS IT?
1 2 3 4 5
Finish →
Step 1 of 4 Welcome screen: sets expectations, no signup.
● LIVE PREVIEW

What testers see. Intake → prototype → post.

Three screens, in order. Intake is four fixed-choice questions: no free-text, no PII. The prototype is your file. Post-session is where the qualitative gold gets captured: what they tried, whether they succeeded, what confused them, how easy it felt.

🔒 playground.uxtg.dev/t?proto=checkout-v3 REC
01 · INTAKE · 4 QUESTIONS

Before we start.

All fixed-choice. No name, email, or IP collected.

01 · AGE RANGE
18–24 25–34 35–44 45–54 55+
02 · DEVICE
Desktop Laptop Tablet Phone
03 · TECH COMFORT
Get by Comfortable Power user
04 · FAMILIAR WITH THIS AREA
Not really A bit Very familiar
Start the test →
02 · PROTOTYPE · GUIDED

Your file, inside the wrapper.

The prototype renders full-frame. A persistent task panel sits along the bottom in guided mode. In exploration mode, just an end-session button.

Shop-v3 🛒 Cart · 0
NEW
Ceramic mug
$32
Terracotta · 12oz · handmade
Add to cart
TASK 2 OF 3
Add the ceramic mug to your cart and reach checkout.
Stuck
Done →
03 · POST · 4 QUESTIONS

A few quick questions.

Their own words. This is where you find out why the click heatmap looks the way it does.

01 · WHAT WERE YOU TRYING TO DO?
I was looking for the cheapest option that still let me invite a teammate. The Pro plan seemed right but I wasn't sure.
02 · DID YOU SUCCEED?
Yes Partially No
04 · HOW EASY WAS IT?
1
2
3
4
5
Finish →
THE REPORT

Not a dashboard. The data, simplified. You decide.

The report answers two questions, in order: what happened? · in their own words, why? No recommendations: the tool counts and surfaces patterns, you decide what to do. The success bar and session table are live; click through and try it.

Note: numbers, quotes, and session IDs below are sample data for illustration. The tool itself is live, but this report isn't a real test.

/ results / checkout-v3 SAMPLE DATA GUIDED · 3 TASKS ● 27 RESPONSES
AT A GLANCE
18 of 27 completed all three tasks. Task 2 (apply student discount) had the lowest completion: 64% vs 94–96% on tasks 1 and 3, and 4× the median time. 7 testers pressed “stuck” on it. Discount placement was mentioned in 7 of 27 sessions.
Success (self-reported) Click a segment to see those sessions
Ease · avg
3.8/ 5
24 responses · distribution below
1
2
2
3
3
8
4
7
5
4
Per-task breakdown
Task 2 · lowest completion. 64% completion vs 94–96% for tasks 1 and 3. Median time 4× longer. 7 testers pressed “stuck” before finishing.
Task 1 Select the Pro plan and continue. Healthy
26 attempted 25 done · 96% median 11s
Task 2 Find the student discount and apply it. Bottleneck
25 attempted 16 done · 64% 7 stuck median 48s
Task 3 Complete the checkout with saved payment. Healthy
18 attempted 17 done · 94% median 19s
In their own words
Most-mentioned theme: discount placement. 7 of 27 testers (26%) referred to the placement or discoverability of the discount field. Plan pricing and checkout UX drew fewer than 4 mentions each.

What they tried to do

Plan comparison · 6 mentions
"I wanted the cheapest option that still let me invite a teammate. Pro seemed right but I second-guessed it."
25–34 · Desktop · Power user
Scan-and-go · 5 mentions
"Skim the plans, pick the middle one, move on. I don't want to read a comparison table."
35–44 · Laptop · Comfortable
Discount hunt · 4 mentions
"Tried to apply my student email but couldn't find where to paste it."
18–24 · Phone · Comfortable

What confused them

Discount placement · 7 mentions
"The discount field is buried under 'More options'. I almost gave up."
18–24 · Phone · Comfortable
Team seat limits · 3 mentions
"The 'Team' plan has team pricing but no mention of seats. I didn't know how many people I could invite."
45–54 · Laptop · Get by
Expired payment label · 2 mentions
"Saved payment showed but said 'expired'. I couldn't tell if it'd actually charge."
35–44 · Desktop · Power user
Sessions Click any row to expand
Session Age Device Tech Success Ease Time
4f2a-b9c1-5e77… 25–34 Desktop Power user Yes 4 3m 14s
a1c5-02de-8814… 45–54 Laptop Get by Partial 2 5m 02s
e73b-9102-22aa… 18–24 Phone Comfortable Yes 4 2m 41s
c84f-551a-99ef… 35–44 Desktop I build software No 2 4m 38s
9b0d-dd71-4012… 55+ Laptop Get by Partial 3 6m 12s
Session replays live in Microsoft Clarity. Search the session_id tag to find a specific recording. Intake answers travel with it.
DECISIONS & TRADEOFFS

Why it works this way. And what I'm living with.

Every tool is the product of a handful of early decisions. These are the ones that shaped The Playground, including the ones I'd reconsider with more time.

HTML only, no Figma integration.

D01

Figma's mirror protocol doesn't cooperate with iframes, and owning a Figma integration means owning its breakages. HTML prototypes (whether exported from Figma, hand-coded, or generated by AI tools) render cleanly inside the wrapper.

Tradeoff You have to export to HTML first. For most of my prototypes that's one extra step; for designers living in Figma, it's friction.

Built on Clarity + Netlify, not a custom stack.

D02

Microsoft Clarity already records sessions, generates heatmaps, and surfaces rage-click events, and it's free. Netlify Forms handles submissions without a backend. Rolling my own would have meant weeks of infrastructure work for worse results.

Tradeoff Two tools to check instead of one. The aggregate view lives in The Playground, the replays live in Clarity, and session_id is the bridge.

Two modes, not one.

D03

I started with exploration mode only. It was simpler and fit the "unmoderated testing" framing. But for validating specific flows I kept wanting to measure completion rates. Adding guided tasks took a weekend and doubled the tool's usefulness for flow-specific work.

Tradeoff More surface area to explain on the homepage. Worth it: the split between exploratory and validation testing is real, and one mode can't serve both.

Dropped the role question from intake.

D04

The original intake asked for role as free text. I removed it because (a) free text invited PII, testers were typing company names and real people's names, and (b) for unmoderated testing, role didn't change how I interpreted sessions nearly as much as tech comfort and device did.

Tradeoff Quotes in the results page are slightly less characterful: "25–34 · Desktop · Power user" reads less vividly than "Designer · 25–34." Worth the cleaner privacy posture.

No auth on share links.

D05

Anyone with the tester URL can participate. I shipped without auth because the tool is used with existing recruitment channels, I'm not posting links in public Slacks, and building a password layer would have delayed the first real test by a week.

Tradeoff A leaked link means noisy data. Mitigation today: don't post links publicly. Phase 2: password gating.

One deploy pipeline, not per-prototype.

D06

Every prototype lives under the same Netlify site, served via /t?proto=<slug>. New prototypes get committed to a folder and deployed incrementally: no per-prototype site, no per-prototype DNS.

Tradeoff 1–2 minute deploy polling on upload before a link is live. Good-enough latency; the alternative (instant but isolated prototypes) would have meant maintaining N Netlify sites.
WHAT'S NEXT

Known gaps. Roughly in priority order.

Every tool has a backlog of things the creator can see clearly but hasn't built yet. These are mine.

NEXT
Password gating on share links
Single shared password per prototype, entered at the intake screen. Low lift, closes the "leaked link" gap.
NEXT
Mobile viewport guard, per-prototype
If the prototype is desktop-only, let the PM set a min-width so mobile testers see a friendly "rotate or switch" screen instead of a broken layout.
MAYBE
Figma-to-HTML pipeline
Not a direct integration: a one-click export helper that takes a Figma file URL and produces a zippable HTML bundle. Keeps the "HTML only" contract while shortening the export step.
MAYBE
Tester recruitment integration
Paid panel access (Prolific, UserInterviews) wired into the share flow so I don't have to source testers manually. Significant scope; only worth it if the tool gets more use.
MAYBE
Export to CSV / analysis handoff
Right now the results page is where analysis happens. A CSV export would let someone take the data elsewhere, useful if I ever want to share a test with a non-Playground user.
● END OF CASE STUDY

Thanks for reading.
That's the whole thing.

If you build, ship, or hire for design-engineering-product crossover roles and something here caught your eye, I'd love to hear what.

Visit live site ↗ Get in touch →