Back to portfolio Try the prototype

Case study

TutorMatch, designed and built.

A mobile app, and later a responsive website, that let a parent describe what their child needs in under a minute and get back a ranked shortlist that says why each tutor matched. I did the research, the design and the front-end build.

RoleUX/UI design & front-end build
TimelineSolo, 1-2 weeks
ToolsFigma, HTML/CSS/JS prototype

The problem

Parents look for tutors through Facebook groups and word of mouth, with no easy way to compare qualifications, price or fit for their specific child. It is slow, and it is hard to trust a stranger from a group chat.

The goal

Let a parent describe what their child needs in under a minute, and surface a ranked, transparent shortlist of matched tutors, then keep messaging and booking in the same app so nothing falls through the cracks.

How I got there

01

Research

Mapped the problem and a primary persona, Lydia, from real parent frustrations.

02

Sketch & iterate

Sketched several directions for the onboarding and matching flow before settling on a guided quiz structure.

03

Map the flow

Diagrammed the chosen flow step by step to see exactly where parents could get stuck.

04

Wireframe

Low-fi screens for every step, kept deliberately ugly so structure got judged on its own.

05

Hi-fi & prototype

Visual design, a full component system, then a working interactive build.

Looking outward

Learning from what’s already out there.

Before designing a single screen, I audited three tutor-matching products parents already use, one direct competitor and two indirect ones, to see what was worth keeping and what was worth deliberately doing differently.

Superprof

Direct competitor
Strength

Huge subject coverage, plus tutor reviews.

Gap

No compatibility matching at all, so parents read through many tutor descriptions by hand just to judge fit.

Preply

Indirect competitor
Strength

A thorough intake questionnaire that actually identifies what a user needs.

Gap

Its progress is never shown, so the questionnaire can feel never-ending.

Tutorful

Indirect competitor
Strength

Preference-based matching and a clear β€œhow it works” page with real stats.

Gap

Forces booking before a parent has even messaged the tutor.

None of the three gave a parent a transparent, up front sense of why a tutor was the right fit, none showed onboarding progress clearly, and one asked for a booking before a single message was exchanged. Those gaps are exactly what TutorMatch answers directly, a staged quiz that shows its own progress, a “95% Match” and “Why you were matched” on every tutor profile, and a message-first path before anyone books anything.

Grounding the decisions

Designing for Lydia, not for “a user.”

Every screen had to answer a question a real parent would ask. I built a persona, Lydia, from the goals and frustrations parents mention most often when searching for a tutor, and used her to pressure-test every flow.

LJ

Lydia Jones

Marketing manager, mother of two

  • Age38
  • LocationBerlin, Germany
  • Family2 children (9 & 12)
  • Tech comfortHigh
“I don’t have hours to vet tutors myself, I just want to know someone is qualified, safe, and actually a good fit for my kid.”

Goals

  • 🎯Find a qualified tutor quickly, without endless research
  • 🎯Feel confident the tutor is vetted and safe
  • 🎯Keep track of progress across both kids in one app

Frustrations

  • ⚑Facebook groups feel unreliable and unstructured
  • ⚑No easy way to compare price, subject fit and reviews
  • ⚑Hard to message and schedule outside one app

What matters most

Trust & safety
Convenience
Price sensitivity
Flexibility

Mapping before designing

One flow surfaced a gap I had missed.

Mapping the onboarding quiz step by step made a gap obvious: nothing in the flow asked which child the parent was even looking for help with, even though most families in my research had more than one. That single flow diagram is what led to the extra step you can see in the comparison below.

β–Ά Open app Lands on Home
🏠 Home Taps 'Get started'
πŸ‘§ Choose child Picks which child
πŸ“ Subject Picks a subject
πŸ’° Budget Sets hourly range
🎯 Goal Selects one or more
🀝 Preference Tutor preference
πŸ“‹ Results Ranked tutor list

Edge case: if fewer than three tutors match, the results screen widens the budget range automatically and flags it to the parent, rather than showing an empty state.

Testing surfaced another gap

Testing caught an assumption I’d baked in.

My first pass matched each child to tutors from their stored profile alone, subject and general goals, set once and reused for every search. Usability testing said otherwise. Parents kept pointing out that what matters most does not stay fixed per child, it changes per search: the same child might need a cheaper tutor this time and a tutor focused on one specific goal next time, exam prep instead of general homework help, and a profile set up once cannot capture that.

Before

Budget, goal and tutor preference lived on the child’s saved profile, set once and reused for every search.

After

Budget, goal and preference moved into a short quiz that runs fresh every time a parent starts a new search.

That is why budget, goal and preference in the flow above are their own quiz steps each time, rather than settings buried in a profile.

Deciding what not to build

The dashboard I planned, then scrapped.

Early on I wanted every child to have a progress dashboard, something that showed how they were doing across their lessons. It sounded like the kind of feature a parent would want, so I kept it in the plan longer than I should have.

Scrapped

Per-child progress dashboard

Sessions attended, hours logged, subjects covered, shown as charts on the child’s profile.

Why it went

I could not find a single statistic that was actually informative. Sessions attended and hours logged say a child showed up, not that they understood anything. Nothing I was able to measure answered the question a parent is really asking, which is whether their child is getting better.

The honest answer is that the tutor already knows, and a message from them says more than any chart I could have drawn. A dashboard that looks informative but is not is worse than no dashboard, because parents would trust it and stop asking.

So the space went to messaging and tutor-written session reports instead, where the real signal already was.

Before the guided quiz

A few directions before this one.

The guided quiz was not the first idea. I sketched several directions for the onboarding and matching flow first, and let each one fail on its own terms before settling on the structure used today.

Dropped

A single long form

One long profile-and-preferences form up front, before showing any tutors.

Felt overwhelming and gave parents no sense of progress.

Dropped

Browse first, filter later

Show every tutor immediately, with filters tucked into a side panel.

No way to express what mattered most for a specific child, just more scrolling.

Kept

The guided quiz

A short, staged quiz that builds a visible match score as you answer.

Front-loads what a parent actually cares about, instead of asking them to sift through everyone.

From structure to screen

Wireframe first, styling second.

Every one of the eleven screens went through the same discipline: prove the layout holds up in grayscale before a single brand colour gets applied.

Beyond mobile

The same system, reworked for a bigger screen.

Some parents research a tutor on their laptop during a work break rather than on their phone. I extended the same product, tokens and component logic into a responsive marketing and account website, so the experience feels continuous across devices instead of like two different products.

Reflection

What this project taught me.

This was my first solo, end-to-end project, and it changed how I start one. Writing the flow out before opening Figma found a missing step that staring at screens never would have. Building the prototype myself kept me honest about which interactions were actually as simple as they looked on paper. And scrapping the dashboard taught me the part I did not expect: deciding what not to build is design work too, not a failure to finish.