What it does
- Reads cards aloud and takes spoken answers, so you can study away from the keyboard. Citations and asides in round brackets are skipped by the voice and kept on screen — grading still asks for what is inside them, and a card that answers with a numbered or lettered list is read with a pause before each item rather than as one long sentence.
- Deck uploads, validated on arrival and filed per user.
- Configurable grading built for prose answers — stemmed keyword coverage, so word endings do not matter, weighted towards what a card is actually about by a multiple that scales with the length of the answer (or one you pick), with a self-grade prompt for anything borderline. Every score opens up into the words it was made of, so you can check it rather than take it.
- Adjustable reading speed, allows you to speed up / slow down the reading of the front and back of the cards
- Spaced repetition that picks up where Anki left off — a deck you have already studied arrives with its schedule intact, and every answer here moves it on.
- Six ways to choose cards — due for review, shuffled, in deck order, weakest first, unseen first, or only the ones you previously missed.
- Voice commands: say repeat, skip, i don't know, faster, slower or quit.
- Formulas are typeset, with KaTeX bundled locally so it works offline. The same formula is flattened to words (`CSR = Prior period CSR + premiums earned − claims incurred`) for grading and for reading aloud, so you are never graded on the word "align" and never hear a backslash.
- Take the deck away again — Download deck writes a real
.apkgwith your edits applied and your own cards in it. Untouched cards are copied across exactly as they arrived, and note ids are kept, so re-importing it into Anki updates the deck rather than duplicating it. - Edit any card, or write your own — search the deck by front, back or tag, rewrite what a card asks or answers, or add a card the deck never had. Nothing touches the uploaded deck file, a renamed card keeps the answers and the due date it has already earned, and a card you wrote can be deleted again.
- The card's tags shown as pills over the answer once you have answered — the same strings the Tags filter lists, so you can see why a card came up.
- History of every answer, with search, filtering, a last-7-or-30-days view, per-objective accuracy, and a Download CSV of the lot.
- A profile page with your totals, a per-deck breakdown you can prune, and your own grading thresholds.
- Google sign-in tied to your google account (so you don't have to create a new login)
Quiz types
Settings → Quiz type decides which cards you get and in what order. It applies after the objective, source and tag filters, so you can take the weakest cards from one objective, or revisit only what you missed from one reading. Your choice is remembered in the browser.
| Type | What you get |
|---|---|
| Due for review | Spaced repetition: the cards today asks for, most overdue first, then new cards in the order the deck introduces them. See below. |
| Shuffled | The whole selection in a random order. The default, and reshuffled on every visit. |
| In deck order | The order the file has them in. Starting the server with --in-order forces this and ignores the selector. |
| Weakest first | Your lowest average scores first. Cards you have never answered come after the ones you have, since an unanswered card is no evidence of weakness. |
| Unseen first | Cards you have never answered, then the least answered, shuffled within each group. |
| Previously missed | Only cards you have answered and averaged below your pass mark. |
Due for review and Previously missed narrow the selection as well as ordering it — the first drops cards not yet due, the second drops cards you have not missed. The other four always deal every card that got past the filters.
Weakest first, Unseen first and Previously missed read your history, so they need answered cards to work with: on a fresh account Weakest first behaves like a shuffle and Previously missed finds nothing. A card is counted per (learning objective, source), so the same question under two citations is two cards.
Spaced repetition
Cards you answer well come back later; cards you miss come back tomorrow. The arithmetic is similar to Anki's SM-2 — the same intervals, ease factors and lapse handling — which matters because it means a deck exported from Anki brings its schedule with it. If a card was on a 45-day interval there, it is on a 45-day interval here, and answering it well extends it rather than starting again.
Four fields in the deck carry that state, and this app reads all of them:
| Anki field | What it holds | How it is used |
|---|---|---|
due | When the card is next wanted | Seeds the first review date. For new cards it is a queue position, and sets the order new material is introduced in. |
ivl | The current interval, in days | The interval the next one is calculated from. |
factor | Ease, in permille (2500 = 2.5×) | How fast the interval grows, adjusted up or down as you answer. |
reps / lapses | Times answered, times forgotten | Carried forward, so your record continues rather than restarting at zero. |
Anki asks you to press Again / Hard / Good / Easy. Here you just answer the card, and the score is mapped to one of those four against your own pass mark — so grading yourself strictly gives you a tighter schedule. A miss is a lapse: the card drops to a one-day interval and its ease falls.
Your schedule is yours. It is seeded from the deck the first time you answer a card and kept in fact_schedule after that, because your answers here are evidence Anki never saw. The deck file is never written to, so re-uploading it cannot overwrite what you have earned, and two people studying the same deck keep separate schedules. Cards suspended in Anki stay out of the review queue.
Re-marking an answer re-works the schedule rather than advancing it twice: the state from before that answer is restored and the new score applied to it.
How a card goes
- It reads the question aloud. Adjust the pace any time, or say faster and slower.
- You answer out loud. No microphone, or somewhere quiet? Switch to typing in Settings — the grading is identical.
- Every point is marked. Answers that list several points are scored one by one, so three out of four earns three quarters, not zero.
- It is written down. Your history shows which learning objectives keep slipping.
How answers are graded
Flashcard backs are prose. Nobody recites them word for word, and a speech transcript mangles what little they do say. So grading here is deliberately lenient: it asks did you cover this, not did you repeat this.
Answers that list several points are marked one point at a time, so covering most of them scores most of the marks:
| You say | Points | Score |
|---|---|---|
statutory reserves; gaap reserves; tax reserves | 1.00 / 1.00 / 1.00 | 1.00 |
statutory and gaap reserves | 1.00 / 1.00 / 0.50 | 0.83 |
statutory, gaap, tax | 0.50 / 0.64 / 0.50 | 0.55 |
Browser compatibility
| Browser | Minimum | Fully styled | What sets the minimum |
|---|---|---|---|
| Chrome (desktop, Android) | 84 | 111 | flexbox gap |
| Edge (Chromium) | 84 | 111 | flexbox gap |
| Safari (macOS, iOS/iPadOS) | 15.4 | 16.2 | <dialog>.showModal() |
| Firefox (desktop, Android) | 98 | 113 | <dialog>.showModal() |
| Samsung Internet | 14 | 22 | flexbox gap |
Opera, the other common Chromium browser, tracks Chrome: 70 minimum, 97 fully styled.
Minimum means every feature works, including the confirmation dialog and voice answers. Fully styled means nothing is visually degraded either; the gap between the two columns is cosmetic only, and listed under What degrades.
Not supported: Internet Explorer, and legacy Edge (EdgeHTML, ≤ 18). Both lack flexbox gap and nullish coalescing, and neither is worth a shim for a study tool you run on your own machine.