Flow map, verified from source 19 July 2026

Every screen, every state, every route through Lightkeepers.

Read out of the live codebase rather than described from memory. This is the brief a wireframe set gets built from: what exists, what each screen does in each of its states, and where the holes are.

32Routes
60Wireframe states
5Actors
6Journeys

The five actors

Who can be on the other side of the screen, and what lets them in.

ActorHow they existWhat gates them
Visitor No account Nothing. Every marketing route is ungated
Parent, unverified Signed up, email not confirmed Held at /app/verify-email
Parent, verified Supabase session in an httpOnly cookie All of /app/* except admin
Child A signed cookie layered on the parent's session, 12 hour life Optional 4 digit PIN. Locked out of settings, documents and work review
Admin An is_admin() check, re-run inside the database /app/admin/* only

The fact that shapes every wireframe

Get this wrong and half the screen designs are wrong with it.

A child never logs in.

There is no child account and no child password. The parent signs in, then hands the device over at /app/switch/[id], which checks an optional four digit PIN and sets a signed 12 hour cookie on top of the parent's own session.

So most app screens have two designs, not one. The lesson page is the clearest case: a child can type answers but never sees the answer key download, while a parent sees the answer key but gets read-only fields. Settings, documents and work review redirect away entirely in child mode.

Journey A. Visitor to signup

The free side. Fully built, and the most finished part of the product.

Homepage /
Two primary paths out: create an account, or take the free start plan. The log in link quietly rewrites itself to "Dashboard" when a session is detected.
State picker /start
Eight state cards, each into a legal registration guide.
State guide /guide/[state]
Legality, curriculum standard, registration checklist, timeline, ongoing obligations. Every claim carries a source and a date, and links out to the real government page.
Start plan wizard /start/plan
Nine steps, entirely client side. Nothing is sent to a server, and progress survives a browser close. Output is a personalised plan plus five PDFs generated in the browser.
Signup /app/signup
The only outbound app link on the plan screen.

The nine steps

#QuestionInput
1Where do you live?Single select, eight states
2What's your first name?Text
3Tell us about your childrenRepeatable block: name, year or age, one interest. Add and remove rows
4What's your current situation?Still enrolled, already withdrawn, starting fresh
5When do you want to start?Right away, few weeks, next term, not sure
6What's your biggest worry?Paperwork, curriculum, socialisation, not sure
7Who will be the main educator?Two text fields. Prefills from step 2
8How will you track progress?Multi select plus free text. All four preselected
9Which style sounds like you?Structured, eclectic, child-led

Four things already broken here

The /start copy promises "six quick questions" for a nine step wizard. The progress bar is calculated so step 9 reads 88.9 percent and never reaches 100. Step 9 collects a learning style that gates the final button and is then never shown on the plan. And the state content file is flagged as a draft that no page may render from, while all three public surfaces render from it today.

Journey B. Signup to a generated term

The funnel that decides whether anyone ever sees the product working.

Signup, verify, log in
Name, email, state, password. The household record is created on first login, not at signup, so an unverified account owns nothing yet.
Onboarding, three steps /app/onboarding
Welcome and explainer, then "what do you have at home?" (eleven materials, five spaces, free text), then add your first child. Skip is available on every step.
Add child, four steps /app/settings/children/new
Name, year level and optional PIN. Then fourteen interest chips. Then temperament: energy, learning styles, social preference, attention span, notes. Then confirm. Progress mirrors to session storage so a refresh loses nothing.
Generate the term /app/child/[id]
One button. Everything after it is a waiting state, and the waiting states are where this product either earns trust or loses it.

The seven states of the hub screen

No plan yet Building, live progress Awaiting review, dead end Ready for your review Generation failed Live term plan Partially live, still building

The build screen is already good work. It shows a per block checklist, one row per subject and week, each pending, building or done. A flavour line rotates every six seconds and is seeded with the child's own interests. It reassures the parent that closing the browser is safe, and it surfaces an early "first lessons are ready, start now" callout before the whole term finishes.

Two approvals, one dead end

A term plan reaches a parent through two gates. Staff move it from draft to vetted in the admin queue, then the parent moves it from vetted to live by approving it. A plan sitting at draft shows the parent "awaiting review" with no action, no timeline and no way to nudge it. Worse, the dashboard reads that same state as "no plan" and tells them to generate a term they already have. Two screens describing reality differently is the single worst moment in the product today.

Journey C. The child's daily loop

Parent hands over the device. Everything from here is designed for a kid.

PIN gate /app/switch/[id]
A single four digit field. Skipped entirely when no PIN is set. No attempt limit and no lockout.
Child home /app/child/[id]
Today's quest as one clear next action, then a pace card (ahead, on track or behind, with a supportive line when behind), a trail meter, an XP and streak strip, a badge shelf, and a per subject checklist showing the current week only.
The lesson /app/lesson/[id]
The product. Materials, glossary, a bible verse, worksheet download, badge callout, then a stepped accordion body. Later steps are genuinely hidden, so a child cannot skip ahead, and position persists between visits.
Completion and celebration
A five face confidence scale, optional notes, then confetti, ten XP on first completion, a streak update and any badge earned. Answering with low confidence silently asks Sarah for a simpler explanation, and the modal tells the child it's coming.
Quest map /app/quest/[termPlanId]
A winding trail per subject with nodes alternating left and right, marked complete, next up or locked, a chapter banner per week, a boss project crest at the end, and a printable version when the asset exists.

Answers save themselves

Questions are detected from the lesson markdown in five different ways, so the field layout varies by lesson. Each answer saves 800 milliseconds after typing stops and immediately on blur, with a saving, saved or could not save status line. Worth knowing for the wireframes: a parent viewing a lesson gets read-only fields. Only a child mode session can write.

Ask Sarah

A fixed bubble, scoped to "about this lesson only", 300 characters per question and twenty questions per lesson per day. The question is stored, an external service answers it, and the page polls every three seconds for up to a minute showing a thinking bubble, then a graceful apology if nothing arrives.

One honesty problem

Locked nodes on the quest map are still ordinary links, and nothing on the server stops a child opening a later lesson directly. The only real sequencing lock in the product is the step accordion inside a lesson. Either enforce the lock or stop drawing padlocks.

Journey D. Parent oversight

The half of the product a parent pays for and a child never sees.

Dashboard /app

A greeting band that changes on this week's actual progress, a conditional onboarding nudge, a compliance-due card that appears within sixty days of a deadline, a single "today's quest" next action, per child progress with pace pills and week dots, then the child cards. It polls for attention signals every forty five seconds and shows a "needs a look" badge, where a signal means a flagged Sarah message or a lesson finished with low confidence in the last fortnight.

Work review /app/work/[id]

Read only, grouped by subject then week, newest first. A summary strip counts lessons done this week, average confidence this term, lessons worth revisiting and Sarah questions asked. Each lesson expands to show exactly what the child wrote and the full Sarah thread. Printable per lesson, per week or all at once.

Compliance documents /app/documents

DocumentWhat it produces
ChecklistThe state's registration checklist as printable tickboxes with sources
Education planQueensland and WA get a real state-specific plan. The other six states get a generic template with a "verify this yourself" warning banner
LogA blank 24 row table. Populated from nothing, while the database holds every completed lesson
PortfolioAuto-curated work samples by subject, pulled from finished lessons and saved answers

Journey E. Admin vetting

Deliberately minimal. The team's own words: anything else is a job for the database console.

The queue lists term plans filtered by status. Opening one shows every lesson with its eval flags as raw JSON, plus a table of generated assets. The reviewer has exactly one lever: a status dropdown and an update button. There is no per lesson approve, reject or edit, so a reviewer who dislikes one lesson out of forty must reject the whole term or let it through. The generation request list is a read-only monitor with no retry, and the household list has no edit controls at all.

Screen inventory

Thirty two routes across six surfaces.

Public 4

  • /
  • /start
  • /start/plan
  • /guide/[state]

Auth 6

  • /app/login
  • /app/signup
  • /app/verify-email
  • /app/reset-password
  • /app/reset-password/confirm
  • /app/logout

Onboarding 2

  • /app/onboarding (3 steps)
  • /app/settings/children/new (4 steps)

Parent 10

  • /app
  • /app/settings
  • /app/settings/children/[id]
  • /app/documents
  • /documents/[childId]/checklist
  • /education-plan
  • /log
  • /portfolio
  • /app/work/[id]
  • /app/digest-preview

Child 5

  • /app/switch/[id]
  • /app/child/[id]
  • /app/lesson/[id]
  • /app/quest/[termPlanId]
  • /app/exit-profile

Admin 5

  • /app/admin
  • /app/admin/households
  • /app/admin/generation-requests
  • /app/admin/term-plans
  • /app/admin/term-plans/[id]

Where one route is really five designs

Thirty two routes, but roughly sixty distinct things to draw.

ScreenStatesWhat to draw
/app/child/[id] 7 No plan, building, awaiting review, ready for review, failed, live, partially live
/app/lesson/[id] 9 Step one, mid lesson, final step with completion card, already complete, celebration, Sarah open, Sarah thinking, Sarah failed, empty lesson
/app 5 No children, children with no plan, building, in progress, all complete
/start/plan 10 Nine wizard steps plus the plan output
/app/quest/[id] 3 Early term, mid term, complete
/app/work/[id] 3 Empty, populated, flagged concerns

Gaps and openings

Ranked by how much they hurt a real person using this today.

The draft dead end

A parent whose term is stuck before vetting sees "awaiting review" with no action and no timeline, while the dashboard tells them to generate a plan they already have.

No notifications anywhere

Nothing reaches a parent when a term finishes building, when a plan needs approving, or when Sarah flags a message. The weekly digest toggle exists in settings and does nothing.

The compliance log prints blank

Twenty four empty rows, while the database already holds every completed lesson with its date and subject.

Six of eight states get a generic education plan

Only Queensland and WA are properly served. A content gap rather than a code one, but it decides what the screen is allowed to claim.

Locked is a lie

Quest map padlocks and checklist states are decorative. Nothing stops a child opening a later lesson directly.

No PIN lockout

Unlimited attempts at the child switch screen, with no delay and no counter.

No child-facing progress story

A child sees today's lesson and a quest map, but never a view of their own week or term.

Admin cannot retry a failed generation

The request list is a read-only monitor, so a failure has to be fixed from outside the product.

No per lesson vetting

The reviewer's only lever is a whole plan status flip.

No account deletion or data export

Settings offers no way out.

Suggested wireframe order

In the order a user meets them, with the two compounding screens pulled to the front.

  1. The child hub, all seven statesIt is the junction. Everything routes through it.
  2. The lesson, all nine statesIt is the actual product. Get this right and the rest follows.
  3. The dashboard, five statesThe parent's home base.
  4. Onboarding and add child, seven stepsThe funnel that decides whether anyone reaches a term at all.
  5. Quest map and the badge systemThe delight layer, and there is already staged art to work with.
  6. Work review and compliance documentsThe parent's reason to keep paying.
  7. Public side and the nine step wizardAlready the most finished part of the product.
  8. AdminFunctional is enough.