pdf-quiz-generator/backend/app/models
Daniel 04abd78380 feat: cards remember, render as prose, and are reachable from a question
Three things the card system did not have.

**Spaced repetition.** There was none. "Known" and "to review" were React state
that vanished on reload, so a deck of two hundred was two hundred cards every
time and the only spacing was whichever cards a learner remembered to skip.
Verdicts are now kept, and the deck comes back in the order the learner's own
history calls for: due first, most decayed first, then never seen, then the
rest — because somebody who has met the whole deck recently should still get a
deck rather than a screen saying come back on Thursday.

It borrows the question player's arithmetic rather than choosing its own.
`recall_probability`, `DUE_RECALL`, the thirty-day half-life: two schedulers
with two ideas of "due", in one product that shows a learner one readiness
number, is how the number stops meaning anything. Two outcomes and no
four-point scale — a scale asks a learner to rate their own recall in units
they have never calibrated, and the extra resolution is noise.

**Cards are prose.** Both faces go through the same renderer as everything
else, so a card can carry `[[264|respiratory failure]]`, a `==key point==`, a
teaching tip or a figure. That is most of what "link cards to things" turns out
to mean.

**A deck is reachable from the question.** Beside the topic-reading chip under
the correct answer, one chip per linked deck. Read from the question's end
only, deliberately: a card that listed the questions it belongs to would hand a
learner revising the deck the shape of the exam, and the answer with it.

Migration m3d4e5f6a7b8.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN
2026-09-12 21:50:31 +02:00
..
__init__.py feat: cards remember, render as prose, and are reachable from a question 2026-09-12 21:50:31 +02:00
ai_model_config.py Tag filtering, multi-category, bug fixes, image validation, docs 2026-04-04 22:48:26 +02:00
article.py feat: an article follows a topic, rather than copying it once 2026-09-12 19:57:06 +02:00
attempt.py feat: right after a tip is its own slice 2026-09-12 01:51:03 +02:00
category_grant.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
collection.py feat: articles are collectible, and Summary is a toggle 2026-09-12 14:52:20 +02:00
conversation.py feat: AI Mode — a chat that cannot cite what it did not find 2026-09-10 15:19:24 +02:00
course.py Add LMS, user quiz creation, manual questions, course system 2026-04-05 02:07:04 +02:00
draft_question.py feat: extracted questions are staged, and only acceptance takes an id 2026-09-11 22:57:08 +02:00
email_verification.py Major platform update: pgvector search, multi-provider TTS, settings page, CLI 2026-03-31 18:03:10 +02:00
embeddable.py feat: hybrid search for articles and cards; full-page question editor 2026-09-10 02:01:35 +02:00
exam.py feat: exams are a group you can build, with the board's own blueprint 2026-09-11 20:27:48 +02:00
favorite.py Add switchable embedding model, Polly toggle, job cancellation, and UI fixes 2026-04-03 20:44:11 +02:00
feedback.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
flashcard.py feat: cards remember, render as prose, and are reachable from a question 2026-09-12 21:50:31 +02:00
folder.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
invite.py feat: the player is a box; sharing and sign-up are the administrator's 2026-09-11 19:17:35 +02:00
lab_reference.py feat: Orthobullets-style lab panel with source deep links and card links 2026-09-08 16:20:55 +02:00
login_code.py feat: sign in with a code sent by email 2026-09-12 17:29:28 +02:00
media.py feat: figures are thumbnails that open into a viewer, with source and overlay 2026-09-12 20:33:00 +02:00
password_reset.py Major platform update: pgvector search, multi-provider TTS, settings page, CLI 2026-03-31 18:03:10 +02:00
pdf_document.py Major platform update: pgvector search, multi-provider TTS, settings page, CLI 2026-03-31 18:03:10 +02:00
question.py refactor: remove per-question sharing 2026-09-12 08:42:51 +02:00
question_category.py feat: an organ system is a fact about a topic, not about a keyword 2026-09-12 04:32:25 +02:00
question_media.py feat: figures as records, question-centred dashboard, fewer hints mid-quiz 2026-09-11 03:18:49 +02:00
quiz.py feat: a repetition does not raise your score; no more deleting a session 2026-09-12 01:08:42 +02:00
quiz_category.py Major: categories, question bank, security fixes, mobile layout, UX improvements 2026-03-31 20:08:05 +02:00
quiz_question_link.py Junction table for shared questions; verification blocking; semantic bank search; bug fixes 2026-04-01 00:55:13 +02:00
section.py CRITICAL: Remove cascade delete from Section→Quiz relationship 2026-04-01 18:26:22 +02:00
study_plan.py feat: study plans you can open, work through, and edit 2026-09-10 12:10:39 +02:00
user.py feat: an account may have no password, and may set one later 2026-09-12 17:39:29 +02:00
user_note.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00