01 — BrightCHAMPS Learner App

Rebuilding the parent app around the six questions parents actually open it to answer.

BrightCHAMPS runs live one-on-one classes in coding, financial literacy, robotics and math for 6–16 year olds. The Learner App is where a parent manages all of it. Through mid-2023 it was losing the people it was built for — so we rebuilt it around what a parent opens their phone to find out.

End-to-end product designiOS · Android · Tablet0→1 flowsEdge-case designDesign system
17k
Monthly active users
down from 23k in June
5m 51s
In-app time per user, per month
down from 9m 40s
14
Negative Play Store reviews
July and August
5
Sections rebuilt in the redesign
plus 9 pop-ups
Baseline, June–August 2023 — the state the redesign started from
Role
Design lead, end-to-end
Team
1 PM · 1 tech lead · QA
Platform
iOS, Android, Tablet
Scope
5 sections · 9 pop-ups · 30+ edge cases
Shipped
25 Sept 2023
02 — The problem

The app wasn’t broken. It was thin.

Between June and August 2023, monthly active users fell from 23k to 17k and time in the app dropped from nearly ten minutes to under six. Fourteen negative reviews landed on the Play Store in two months. Nothing had broken — people simply stopped finding a reason to open it.

The web dashboard held the full picture of a child’s course. The app held a fragment of it. Every real task — moving a class, checking whether the last one happened, seeing if a quiz was done — ended somewhere that wasn’t the app. A parent opened it, learned nothing new, and left.

“Most of the users on the app are parents, not kids.”
From the product brief — the line that reframed everything

It was called the Learner App and it was designed like a student’s classroom. The people actually holding the phone were parents checking in between other things — and they weren’t there to learn. They were there to verify.

01
No way to move a class
Rescheduling or cancelling meant the web dashboard or a call to support. A weekly 1:1 slot has to survive school events, travel and sick days.
02
No proof the class happened
Attendance, credits used and credits lost lived in the backend. A parent paying per class could not see what they had left.
03
Homework was invisible
Quizzes, assignments and assessments had no status a parent could read — no due date, no score, no sign that anything was pending.
04
No answer to “is this working?”
Concepts covered, certificates earned and course progress were spread across three systems, none of them the app.
03 — Who it is really for

A learner app used almost entirely by adults.

Support call logs told us the account holder was almost always the one on the phone. That changed what the app owed them: not encouragement, not classroom energy — evidence. Two primary parents drove the structure; two edge cases decided its limits.

Primary personas
P
The checking-in parent
One child · One course · Opens the app 2–3× a week
“Is Tuesday still on, and did last week actually happen?”
Goals
See the next class without hunting for it
Confirm the last class ran and the credit was used
Move a class when school gets in the way
Frustrations
Calls support to reschedule — twice a month
Can’t tell a cancelled class from a missed one
T
The two-kid parent
Two children · One phone number · Often two courses
“I registered both kids on my number. I only see one of them.”
Goals
Switch between children without logging out
Keep coding and financial literacy separate but comparable
Track two schedules that don’t overlap
Frustrations
One account rendered as one child
Course-specific support routed to the wrong inbox
Edge cases that shaped the build
R
Edge case
The relocating family
Enrols in one country, takes classes from another. Every date and time in the app has to be right in the timezone they are standing in — not the one they signed up in.
What it got
Timezone selector on the home header, applied to every class card, with the short code and city shown so it can be checked at a glance.
H
Edge case
The account on hold
An instalment is pending or classes are paused. The natural instinct is to lock the app. But this parent is exactly the one who needs to see what they already paid for.
What it got
Upcoming classes lock with a clear reason and a route to a human. Completed classes, history and certificates stay fully open.
04 — Process

Nine weeks, and a line drawn early about what the release would not do.

The student dashboard was still evolving underneath us, so the release had to be scoped to survive that. Deciding what to leave out took as long as deciding what to build.

012 weeks
Audit
Listed every action a parent takes across a course, then marked where each one actually lived: app, web dashboard, email, or a phone call to support. Most were not in the app.
021 week
Frame
Turned falling engagement into six questions worth opening a phone for. Anything that didn’t answer one of them lost its claim on the home screen.
031 week
Structure
Five sections under one nav — Home, Curriculum, My Tasks, Schedule, Profile. Drew the scope line early: onboarding, payments and a notification centre were planned as a follow-up release.
044 weeks
Design
Screens, states and copy for mobile and tablet. Every flow was signed off with its failure states — cancelled, locked, paused, missed — before the happy path was called done.
0530 days
Ship & watch
Released 25 September 2023 with a 30-day impact window and a named goal for each metric, so the release could be judged rather than admired.
05 — Approach

Four rules that settled most of the arguments.

With five sections, nine pop-ups and more than thirty edge cases in scope, the useful thing wasn’t more opinions — it was a small set of rules everyone could apply without me in the room.

Answer, then act
Every screen opens with the fact a parent came for — next class, last class, credits left — before it offers anything to do.
Design the block first
Cancelled, locked, paused, missed. The states where something has gone wrong decided the layout; the happy path fitted around them.
One number, many kids
Profile switching is a control on the home header, not a setting buried in an account page. Two children, one login, no hunting.
Friction in proportion
Rescheduling is three light steps. Cancelling is irreversible and costs a credit — so it asks you to type the word.

What shipped

