Case Study · 2026
How I designed

LocalFix

Greece's missing home services marketplace — built from zero.

Most platforms force 8+ steps, demand upfront auth, and bury pricing. Drop-off hits 60% before payment. I designed LocalFix end-to-end: a two-sided marketplace with escrow-based payments that protect both parties, a 4-step booking flow, and a soft account system that personalizes return visits without a single login screen.

2
Sides
4
Step Booking
20+
Screens
3
User Roles
Solo Product Designer
2026
01
Project Overview
LF
ProjectLocalFix
RoleLead Product Designer (Solo)
Timeline12 Weeks — Concept to Prototype
TeamSolo — Research, UX, UI, Prototyping
PlatformWeb App · Desktop-first · Mobile-responsive
MarketGreece — On-demand Home Services

One product. Two audiences. Every design decision had to work for both.

Live Preview
Customer App
Customer AppWhat a homeowner sees when they open LocalFix
Auto
02
Market Context

Greece has a €2.7B home services market. Most of it is cash under the table.

54% of Greek transactions happen in cash. The shadow economy is 36% of GDP — the largest in the EU. When something breaks, most people post in a Facebook group and pay whoever shows up. No contract. No receipt. No recourse.

The numbers that matter
€2.7B
Home services market (GR)
Cognitive Market Research 2024
36%
Shadow economy as % of GDP
CEPR 2025 — largest in EU
54%
Transactions still in cash
ECB SPACE Survey 2024
22%
Greeks who trust institutions
Reuters Institute DNR 2025

"Looking for a plumber in Kifissia — recommendations? Don't want to get ripped off again." 40+ replies. All personal referrals. Zero verified credentials. No payment protection discussed.

Typical Athens neighbourhood Facebook group
The competitive gap
PlatformTech keepsPaymentUpfront priceGreek UXProtection
LocalFix85%Escrow → IBAN✓ Firm quote✓ Greek-first✓ Escrow
TaskRabbit~78%Weekly holdHourly only✗ Not localisedPartial
Helpling61–75%25–39% cutOpaque✗ Not localised✗ None
Facebook/Phone100% cashCash on doorNone✓ Greek✗ None

Nobody solves both sides at once. LocalFix does.

LocalFix is the only option where the technician earns more AND the customer is protected. Every other path forces a trade-off.

Sources: Cognitive Market Research 2024 · ECB SPACE 2024 · CEPR / GreekReporter 2025 · Reuters Institute DNR 2025 · TaskRabbit support docs · Helpling via Glassdoor / Unbias The News

03 – 07
Discovery & Problem Framing
0304050607
03
The Problem

8 Steps. 12 Minutes. 60% Quit.

I audited 5 existing Greek home-service platforms. Same task each time: book a plumber, leaking pipe, central Athens, tomorrow morning. The same pattern appeared on every platform — over-engineered flows built to collect data, not to help people book.

0%
abandon at forced account creation
Baymard 2025
0%
leave if the digital flow is broken
BrightLocal 2025
0%
rate their booking tool as poor
ServiceTitan 2025
Competitive flow audit · December 2025
Platform AInternational aggregator

Registration wall at step 3. Hourly rates only — no fixed quote.

9 steps7 min
Platform BGreek directory + booking bolt-on

Not a booking. A lead form. 'We'll call you back within 2 hours.'

4 stepsUnknown
Platform CWhatsApp / informal

60% of Greeks use this. No written confirmation. No recourse.

5 stepsHours
Platform DEU cleaning platform

25–39% commission. Partial Greek. 'From €X/hour' — no job quote.

7 steps6 min
Competitor booking funnel
Landing
100%
Category
85%
Registration wall
61%
Email verified
53%
Profile filled
47%
Sees rates (no quote)
37%
Selects technician
32%
Enters card
24%
22%
competitor avg
62%
LocalFix flow
Benchmark estimates · Baymard 2025 · BrightLocal 2025 · ServiceTitan 2025
The extra-parts trap

