Learners on Braineos could study every day and still have no idea whether it was working. Last week CertBrain got a Readiness page that answers “am I ready for the exam?”. Braineos isn’t about one exam, so it needed a different question: where do I stand across everything I’ve studied? We built that as a Progress page and three totals on each public profile. Three rules shaped it.
Rule 1: no new data
We didn’t add a table, a column or an event. Everything comes from two things Braineos already stores:
- A review row per card a learner has studied, holding its Leitner box (intervals of 0, 1, 3, 7, 14 and 30 days) and when it’s next due.
- An attempt row per study session, with a timestamp.
From those:
- Mastery reuses the exact card credit from CertBrain’s Readiness: 0 for unstudied or last-answered-wrong, 0.5 for right recently, 1 once a card has moved up to weekly reviews. Multiple-choice questions count double. Extracting the credit function rather than copying it means the two sites can’t quietly drift apart.
- Card states for each deck are bands of the same box: new, learning, known, and mastered once a card reaches the 30-day interval.
- What’s due is three counts over the due dates: now, next 24 hours, next 7 days.
- Days studied is the number of distinct UTC days with a session. The 12-week activity grid uses the same rule, drawn as a plain CSS grid, with no chart library.
No schema change meant no migration, and no backfill: every learner’s history showed up on day one.
Rule 2: only measured numbers
The page never estimates. There’s no “you’ll master this deck by Friday” and no projected streak. Every figure is a count of something that happened, or a score from a published formula the page explains under “How this is calculated”.
That has a cost. Projections are motivating, and they’re the first thing people ask for. But a projection from a spaced-repetition schedule depends on answers the learner hasn’t given yet, and a wrong one teaches people not to trust the rest of the page.
Rule 3: say nothing until there’s something to say
A mastery score from three studied cards is noise, and a 0% on day one is discouraging. Below 10 studied cards, the same threshold Readiness uses, the page shows the plain totals but replaces the mastery score with a prompt to study a deck. The score appears once it means something.
Public, but only totals
Each public profile now shows cards studied, cards mastered and days studied. They use the same definitions as the Progress page, so the numbers match what the learner sees privately. The profile shows aggregates only: no deck list, no per-deck scores. Seeing that someone studies regularly is encouraging; seeing exactly which decks they struggle with isn’t something they agreed to share.
One codebase, two questions
Progress is behind a site flag: on for Braineos and Finance Brain, off for CertBrain, which keeps Readiness. The scoring underneath is shared. The difference is the question each page answers: “where do I stand?” for a general learning app, and “am I ready to book?” for an exam-prep one.
What’s next
What these pages can’t show yet is how someone is doing over time: accuracy trends, most-missed cards. That needs a log of individual answers, which Braineos doesn’t keep today. When it does, it’ll follow the same three rules.