01
Reschedule in three stepsMust have
Reason, then a day inside a ten-day window, then a slot drawn from live teacher availability. Locked inside two hours of the start time so a teacher is never ambushed mid-preparation.
02
Cancelling asks you to mean itMust have
A cancelled class costs a credit and can’t be undone, so the confirm button stays inactive until the parent types CANCEL. The teacher is notified by email the moment it goes through.
03
Attendance in four numbersMust have
Total paid, completed, remaining, credits lost — per course, so a child taking coding and financial literacy gets two honest columns rather than one blended average.
04
My Tasks with statuses that mean somethingMust have
Quizzes, assignments and assessments each carry Pending, Submitted, Score or Missed. Assessments need 70% and get exactly one re-attempt inside seven days. Nothing says “evaluated” without showing the mark.
05
Asking for a review at the right momentPicked
A rating stripe on home, shown once a month and suppressed for fifteen days after a parent responds. Four stars and up routes to a referral; below that routes to feedback. Which flow it points at is a backend switch, not a release.
06 — The journey, scene by scene

Fourteen moments, and the decision inside each one.

The screens are the easy part to show. What matters is why each one is shaped the way it is — and what happens when it goes wrong.

Scene 01 — Home
Six classes, in the order they happen

The next six upcoming classes in ascending order, each with its lesson image, course tag, teacher, class number, topic, date, time and timezone. Nothing above them but the greeting and the profile control.

The decision
Six is enough to cover a fortnight of a twice-weekly course and short enough that the parent never scrolls to find tomorrow. View All hands off to the full list in Curriculum rather than growing the home screen.
Edge case
No upcoming classes means the package is finished — the empty state becomes the upgrade message rather than a shrug.
07 — Deep dive: the two-hour rule

The smallest rule in the product decided the most screens.

A class can’t be moved or cancelled inside two hours of its start. One sentence in the brief — and every class card, every empty state and half the messaging in the app had to account for it.

01
A teacher needs preparation time
These are one-on-one classes with a lesson built for one child. A slot moved thirty minutes before start doesn’t inconvenience a teacher — it wastes the preparation entirely.
02
A credit spent is gone
Parents buy a package of classes. Cancelling burns one. It is the only action in the app with a price attached and no undo.
03
Nobody cancels calmly
The reason list — health, school activity, out of station — describes a parent doing this in a hurry, on the way to something else. The interface had to slow them just enough.
// Class card — which actions the parent gets, and why

startsIn > 2h              →  reschedule ✓   cancel ✓
startsIn ≤ 2h              →  both disabled, reason shown inline
instalmentPending          →  upcoming locked · history stays open
classesRemaining = 0       →  upcoming list becomes the upgrade route
status = incomplete        →  labelled incomplete, never counted as done

// disabled, not hidden — a rule you can't see is a rule you
// learn by being refused

And the messages that carry it

Nine pop-ups shipped with the release. Each one had to survive being read in four seconds, at a school gate, by someone who didn’t ask for it.

Cancelled by parent
“Your coding class No. 155 has been cancelled.”
States the fact and the class number. No apology, no reassurance — a receipt.
Cancelled by teacher
“…cancelled on teacher’s request.”
The only persistent pop-up in the set. It stays until dismissed and is mirrored by email, because this is the one a parent must not miss.
Rescheduled
“…rescheduled from Aug 15, 5.30pm to Aug 18, 5.30pm.”
Carries both times so the parent can check the change is the one they meant to make.
Class added
“A coding class has been added on Aug 18, 5.30pm.”
One class names the slot. Several classes say so rather than listing every slot in a toast.
Instalment pending
“Our counsellor will contact you soon for payment.”
Locks upcoming classes with a visible reason, and names a human. History, notes and certificates stay open.
Package complete
“You’ve successfully completed all your classes.”
An empty upcoming list is a milestone, not a bug — so it reads as one, with the upgrade route attached.
08 — Outcome & reflection

What we said we’d move, what moved, and what I’d change next time.

23k
Monthly active users
back up from 17k
9m 40s
Engagement per user, per month
back up from 5m 51s
0
Negative Play Store reviews
down from 14
Measured 25 Oct 2023, thirty days after ship
What it was judged on
Named numbers, set before the release
Every metric had a target and a date — 25 October 2023, thirty days after ship. Committing to the numbers up front meant the release was judged on what parents did, not on how it looked, and all three landed on or above the line.
What I’d do differently
The personas came from support logs, not from parents
We knew the account holder was usually the one on the phone because of who called support. That’s a strong signal and it is not the same as talking to people. Six interviews before the framing week would have cost days and settled arguments that took weeks.
What the constraint taught me
Scope to survive a moving foundation
The student dashboard was still changing under us, so the first release deliberately left out onboarding, payments and a notification centre. Cutting the two flows where trust is won was uncomfortable — but shipping half an app that stays correct beat shipping a whole one that breaks.
What I’d measure next
Not active users — support calls
MAU tells you people opened the app. The deeper test of this release is whether a parent who reschedules in-app ever calls support to move a class again. That number lived in a different team’s dashboard, and I’d go get it first next time.
09 — Closing

A parent doesn’t open an app to be delighted. They open it to find out whether something they paid for actually happened. Design that well and the rest of the product gets a chance.

Next case study
BrightCHAMPS Student Onboarding
A 14-scene conversational flow, and a 35% lift in conversion
↑
Adnan Murad — Senior UI/UX Designer

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