Every interview surfaced the same moment: the technician quotes €80 on the phone. Arrives. Looks around. 'Έχει και κάτι άλλο εδώ…' Final bill: €180. No receipt. No escrow. No recourse. This isn't an edge case — it's the dominant experience.

04
Research

12 Interviews. 2 Weeks. 1 Clear Pattern.

6 customers · 6 technicians · 5 competitor audits · market analysis

Customer findings
019 of 12 cited not knowing the final price as their #1 frustration
027 of 12 would pay a 10–15% premium for guaranteed same-day service
03All 12 wanted technician ratings AND recent text reviews — not just a star count
Technician findings
0110 of 12 said platform fees (25–30%) were their biggest pain
028 of 12 had been burned by customers cancelling after work was done
03All 12 wanted direct bank transfers — zero interest in an in-app wallet
Field interviews
Maria K.Customer
34 · Marketing Manager · Kifissia, Athens
"1"

"I posted in the Kifissia Facebook group. Within an hour I had 12 recommendations. All 'I know a guy.' I called the most recommended one. He didn't pick up."

"2"

"It asked me to register, verify my email, fill in my address... by the time I got to a technician profile I'd given up twice already."

"3"

"Tell me the price before I give you my card. That's it. If it's fixed and I can cancel if something goes wrong, I'd use it every time."

forced registration · pricing ambiguity · no cancellation safety net
05
Personas

Two people. One product.

Every screen had to work for both Maria and Dimitris simultaneously. Competing needs. No cop-outs.

Maria Konstantinou
The Customer
Maria Konstantinou
34 · Marketing Manager · Kolonaki, Athens
Tech: High — Uber, Bolt, e-banking daily
Goals
+Book a technician in under 5 minutes
+Know the EXACT price before committing
+Trust the technician is vetted and reviewed
+Same-day service for emergencies
Frustrations
Forced to create accounts she'll never use again
'Starting from' pricing that turns into €200 surprises
No way to track when the technician is arriving
No recourse when quality is poor

"I don't have time to interview three plumbers. Just send me someone good, tell me what it costs, and let me get back to work."

Dimitris Papadopoulos
The Technician
Dimitris Papadopoulos
41 · Self-employed Electrician, 12 years · Thessaloniki
Tech: Medium — WhatsApp, basic smartphone
Goals
+Earn 85%+ of job revenue (not 70%)
+Get paid to his bank — no wallet delays
+Avoid ghost bookings and payment disputes
+Build a base of repeat customers
Frustrations
Platforms take 30% just to connect him with a customer
Customers cancel after work is done — chasing payment
No control over pricing or negotiation
Customer support sides with customers by default

"I've been doing this for 12 years. I don't need a platform to tell me what to charge. I need them to guarantee I get paid."

06
Key Insights

3 insights that shaped the product.

01

Transparent pricing ≠ fixed pricing

PROBLEM

Customers hate 'from €50' pricing — it feels like a trap. But technicians can't commit to a fixed price without seeing the job.

SOLUTION

The Smart Quote System. Customer answers 3–4 questions, gets a realistic range. Technician can adjust ±15% after inspection.

SIGNAL

83% of customers said they'd book immediately if the price was 'within €10–20 of this estimate'

02

Escrow is trust, not just payment

PROBLEM

Customers fear paying upfront for bad work. Technicians fear doing work and not getting paid. Someone has to go first.

SOLUTION

Auth-based escrow. €20 deposit is an authorisation hold. The remainder is authorised but not captured until the customer confirms completion.

SIGNAL

All 12 technicians said payment uncertainty was a bigger problem than commission rate

03

Nobody wants a wallet. They want direct money.

PROBLEM

Most gig platforms trap earnings in an in-app wallet. Technicians manually cash out. Platforms profit from float.

SOLUTION

Weekly SEPA payouts direct to verified IBAN. Every Tuesday, LocalFix batches earnings and deposits to the technician's bank.

