One answer log, three readers

How Braineos started keeping every answer, why we chose a log over running counters, and how one read side feeds the progress page, CertBrain's readiness panel and the Claude connector.

Photo by ron dyar on Unsplash

Learners kept a streak and a weekly score in Braineos, but the app couldn’t answer the question a learner most wants answered: what do I keep getting wrong?

What we didn’t have

Each card’s review record held only its current box in the spaced-repetition schedule and when it was next due. That says where a card is now, not how you got there. A quiz attempt stored how many answers were right, but not how many questions there were, so a score of 8 could have been 8 of 10 or 8 of 50.

A log, not counters

There were two ways to fix it. Running counters on each card (right, wrong, last answered) are small and cheap. A log, one row per answer, grows faster but keeps the order of answers, which is what “accuracy over time” needs. We chose the log, a CardAnswer row for every accepted answer from the website, the mobile app and the connector, and added the number of questions to each quiz attempt.

The cost was measured, not guessed: writing the answers in one batch adds one database round trip to a study session, about 65 ms at the median for a 20-answer session on our development database.

One read side

The log is read in one place. A single procedure turns it into accuracy by week, the cards you miss most, sessions and active days. Everything that shows progress calls it:

  • the progress page on Braineos, and the same page on Finance Brain;
  • the “Accuracy over time” panel on CertBrain’s readiness page;
  • the connector’s get_progress tool, which lets a learner ask Claude how their studying is going.

Because they share one procedure, the numbers match everywhere, and the connector goes through the same visibility and premium checks as the website, so it can never show a deck you can’t open.

What we left out

We don’t track how long a study session lasts, so nothing shows time spent. We’d rather show nothing than an estimate. History starts from when the log went live, so a new account sees “Not enough answers yet to show a trend” until it has a few sessions behind it.

Where to see it

The learner-facing story is on the Braineos blog: Ask your assistant how your studying is going.

Planning an app?

We build learning products like this for clients too: courses, flashcards, quizzes and exam prep, on the web and mobile.

Education apps: what we do →

Start a project