Work in progress, round 7 of the council loop. Scores, captures and code are still changing; this page is redeployed at the same address as rounds land.

Prototype · ONC2-8580 · staging data and staging QA accounts only · not shipped · api 7928fbbe, app beabfe143

The tutor invites you in, on Home

When a learner opens Home, their course's tutor (Rezzy for the medical courses, Savvy for CFA and CPA, Casey for LSAT and the Bar) opens with one short message about what the learner did last, and one or two things it can do about it right now: a quiz on the exact questions they missed, their due cards, the lesson they should read next, or a question they can answer with a tap. Each tap lands where it says: a quiz already built, a screen, or a chat that starts from the card.

Code decides what is possible and true; one model call decides what is worth saying today and says it in the tutor's voice; code checks the result before the learner sees it.

How it works, end to end

SnapshotSQL, one course Offersreal ids, one count Composeone model call Validateretry once, fallback Cachelearner, course, scope Card on Homecatalog components Actresolves the tap Quiz on exact questions Lesson, cards, game Chat seeded with the card
  1. Snapshot. SQL reads only the active course (and its selected exams): recent sets and their misses, lessons read, due and forgotten cards, readiness trends, exam date, rhythm, onboarding and the tutor's memory notes.
  2. Offers. Code turns the snapshot into things the app can run today, each with real ids and one count used by its label, its facts and its target.
  3. Compose. One structured call (Gemini 3.5 Flash Lite) picks one or two offers and writes the message, buttons, chips and at most one block.
  4. Validate. Every id is an offer; every number belongs to an offer the card uses; no other course's exam or tutor; the rules the model breaks most. A failure retries once with fixes, then falls back to a card built from the rules.
  5. Cache. Stored per learner, course and exam scope with a fingerprint of the data; an unchanged learner gets the stored card in ~0.1 s.
  6. Act. A tap goes to the server, which resolves the offer on the stored card (a quiz template from the exact question ids, a route, or a chat whose first bubble is the stored message and whose first turn follows the offer's plan).

Component catalog

The model picks components by reference; the app draws them from design-system parts. It can't put a number or an id in one.

ComponentWhat it shows
question_setThe set an offer is about: topics, "4 missed of 10", source, when. From the offer's facts, never model text.
flashcard_peekHow many cards, the topic, and the front of the shortest card (a cloze is blanked).
lesson_peekThe lesson's title, subject and minutes.
subject_barsReadiness bars for the subjects the message names, with their trend.
ButtonsOne or two actions, the first primary. Each is an offer id.
ChipsReplies: a check-in's answers, or "Something else" to answer in their own words.

Action registry

Offer kindOpensResolved as
quiz_setA quiz on the exact questions they misseda test template made at tap time, one per card and offer
quiz_topicNew questions on a subject or topics (PYQs where the course has them; five easier ones as a small win)picked at tap time
flashcards_dueReview of their due cards in this courseroute
flashcards_idsReview of exact cards (forgotten 3+ times, never reviewed)route
lessonA lesson by idroute
gameA game on a subject where the course has itroute
open_chatThe walkthrough chat they left, at the question they reached ("Pick up at Q3")route to that chat
chatThe tutor's chat, seeded: explain misses, cards from misses or a lesson, review cards, mini lesson, summary, plan the exam, check-inschat with a server-side plan

Latency and cost

Eval v5 at api 7928fbbe: 36 synthetic learners across the nine courses (the situations each course meets: misses, a lesson read, due cards, an exam passed, a walkthrough left part way, a new learner), one Gemini 3.5 Flash Lite compose each through the api's provider setup, one retry with the validator's errors, then the rules' card. A second model (Gemini 3.6 Flash) judges each valid card.

ModelRunsValid first tryValid after retryFallbacksFirst call p50 / p95 / maxWhole compose p50 / p95 / maxMean cost
gemini-3.5-flash-lite36273511453 / 2003 / 2098 ms1608 / 3323 / 4177 ms$0.00122
ModelJudgedPass all four (person, times, claims, fit)Mean voice (1-5)
gemini-3.5-flash-lite35344.4

On staging, a cold open composes inline in 1.5-5 s; a stored card returns in about 0.1-0.2 s. At one fresh card per active learner per day, 10,000 learners cost about $12 a day.

Gallery: tutors, courses and states

Indian Medical PG (NEET-PG) Rezzy

Learner state: a PYQ set yesterday, 9 misses across two subjects

You had 9 misses in yesterday's PYQ set, 7 of them in Internal Medicine. Want to walk through them?

Walk me throughTry the 9 again
Something else

block: question_set · source: composed

Indian Medical PG (NEET-PG), Home, on Web
Web: Home
Indian Medical PG (NEET-PG), after the first tap, on Web
Web: after the first tap
Indian Medical PG (NEET-PG), Home again after the tap, on Web
Web: Home again after the tap
Indian Medical PG (NEET-PG), walkthrough after one answer, on Web
Web: walkthrough after one answer
Indian Medical PG (NEET-PG), Home after that answer, on Web
Web: Home after that answer
Indian Medical PG (NEET-PG), Home, on iPhone
iPhone: Home
Indian Medical PG (NEET-PG), after the first tap, on iPhone
iPhone: after the first tap
Indian Medical PG (NEET-PG), Home again after the tap, on iPhone
iPhone: Home again after the tap

US Medical PG (USMLE) Rezzy

Learner state: read a lesson today, no questions on it since

You have 40 unreviewed flashcards in Antimicrobials waiting for you. Want to review them now?

Review all 40
Something else

block: none · source: composed

US Medical PG (USMLE), Home, on Web
Web: Home
US Medical PG (USMLE), after the first tap, on Web
Web: after the first tap
US Medical PG (USMLE), Home again after the tap, on Web
Web: Home again after the tap
US Medical PG (USMLE), Home, on iPhone
iPhone: Home
US Medical PG (USMLE), after the first tap, on iPhone
iPhone: after the first tap

UK Medical PG (UKMLA) Rezzy

Learner state: exam month set months ago, back after a break

Still aiming for December?

Try 10 questions
Same planNew exam date

block: question_set · source: composed

UK Medical PG (UKMLA), Home, on Web
Web: Home
UK Medical PG (UKMLA), after the first tap, on Web
Web: after the first tap
UK Medical PG (UKMLA), Home again after the tap, on Web
Web: Home again after the tap
UK Medical PG (UKMLA), Home, on iPhone
iPhone: Home
UK Medical PG (UKMLA), after the first tap, on iPhone
iPhone: after the first tap
UK Medical PG (UKMLA), Home again after the tap, on iPhone
iPhone: Home again after the tap

NCLEX-RN Rezzy

Learner state: a quiz four days ago, 3 misses; prefers flashcards

You missed 2 in Medication Administration Fundamentals and 1 in Mobility, Body Mechanics & Positioning 4 days ago. Want to walk through them?

Walk me throughTry the 3 again
Something else

block: question_set · source: composed

NCLEX-RN, Home, on Web
Web: Home
NCLEX-RN, after the first tap, on Web
Web: after the first tap
NCLEX-RN, Home again after the tap, on Web
Web: Home again after the tap
NCLEX-RN, Home, on iPhone
iPhone: Home
NCLEX-RN, after the first tap, on iPhone
iPhone: after the first tap
NCLEX-RN, Home again after the tap, on iPhone
iPhone: Home again after the tap

MCAT Rezzy

Learner state: exam date has just passed

Your MCAT test date was 5 days ago. How did it go?

Went wellNot sureNot greatDidn't take it

block: none · source: composed

MCAT, Home, on Web
Web: Home
MCAT, after the first tap, on Web
Web: after the first tap
MCAT, Home again after the tap, on Web
Web: Home again after the tap
MCAT, Home, on iPhone
iPhone: Home
MCAT, after the first tap, on iPhone
iPhone: after the first tap
MCAT, Home again after the tap, on iPhone
iPhone: Home again after the tap

CFA Savvy

Learner state: a quiz three days ago, misses in Fixed Income

Fixed Income is where it slipped, with misses spread over 5 topics when you did the quiz 3 days ago. Let's work through them.

Walk me throughTry the 5 again
Something else

block: question_set · source: composed

CFA, Home, on Web
Web: Home
CFA, after the first tap, on Web
Web: after the first tap
CFA, Home again after the tap, on Web
Web: Home again after the tap
CFA, Home, on iPhone
iPhone: Home
CFA, after the first tap, on iPhone
iPhone: after the first tap
CFA, Home again after the tap, on iPhone
iPhone: Home again after the tap

CPA Savvy

Learner state: a weak set yesterday, 7 misses

Of your 7 misses in Assessing Risk and Developing a Planned Response yesterday, 2 were in Materiality. Let's walk through them or try them again.

Walk me throughTry the 7 again
Something else

block: question_set · source: composed

CPA, Home, on Web
Web: Home
CPA, after the first tap, on Web
Web: after the first tap
CPA, Home again after the tap, on Web
Web: Home again after the tap
CPA, Home, on iPhone
iPhone: Home
CPA, after the first tap, on iPhone
iPhone: after the first tap
CPA, Home again after the tap, on iPhone
iPhone: Home again after the tap

LSAT Casey

Learner state: new, told the tutor about a worry (pacing)

You mentioned running out of time on timed sections, so let's go at your own pace with Strengthening, weakening, and explaining: reasoning before speed. Start there, or talk it through first?

Try 5 to start
Talk it throughPlan my week

block: question_set · source: composed

LSAT, Home, on Web
Web: Home
LSAT, after the first tap, on Web
Web: after the first tap
LSAT, Home again after the tap, on Web
Web: Home again after the tap
LSAT, Home, on iPhone
iPhone: Home
LSAT, after the first tap, on iPhone
iPhone: after the first tap
LSAT, Home again after the tap, on iPhone
iPhone: Home again after the tap

Bar Exam Casey

Learner state: retaker, misses in Contracts two days ago

You missed 4 in Contracts 2 days ago across formation, content, defenses, and performance. Let's walk through them.

Walk me throughTry the 4 again
Something else

block: question_set · source: composed

Bar Exam, Home, on Web
Web: Home
Bar Exam, after the first tap, on Web
Web: after the first tap
Bar Exam, Home again after the tap, on Web
Web: Home again after the tap
Bar Exam, walkthrough after one answer, on Web
Web: walkthrough after one answer
Bar Exam, Home after that answer, on Web
Web: Home after that answer
Bar Exam, Home, on iPhone
iPhone: Home
Bar Exam, after the first tap, on iPhone
iPhone: after the first tap
Bar Exam, Home again after the tap, on iPhone
iPhone: Home again after the tap

Tap-throughs

No recordings yet.

Recordings come with the final version of this page.

Real and mocked

Real: snapshot from staging data, offers with real ids, the model call through the api's provider setup, validation, fallback, caching, the act endpoint (test templates, flashcard ids, routes), the seeded chat with server-side turn instructions, analytics events. Seeded: the staging QA learners' history (wrong answers, lessons read, due cards, exam dates, memories) written by a staging-only script; flashcards are the course's own cards or built from the course's own plain MCQs, never another learner's. Not built: the Trigger.dev precompute (designed, not deployed), a persisted events table (Redis + PostHog only), games filtered by topic (games open on a subject where they can).

Known, outside this prototype

Open questions

Council score history

Two councils (Claude Opus 5.5 and GPT-6.1-Sol), each with learner reviewers for a Rezzy, a Savvy and a Casey course and an engineering reviewer, fresh every round. The bar is 9/10 on both axes from both councils. Round 7 is in progress.

RoundOpus learnerOpus engineerSol learnerSol engineerTop finding
16665Numbers on cards weren't all grounded in the data, and a late model could show a different fallback on every open.
26776A tap didn't always open what the button promised (quiz fills short of the count, due-card counts that drifted).
36777A quiz "on a lesson" opened loosely tagged questions; counts on buttons weren't exact against the bank.
47 (7/7/8)78 (8/8/9)6A tap on a card replaced while it was on screen could fail; quiz resizing rewrote unrelated facts.
57 (7/7/7)78 (8/8.5/8)7Check-in chips and timing ("results out yet?" five days after the MCAT); flashcard learners offered the wrong step.
67 (7/7/7)78 (8/8/8)7Opening a walkthrough marked the whole set done, so Home moved on before the learner finished.