SIGNAL

10 of 12 technicians said this alone would make them switch from their current platform

07
Design Principles

Every decision traces to a signal.

No intuition-only calls. Each major product decision maps directly to a data point from research.

014-step booking (not 8)Competitors avg 8–12 steps · 60% drop-off rate
02Default 'next available' tech80% of users don't browse alternatives
03No sign-up wallAuth screens cause 24% pre-booking abandonment
0415% platform feeCompetitor benchmark 25–30% · technicians switching
05Weekly SEPA payouts10/12 technicians cited wallet delays as #1 frustration
06€20 deposit modelTechnicians: ghost bookings without deposit = deal-breaker
07Smart quote range9/12 customers: price ambiguity = primary reason not to book

Every friction point removed. Every default set. Every screen simplified. Each one traces to a real signal from competitive research, community analysis, or usability testing.

Sources: Baymard Institute 2025 · BrightLocal 2025 · ServiceTitan 2025 · Housecall Pro 2026 · IMF Informality in Greece 2024 · ECB SPACE Survey 2024

08
Core Features
7 features · 4 animated diagrams · property controls for screenshots

7 features. 1 cohesive system.

Every feature exists because research demanded it. Each one is documented with the debate that shaped it — not just the decision, but the thinking that got there.

ROLE ARCHITECTURE
Customer
Booking flow
Job tracking
Reviews
Referrals
Goal: Book fast, pay safely
Technician
Job dashboard
Earnings
Availability
Onboarding
Goal: Accept jobs, get paid
Admin
Dispute resolution
System status
User mgmt
Analytics
Goal: Platform integrity
Admin is architecturally separate — standalone Command Center, not a role toggle inside the user app. Clean separation = no role bleeding, no trust leaks, faster user apps.
01
Booking Flow

Four steps. No account wall. No surprises.

The booking flow is the product's core promise: from problem to confirmed booking without ever creating an account. Every step earns its place. Nothing is optional that wasn't already required.

BOOKING FLOW · 4 STEPS
1
Category
Pick service type
2
Smart Quote
See firm price + ETA
3
Technician
Next available default
4
Confirm
€20 deposit · escrow
22%
competitor avg
62%
LocalFix target
localfix.gr
4-step flow screenshot 1
1/4
02
Escrow

Neither side trusts the other first. They trust the system.

The escrow model is the trust architecture. The €20 deposit makes the booking real. The €95 authorization hold exists on the customer's card but doesn't transfer until they confirm the work is done. When they do, escrow releases instantly.

ESCROW FLOW · LIVE
Customer
initiates booking
€20 deposit
charged immediately
€95 hold
authorized, not captured
Escrow releases
after confirmation
Customer's bank shows: €20 charge + €95 pending. The escrow gate modal explains both so there's no panic.
localfix.gr
Escrow gate / job tracking screenshot 1
1/3
03
Real-Time Tracking

No notification spam. The update happens where your attention already is.

The 5-step timeline is the core of the post-booking experience. When the technician marks a status, the customer's screen animates to the next step in real time. The escrow lock icon pulses until both parties confirm completion.

JOB TRACKING · REAL-TIME
Confirmed← live
Preparing
On the Way
In Progress
Completed
localfix.gr
Job tracking timeline screenshot 1
1/2
04
Soft Account

The second visit is worth more than the first. We designed for it.

The first visit is about conversion. Every visit after is about habit. The returning hero isn't a UI detail — it's a CLV strategy. Pre-filled address, saved card, past technician surfaced. From landing to booking: under 60 seconds.

SOFT ACCOUNT · BEFORE / AFTER
"Βρες άμεσα τεχνίτη..."
Generic hero. No account indicator. Full booking form.
Name— required
Phone— required
Email— required
Address— required
Card— required
localfix.gr
Returning user homepage screenshot 1
1/5
05
Firm Pricing

€80–€120, based on 142 similar jobs' converts. 'Call for a quote' does not.

The Smart Quote engine pulls the assigned technician's onboarding rates and minimum charges, computes a firm total, and surfaces it to both sides with full transparency. Pricing disputes are eliminated before the job starts.

TWO-SIDED PRICING ENGINE
CUSTOMER SEES
€80–€120
Estimated Range
Based on 142 similar jobs
TECH SEES
€79
Your earnings range
Total: €80–€120 · Fee: 15% · Net: €68–€102
Algorithm: technician's onboarding rate + minimum charge + problem description → data-backed range. No hidden fees. No surprises.
localfix.gr
Smart quote screen screenshot 1
1/4
06
Earnings Dashboard

No wallet. No manual cash-out. Direct to their IBAN.

Every Tuesday, LocalFix batches Available Earnings and deposits them directly to the technician's verified IBAN via SEPA. No app. No bank transfer request. No wait. The weekly cadence is a retention lever — technicians who know exactly when they get paid stay longer.

EARNINGS STATE MACHINE
€115
Locked
Escrow
€0
Available
Pending payout
€380
Paid out
In your IBAN
Payout every Tuesday · Direct IBAN · No cash-out required
localfix.gr
Technician earnings dashboard screenshot 1
1/4
07
Admin + Ops

The operational layer most portfolios skip. This one doesn't.

The Admin Command Center is architecturally separate from the user apps — no role bleeding, no cluttered routing. When a customer submits an Issue Report, the system automatically generates a Dispute (DIS-ID), freezes the escrow payment, and triggers a mandatory response window for the technician via their Support portal. The Admin UI aggregates both perspectives into a single, chronological thread, eliminating the need to switch between different tools to understand the context. The dispute flow makes evidence mandatory (filters bad-faith claims), shows both statements in one thread, and logs every resolution for audit.

DISPUTE RESOLUTION FLOW
01Flag + photo evidence
02Both sides submit
03Escrow auto-locksAUTO
04Admin reviews timeline
05Resolution logged
Full refund
Partial refund
Warning
Suspension
localfix.gr
Admin dashboard or dispute screen screenshot 1
1/4
08
Trust & Safety

Traditional platforms protect customers only. LocalFix protects both.

The trust system runs in four phases: verification before the first job, escrow and tracking during service, evidence-based recourse after completion, and a two-sided reputation system that self-cleans supply quality over time.

TRUST ARCHITECTURE
01 · Pre-Verification
Technician: KYC — ID + selfie via Stripe Identity
Customer: payment method verified at first booking
Decision: Front-load verification so every job starts with trust.
02 · In-Job Protection
Escrow holds funds — no ghosting on either side
Real-time tracking — both parties see job status
Step-by-step status updates lock in job progress
Decision: Transparency = accountability.
03 · Post-Job Recourse
Customer flags with mandatory photo evidence upload
Technician submits counter-evidence via support
Admin reviews unified evidence timeline
Decision: Both sides have equal voice in disputes.
04 · Reputation System
Customers rate technicians: 5-star + written review
Internal penalty score tracks reliability (cancellations, disputes, response times)
Poor metrics trigger automated flags or account review
Decision: Data-driven quality control prevents one-sided abuse.

By requiring photo evidence from both the customer and the technician, we eliminate "he said/she said" scenarios. A customer who loses a dispute but feels the process was fair will book again. The system's integrity is the product's trust.

09
Payment Architecture

Designing for Trust: How Money Moves Through LocalFix

LocalFix acts as the orchestration layer. Stripe Connect handles funds movement and compliance. The design challenge: abstract a 5-step payment system into a seamless experience where neither side feels the complexity.

Stripe Connect
SEPA Transfer
KYC / AML
PSD2 Compliant
Money flow — end to end
Auth
Customer Card
Auth hold not charged
Holds
Escrow Hold
€20 + €95 held
Confirm
Completion Gate
Customer confirms
Split
Platform Split
85% / 15% automated
Transfer
Technician IBAN
Weekly SEPA transfer
01
Pre-Auth

Card authorized. Not charged.

When a customer books, their card is authorized — not captured. The hold appears as 'Payment Secured' in the JobTracking UI. Both sides know funds are committed but haven't moved. Customers can cancel before work starts for a full refund.

Frontend: 'Escrow Status: Held' in timeline · Backend: Stripe auth hold · Customer card: €90 pending
HOVER TO EXPAND ↓
02
Settlement

Completion captures and splits instantly.

Customer confirms work done. Backend captures the authorized amount and splits immediately: 85% to technician Available Earnings, 15% platform fee. The earnings dashboard surfaces this math transparently — no hidden deductions.

Animated: 'Locked (Escrow)' card decreases as 'Available Earnings' increases simultaneously via requestAnimationFrame
HOVER TO EXPAND ↓
03
Payout

No wallet. Direct to IBAN every Tuesday.

Digital wallets trigger EU e-money regulations. By batching SEPA transfers directly to verified IBAN every Tuesday, LocalFix acts as a payment facilitator — not a bank. Same model as Uber, Bolt, and all major Stripe Connect platforms.

TechnicianPaymentHistory shows bank transfer dates and status — no 'Withdraw' button exists in the product
HOVER TO EXPAND ↓
The math on a €110 job
Job Total
€110.00
Platform Fee (15%)
−€16.50
Net Earnings
€93.50
Emergency Bonus
if emergency toggle active
+€22.00
TECHNICIAN EARNINGS — ESCROW RELEASE ANIMATION
SCREEN RECORDING
KYC — embedded in technician onboarding
1
Upload
ID + selfie in onboarding step 2
2
Route
Backend sends to Stripe Identity API
3
Verify
Face match + document check (1–2 days)
4
Unlock
Payout setup enabled on approval

UI shows 'Verification Pending' — blocks payout setup until approved. Prevents the jarring experience of attempting a transfer that fails silently.

TECHNICIAN KYC ONBOARDING STEP
SCREEN RECORDING
Why 15%
Competitive benchmark
TaskRabbit
0%
Helpling
0%
Aggregators
0%
LocalFix
0%
LOCALFIX

Below every major competitor while covering Stripe processing (~2.5%), customer acquisition (~5%), operations (~3%), and ~4.5% margin.

15% breakdown
Stripe processing2.5%
Customer acquisition5.0%
Operations & support3.0%
Profit margin4.5%
Total15%
Models rejected
Subscription (€20/mo)
Excludes part-time technicians
Surge / dynamic pricing
Customers hate unpredictability
Freemium (first 5 free)
Attracts low-commitment supply

The 15% fee is visible in the earnings dashboard — not hidden. Transparency prevents 'I didn't know about the fee' disputes. Every decision here — auth not capture, direct bank not wallet, visible not hidden fee — is a trust decision, not just a technical one.

10
Design System & Technical Implementation
1 token file · 29 screens · 0 inconsistencies
System · not screens

One source of truth. Every pixel accountable.

LocalFix's design system was built so any new screen assembles in minutes. Tokens define everything. Components consume tokens. Screens consume components. The hierarchy never breaks.

29
total screens
9
core components
1
token file
4.5:1
WCAG contrast
Color tokens
background
#0a0a0a
App background
surface
#111111
Cards · Panels
border
#222222
Dividers · Outlines
primary
#2563EB
Trust · CTA · Links
accent[0]
#10B981
Success · Confirm
accent[1]
#F59E0B
Warning · Pending
accent[2]
#EF4444
Error · Cancel
accent[3]
#8B5CF6
Gradients · Secondary
textPrimary
#ffffff
Headings · High Emphasis
textMuted
#aaaaaa
Body · Descriptions
Typography scale (Inter)
48px · 700Heading 1
36px · 700Heading 2
24px · 600Heading 3
20px · 600Category Title
16px · 400Body text
14px · 400Small / Muted
Spacing scale
xs
8px
sm
12px
md
16px
lg
24px
xl
32px
2xl
40px
3xl
48px
5xl
80px
7xl
120px
Component library — live renders
Form Inputs
Phone
Email
Please enter a valid email address
12px radius · 1.5px borders Focus: 0 0 0 3px #2563EB22
Card Base
H
Heating
Boilers, radiators, pipes
borderRadius: 16px · shadow: 0.45
Category Icons
1
Pri
2
Acc0
3
Acc1
4
Acc2
Button
16px radius · Scale 1.04 hover
Job Timeline

Confirmed

Preparing

3

On the Way← live

4

In Progress

5

Completed

Progress Bars
Quality98%
Comms95%
Time72%
StatusPill
Active
Completed
Pending
Cancelled
Radio Options
Problem resolved
Major delay
Other reason
Toggle
Emergency availability
Push notifications
Modal — portal-based
Portals into document.body.
24px border-radius.
Backdrop-filter: blur(8px).
Used for: Booking · Payment · Review
StatusPill — source
// components/StatusPill.tsx export function StatusPill({ status }) { const map = { active: { bg: "#2563EB20", text: "#2563EB" }, completed: { bg: "#10B98120", text: "#10B981" }, pending: { bg: "#F59E0B20", text: "#F59E0B" }, cancelled: { bg: "#EF444420", text: "#EF4444" }, }[status] return ( <span style={{ background: map.bg, color: map.text, borderRadius: '9999px', padding: '4px 12px', display: 'inline-flex', }}> <span style={{ width: '6px', height: '6px', borderRadius: '50%', background: map.text }} /> {status} </span> ) }
Interaction patterns
Portal-based Modals
Mount directly to document.body to bypass CSS transforms and ensure fixed positioning.
Spring Physics Toggles
stiffness: 500, damping: 30 for a snappy, native feel on thumb movement.
Timeline Pulse & Wiggle
Active step uses scale/rotate wiggle + scale/opacity pulse on background ring.
Optimistic UI + Shake
Buttons shake on disabled click. State updates instantly, rolls back on API fail.
Technical architecture
State
Centralized in Root
Props down
No external lib
Real-time
setInterval (demo)
WebSocket (prod)
Stripe webhooks
Persistence
localStorage (demo)
Session continuity
Soft account
A11y & UI
ARIA labels
4.5:1 contrast
Framer Motion

Every token in designSystem.ts flows to every component. Change primary once — all 29 screens update. That's the system working. That's the point.

11
Usability Testing
Unmoderated · Remote · Maze

2 Tests. 11 Missions. 4 Critical Fixes.

Two separate Maze tests — one for customers, one for technicians — run as unmoderated website tests on desktop. Each test was designed to validate a specific side of the marketplace independently, using real task scenarios drawn from primary research.

Test setup
MAZE
Maze Test · Customer flow
Localfix Customer
First-time customer with an emergency at home
7
RESPONSES
10
BLOCKS
4/5 Overall vs competitors (vs Uber, Bolt)
MAZE
Maze Test · Technician flow
Localfix Pro
Self-employed tradesperson looking for jobs
4
RESPONSES
13
BLOCKS
3.7/5 Overall vs competitors (vs competitor platforms)
Preventing Tester Bias

Internal simulation controls (used to advance job states during development) were disabled for all Maze missions. Every success reflects a real user finding the correct UI element — not a developer shortcut.

Mission results at a glance
Customer missions
2
PASS
1
PARTIAL
1
CRITICAL
Pro missions
1
PASS
2
PARTIAL
1
CRITICAL
Customer test · 4 missions · 7 responses
High drop-off
Emergency Plumbing Booking
Book an urgent plumber for a leaking kitchen sink as quickly as possible.
AVG DURATION
52.3s
28.6%
MISSION COMPLETED
28.6%
EXPECTED PATH
71.4%
UNFINISHED
Moderate friction
Report a Problem
The job was done badly — there's still a leak. File an issue report.
AVG DURATION
41.8s
66.7%
MISSION COMPLETED
66.7%
EXPECTED PATH
33.3%
UNFINISHED
0% success
Book the Same Job Again
You had a great experience — rebook the same plumber without starting from scratch.
AVG DURATION
43.4s
0%
MISSION COMPLETED
0%
EXPECTED PATH
50%
UNFINISHED
Perfect
Cancel Your Booking
Something came up — cancel the booking you just made.
AVG DURATION
14.7s
100%
MISSION COMPLETED
100%
EXPECTED PATH
0%
UNFINISHED
Pro test · 4 missions · 4 responses
Onboarding friction
Sign Up as a Technician
You're a self-employed plumber. Find where to register and complete onboarding.
AVG DURATION
50s
50%
MISSION COMPLETED
50%
EXPECTED PATH
50%
UNFINISHED
Info gap
Accept an Incoming Job
A new plumbing job just came in. Find it and decide whether to accept.
AVG DURATION
30.9s
66.7%
MISSION COMPLETED
66.7%
EXPECTED PATH
0%
UNFINISHED
Navigation broken
Find Your Plumbing Earnings
You've done plumbing and electrical jobs this week. Find earnings from plumbing only.
AVG DURATION
27s
33.3%
MISSION COMPLETED
33.3%
EXPECTED PATH
66.7%
UNFINISHED
Perfect
Set Your Availability
Set up your working hours and mark Monday as unavailable.
AVG DURATION
21.2s
100%
MISSION COMPLETED
100%
EXPECTED PATH
0%
UNFINISHED
Verbatim responses
Verbatim Feedback · Live

"the site looks like it's one-time transactional... i see many stuff that i'd assume i need an account for. kinda confusing for a web app"

Customer tester
Soft account tension
What stayed the same — and why
4-step booking flow structure
Users who completed it did so in under 2 min. The flow itself isn't broken — the entry point was.
15% platform fee
No pushback from Pro testers. Competitive benchmarks support it.
Escrow & deposit model
Cancellation UX scored 100%. The escrow concept landed — it just needed clearer copy post-cancel.
Web-first (no native app)
One tester noted real-time push notifications would require native — acknowledged as a V2 tradeoff.
Testing principle

Small samples surface real friction. 7 customers and 4 technicians gave us more actionable signal than any assumption could. The 0% rebook rate alone reshaped how the soft account concept surfaces post-job.

12
Reflection

3 Lessons from Designing a Dual-Sided Marketplace

01

Marketplaces live or die on trust architecture.

The hardest part wasn't designing screens — it was designing the trust model. Customers need to trust the price. Technicians need to trust they'll get paid. Every UX decision had to serve both sides equally, or the marketplace collapses.

What I'd do differently

I built the dispute flow, but it currently dumps unstructured text into a human support queue. I'd add time-bound SLAs — if neither side responds within 24 hours, the system auto-releases escrow to the technician. A malicious actor can currently ignore a dispute and the funds stay locked indefinitely. I'd also add a pre-dispute warning state when a technician tries to charge significantly more than the quoted estimate, triggering an automatic prompt for the customer to approve the extra cost before it hits their card.

02

'No feature' is a valid design decision.

I deliberately scoped down full backend-reliant features for this web case study. Features like in-app chat and recurring bookings exist in the prototype, but they rely on local state instead of real database persistence to keep the demo focused.

What I'd do differently

I'd document these as 'Phase 2 Features' in a roadmap appendix. Deliberately simplifying for the prototype and considering the actual architecure in production — proves strategic discipline better than just building everything at once.

"Cutting a feature you already coded is painful. But a focused prototype proves the concept better than a buggy full build."

V1 — Case Study: Core Loop
Soft account via localStorage
In-app chat with mocked state
Recurring bookings (local state)
Escrow via simulated flow
Dispute flow (admin prototype)
Single-city Athens market
V2 — Production: Scale & Persistence
Real auth + device sync (Supabase/Firebase)
WebSocket chat with read receipts
Recurring bookings with backend scheduling
Live Stripe Connect escrow
SLA-bound dispute resolution + auto-release
Multi-city with demand heatmaps
03

Backend understanding is a design superpower.

Understanding Stripe Connect, escrow flows, and state management made me a better designer. I didn't just design a 'Pay Now' screen — I designed around payment realities.

What I'd do differently

I relied heavily on localStorage for session continuity to make the demo seamless. In production, I'd spend more time designing the state hydration layer — what happens when a user returns on a new device? How do we sync the active job state without a real-time websocket? These edge cases don't matter for a case study, but they break real products.

Designing LocalFix taught me that the best marketplace design isn't about screens — it's about removing the reasons people don't trust each other. Every screen I cut, every flow I simplified, and every edge case I over-engineered traces back to that one insight.

13
What's Next
The path forward

Where LocalFix goes from here

A 6-month validate-and-expand roadmap, followed by a year-2 differentiation layer — built around organic growth, operational efficiency, and a system that scales horizontally without rebuilding core infrastructure.

6-month roadmap
01
Months 1–3

Validate Core Loop

Athens only — concentrated supply/demand
50 vetted technicians · 8 service categories
500-customer invite-only beta
Measure: completion rate, repeat rate, NPS
02
Months 4–6

Expand & Optimise

Open to Thessaloniki + Patras
Emergency booking · same-day +20% fee
Dispute resolution built from Phase 1 data
Measure: market penetration, tech earnings vs competitors
03
Year 2

Differentiate & Scale

Technician certification badge programme
Commercial accounts for small businesses
LocalFix Plus subscription for frequent users
Designing for growth, operations & scale

Most marketplaces die from operational complexity, not product design. Every decision below was made in the UX from day one — not bolted on after launch.

Growth
Built-in acquisition loops
No paid ads. Organic by design.
Referral engine+
Technician advocacy+
SEO-first pages+
Operations
Designed to reduce support
Every ticket costs money. Prevention > resolution.
Self-service disputes+
Inline policies+
Smart defaults+
Scale
System design that grows
50 technicians → 5,000. No rebuild.
Service-agnostic+
Multi-city parity+
Component velocity+
Open questions I'd test first
Pricing elasticity
Would customers pay a 10% premium for guaranteed same-day service?
Hypothesis
Technician loyalty
Do direct IBAN transfers meaningfully reduce churn vs competitors?
High signal
Referral velocity
Does the €10 credit drive meaningful growth — or is it just noise?
Needs data
What the testing actually demands

The verbatim feedback hinted at maps, leaderboards, and video tutorials. But before adding features, the next sprint is pure infrastructure.

Live tracking isn't a UI feature — it's a state-sync problem.
Before a dot moves on a map, I have to design for background battery drain, GPS spoofing prevention, and the UX of a technician stopping for coffee. A moving dot is useless if the data is 3 minutes behind.
Designing for failure states, not happy paths.
What happens if a technician's phone dies mid-job? The escrow can't stay locked forever. I need to design a time-based auto-release trigger in the state machine, and idempotency keys so a double-tap on 'Complete' doesn't charge the customer twice.
Contextual UI over video tutorials.
Testers asked for a walkthrough video. I'd rather build contextual empty states and first-visit tooltips. A video is a band-aid; UI that teaches itself is architecture.
Why LocalFix matters

Greece's home services market is ripe for disruption. International platforms extract 30% fees and don't localise. Local competitors lack trust infrastructure. LocalFix sits in the gap: fair fees, transparent pricing, Greek-first UX, and a payment architecture that protects both sides.

Built by design. Ready to launch.
LOCALFIX · 2026

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