at.Applied Theology DOCUMENTATION Back to site
Project notes

Cramfast product spec

Status: implemented and deployed (version 4, 16 October 2026; study modes, courses with exams, studying together, typed uploads, starting from a name, research papers and example comparisons added 17 October 2026; critical user journeys, goals, Home, teaching, help on demand, explainers and past exams as tests, section 2, 18 October 2026; bringing your own material, building with review, forking and publishing guides, and the rest of the instructor's flow, sections 2.8 and 2.10-2.13, all built 19 October 2026; every journey has a live check and a demo, section 2). This document describes what the product does, the journeys and screens, every data type behind them and how each one is drawn. The pipeline that produces the data (stages, models, checks, costs) is in PIPELINE_DESIGN.md. The fuller design that v4 is built towards, with phone and desktop wireframes and the open questions, is the UI spec and user journey; section 10 lists what of it is not built yet.

1. Goal and principles

A student with an exam in days uploads their course material and wants to know what to study, in what order, to score as well as possible in the time they have.

  • Exam first. Every concept carries a predicted share of the exam. The roughly 20% of concepts that carry most of the marks (the core) are taught first; supporting and detail concepts are further levels.
  • Two ways to study, one set of content. Follow along goes through each lecture as it was given (an overview of the whole deck first, then every slide explained); Learn re-teaches the course as a short curriculum of modules at the depth the student chooses. Both sit on the concept graph and share one question bank.
  • Learning and testing are always separate. Reading never contains questions. Every lecture and module has its own Test yourself; questions use whichever verifiable format tests the skill best (choose one, select all, numeric, short answer, order, match, explain), all graded by code.
  • Learn in cards, look up in pages. Anything with an answer, a reveal or forward motion is a card in a session. Anything a student scans, searches or returns to (map, concept page, notes, progress) is a page. Both draw the same typed content.
  • Grounded and attributed. Lessons are built on the course's own facts and cite them; every fact cites the slide blocks it comes from. Accurate general knowledge of the subject may be added where it helps (a definition the slides assume, a standard example), and is shown as "General knowledge" instead of a page chip, so the student always knows where a statement comes from.
  • The model fills typed slots; the UI owns the layout. Content arrives as typed forms with word limits that fit a phone card. A part that does not fit is dropped, never squeezed. Inside text fields the model writes Markdown and LaTeX maths, which Cramfast draws itself; it never writes markup, layout or styling.
  • One schema for every subject. Concept kinds, fact roles and block types describe structure (a process, a rule, a comparison), not subject matter.
  • Calm and honest. No points or badges. "Secure" means predicted recall of 90% or better now, so it decays without practice.

2. Critical user journeys

Everyone who opens Cramfast wants one of a small number of things. A journey is supported when someone can finish it from the home screen without knowing the app's words for its parts (module, bundle, tier). This section lists them; sections 3 and 4 describe the parts they use. Status: Built, Partial (what is missing is named) or Missing.

2.1 Goals

A person says what they want when they start a course, in a few taps, and can change it later. A course can have several goals at once for the same person (learn it over the term and pass the midterm), and a single session can have its own goal ("just lecture 3", "the midterm", "what's due"). Goals belong to a person in a course: the owner's, and each member's or visitor's (a share link offers the owner's goals as defaults).

Goal Concepts ranked by Follow-up questions (each skippable) The home screen plans
Prepare for an exam Predicted share of the exam Which exam; date; what it covers (all, some lectures); format; do you have a past exam? Days to the exam: learn the core, then test, then the weakest; the last day is Cram
Learn it over time Foundations first (how much of the course builds on a concept), then the course's order Why (work, a course, curiosity); what you know already (new to it · some · reviewing); time a week; finish by (optional) This week: new modules for the time set, plus due reviews
Keep up with a course The course's order, newest lecture first Lectures so far; how often new ones come The newest lecture (Follow along, then its test), then reviews of older ones
Teach it The educator's emphasis (the model's ranking until they change it) Who the students are and their level; when they need it; how it is used (before class · review after · assessed) The author's home: what to check, preview as a student, share, People, tests sent
Understand one thing One concept and what it needs What you want to understand; how deep (the gist · properly · in depth) One explainer with a few questions; Keep learning this turns it into a course

When goals are combined, the plan blends them: an exam's weight grows as its date nears (it leads from 14 days out, and is all there is in the last 2 days); otherwise the other goal's ranking leads.

2.2 Starting with nothing but a question

# They say What happens Status Demo (live check, 2026-10-19)
A1 "Explain recursion to me" Type a topic or question; within a minute a short explainer (the idea, a worked example, common mistakes, from general knowledge and labelled so) and 3-5 questions. Keep learning this makes it a course (A2) Built (quick.py): the landing page's No material? Just ask; gist · properly · in depth Owner: /cramfast/ (owner) → No material? Just ask. “Explain dynamic programming” → an explainer “Dynamic programming” with 3 sections all labelled general knowledge and 4 graded questions; Keep learning this offered
A2 "I want to learn Bayesian statistics over the next month" Topic → goal Learn it over time with its follow-ups → sources found and topics outlined (3.1) → guide → weekly plan Built: from the name, then goals with follow-ups on Home and a weekly plan Open. Goal Learn it over time, 3 h a week → “THIS WEEK · 0 MIN OF 3 H”, “0 of 14 modules done · At 3 h a week you'd finish around Mon, Oct 26.”
A3 "I'm taking 14.01 at MIT" Start from the course's name (3.1): sources found, chosen, built; asked their goal Built: goals asked on Home once the guide exists Open. Started from “Principles of Microeconomics (MIT 14.01)”: open MIT material found and built into 14 modules; Home asks the goal
A4 "Recent papers by Ada Lovelace" arXiv search, papers listed and built (3.1) Built Open. “Recent papers by Shikib Mehri” → 14 papers from arXiv, each followable page by page; 29 modules across them
A5 "Here's my course's website" Paste a link; the page is followed to the files it links (lecture notes, problem sets, past exams), shown for review like A3 Built: The course's website on the start form is followed first Owner: /cramfast/ (owner) → No files yet? Start from the course's name → The course's website. a pasted course page leads the search and is followed to the files it links (tested: test_quick.py::test_a_pasted_course_website_is_followed_first test_start.py::test_a_course_site_is_followed_to_its_files)

2.3 Starting with material

# They say What happens Status Demo (live check, 2026-10-19)
B1 "Here are my lecture slides" Upload; the guide builds by itself; asked their goal while it builds Built: goals asked on Home Open. One uploaded lecture built by itself into Learn (2 modules) and Follow along; Home opens on “What do you want from this course?”
B2 "Slides, the textbook, two past exams and my notes" Each file typed (3.1); the map asks for what would help most Built Open. Lectures, a problem set, a past quiz and marked work, each typed: “Predicted from 0 stated objectives and 1 past exam and 1 problem set · problems (calculations, proofs, code) (inferred) · expected depth: ap”
B3 "I have class tomorrow, here's the deck" One file → Follow along, slide by slide Built Open. One deck → Follow along: overview, then slide 1 of 6 beside its notes
B4 "Give me more questions on this" More questions on a module, lecture, concept or my weak spots: new questions on the same facts, in the formats that suit them, added to the bank Built: in each module's Test yourself, focused on what the student got wrong (ondemand.py) Open. More questions on this module in Test yourself; earlier extra questions added to module 1's bank and graded like the rest
B5 "I don't get this part" Explain it differently on any module section, slide note or concept: simpler, another example, or more depth, answered in place from the course's facts (general knowledge labelled) Built: Still unclear? under every module section and slide note Owner: /cramfast/?set=faec51609b1546b8ae061d24698ebef5&view=learn (owner) → a module → Still unclear?. Still unclear? Explain it differently or ask under each of the module's 1 sections
B6 "Why does X cause Y?" Ask about the course: an answer from the course's facts with page citations, general knowledge labelled, and the concepts it touches linked Built: Ask about this course on Home, and about any section or slide Owner: /cramfast/ (owner) → Home → Ask about this course. Ask about this course on Home (not asked in this run: --spend)
B7 "This doesn't cover the background I'm missing" The map names gaps (missing lectures, assumed background); Fill this in writes labelled notes for a topic the material does not cover Built: Add a topic your material doesn't cover in Update this guide (owner) Open. A topic no material covered is taught from notes Cramfast wrote, each part labelled General knowledge
B8 "Here's lecture 7" Add files later; only what they touch is rewritten (3.2) Built Open. Lectures added over a term (5 now, the last two added later); only touched modules rewritten (2 marked Updated)
B9 "Make the hash tables module use an example" Change the guide in words (owner, 3.2) Built Open. “Make the hash tables module use an example” → the module now has a worked example (edition 6, $0.04)

2.4 Exams

# They say What happens Status Demo (live check, 2026-10-19)
C1 "What's going to be on my exam?" The map's headline and the concepts ranked by predicted share, with why Built Open. “18 core concepts are predicted to carry 40% of the exam”, then every concept ranked by predicted share with why
C2 "The midterm is lectures 1-4 on 2 November" Asked as the exam goal's follow-ups; scopes Test, Cram and Progress Built: the exam goal's follow-ups (an owner's become a course exam) Open. Exams named with their lectures and dates; Test, Cram and Progress follow the one picked (“Midterm · Nov 2 · 3 lectures”)
C3 "Here's last year's exam" Typed upload re-ranks what is core (3.2) Built Open. A past quiz uploaded as Past or practice exam re-ranked what is core: “Predicted from 0 stated objectives and 1 past exam and 1 problem set · problems (calculations, proofs, code) (inferred) ”
C4 "Let me sit last year's exam" The past exam's own questions as a timed test, graded where they can be, with model answers; exam paperwork (name, honour code, cover page) is left out (course_plan.administrative, also applied to every question Cramfast writes) Built (pastexam.py): Sit a past exam in Test, once the owner prepares it Open. Sit a past exam: quiz 1 as a 120-minute timed test of 17 questions with model answers; cover-page items left out
C5 "Plan my week until the exam" Day by day to the date: each day's concepts and minutes, what is done, what moved Built: Home's exam plan and The days until… Open. Goal Prepare for an exam → “TODAY · MIDTERM IN 14 DAYS” with today's tasks and 9 days planned to the date
C6 "Test me like the real thing" Practice exam, timed, weighted like the exam Built Open. Practice exam: “Start a 15-minute exam”, weighted like the exam, results only when handed in
C7 "My exam is in 3 hours" Cram Built Open. Cram: “9 concepts in 30 minutes, about 32% of the predicted exam”, a countdown of learn and check cards
C8 "Am I ready?" Readiness: share of the exam secure, weakest first Built Open. After a short quiz: “0 of 79 concepts secure · 4 started · 0 sessions. Secure means at least two answers, 80% right, and the latest”, weakest first
C9 "Here's my marked midterm" Compared concept by concept with the report Built Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=progress (owner) → Your marked homework and tests. Marked practice set A read question by question and compared concept by concept with the report (comparison collapsed)
C10 "I have a midterm and a final" Several exams; pick the one being studied for Built Open. Two exams to pick between: Midterm · Nov 2 · 3 lectures, Final

2.5 Learning over time

# They say What happens Status Demo (live check, 2026-10-19)
D1 "I have 3 hours a week" A weekly plan: new modules for the time set, due reviews, what is left Built: Home's week (time done of time set, pace to the finish date) Open. 3 h a week → 0 of 9 modules done · At 3 h a week you'd finish around Mon, Oct 26.
D2 "New lecture every Tuesday" The home leads with the newest lecture (Follow along, its test), then reviews Built: Home's Keep up plan Open. Goal Keep up → the home leads with “Follow along: Lecture 5: Linear Sorting”, then its test and catching up
D3 "I'll listen on my walk" Listen to a module or lecture Built Open. Listen on a module: 3 parts read aloud (intro, sections, mistakes, summary), then Test yourself
D4 "Where was I?" Last time and what is next, on every start screen Built Open. After a quiz, Home opens with “LAST TIME · TODAY A short quiz on Everything: 3 of 5 right. Still shaky, so we start there: Array Cram these Test me ”
D5 "On my phone now" The same progress on another device Built (Device.tsx, api.py /device-links): a one-time link (an hour) makes another browser the same member, or opens the owner's courses there; joining carries what was answered before Open. Answered on a laptop, joined, Continue on another device → the link opened on a phone as the same member, with the answers: “0 of 79 concepts secure · 1 started · 0 sessions. Secure means at least two answers, 80% right, and the latest”; then left

2.6 Teaching

# They say What happens Status Demo (live check, 2026-10-19)
E1 "I'm making a guide for my class" Goal Teach it; the author's home lists what to check: the core concepts and their order, then modules Built: Home's author checklist Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=home (owner). Goal Teach it → the author's checklist: “Check what's core: 18 concepts, 51% of the predicted exam”, then modules, preview, share
E2 "Hash tables matter more than that; drop this topic" Make core, Leave out and reorder on the map take effect: the ranking, Learn's depths, Test and Cram follow Built (emphasis.py): Teach it as on each concept page; reorder is part of the instructor's flow (2.8, G2) Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=map (owner) → a concept → Teach it as. “In-place sort” made core: tier detail → core at once; Study's depths and Test follow (plan tier core); then put back
E3 "Let me see what my students see" Preview as a student opens the share link's view inside the author's Built: Preview it as a student on the author's home Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=home (owner) → Preview it as a student. Preview it as a student opens the share link's view
E4 "Share it; who's keeping up?" Share link, People, sent tests Built Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=people (owner). People: 5 members with exam secure, answers right, weakest concept, last active; tests sent and who took them
E5 "Here's this week's lecture" Update during the term (B8) Built Open. Lectures added over a term (5 now, the last two added later); only touched modules rewritten (2 marked Updated)

2.7 Studying with others

# They say What happens Status Demo (live check, 2026-10-19)
F1 "Let's study this together" Join by name, the group's progress and what it finds hardest Built Open. Joined by name (“Checker 3275”, no account), saw the group's progress and hardest concepts, then left (membership and answers deleted)
F2 "Quiz my friends" Any member can send a test from the bank Built: members send tests and see who took them Open. A sent test opens on the share link; after joining by name: 5 questions, 8 minutes, results at the end

2.8 Shaping a guide as its instructor

An instructor or tutor making a guide for their students needs more than the student-side tools (2.6): control over what students see and when, the guide's structure, how it is written, and the questions. The person who makes the guide owns it (below). Today those tools exist as scattered single actions (Teach it as, Suggest a change, Fill a gap, preview). This journey gathers them, and adds the missing ones, into one process the instructor walks through once after the first build and returns to during the term.

Principles. Every step is optional and starts from a good default, so a guide is usable without doing any of it. Students see only what the instructor has published. Anything that rewrites text shows its price before it runs. An instructor's own edits are never overwritten by a later update or rewrite.

The flow (Shape this guide, from the author's home; a stepper that remembers where they got to):

Step They decide Options Model calls
1. Who it's for The students and the guide's use Level (intro · intermediate · advanced); what they know already (prerequisites, free text); how it is used (before class · review after · exam prep · assessed); the course's learning objectives (pasted, or confirmed from the syllabus) None; feeds steps 3-5
2. Outline What is taught, in what order Reorder modules and the concepts in them (drag, or up/down on a phone); rename; merge two modules or split one; move a concept to another module; Teach it as core / supporting / detail / leave out; add a topic (B7); hide a lecture from Follow along Only for added topics and for modules whose content changed (priced)
3. How it is written The voice and density of every module Reading level; length (brief · standard · thorough); worked examples (few · some · many); notation and terms to use (a glossary the instructor can edit); general knowledge allowed, labelled, or not at all (course material only); language A rewrite of the affected modules, priced first (about $0.03 a module); applied all at once or module by module
4. Review the content Each module and lecture, approved or changed A review queue (not reviewed · approved · changed) with counts; for each part: approve, edit the text directly, ask for a change in words (3.2), or lock it so updates leave it as is Only for changes asked in words
5. Questions What students are tested on Approve, edit or remove any question; write their own (any of the seven formats); per module: how many and which formats; difficulty mix (recall · apply · analyse); match my exams (questions written in the style of an uploaded past exam) Only for new or restyled questions (priced)
6. Assessments Tests for the class Build a test from chosen questions or a rule (lectures, count, time); set an opening date and a due date; results only after the due date or straight away; send to the whole class or some members None
7. Publish What students see Students see the published edition; everything above goes into a draft; Publish with a note to students (what changed); earlier editions kept and restorable None
8. During the term Keep it current and see how the class is doing Add this week's lecture (B8; the draft gets its parts, the outline keeps the instructor's order and locks); the class's hardest concepts and most-missed questions, each linking to the part to fix; return to any step As in steps 2-5

Journeys:

# They say What happens Status Demo (live check, 2026-10-19)
G1 "Set it up for my second-years, who haven't done calculus" Step 1; the level and prerequisites feed every later rewrite and question Built: Presentation for the whole guide (students, used for, what they already know) Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Presentation. Presentation for the whole guide: students' level, what it's used for, what they already know, shown as “The writer is told…”
G2 "Teach recursion before sorting, merge these two, hash tables are core and a fifth of the exam" Step 2: concepts (tier, share of the exam, name, topic) at once; modules (reorder, rename, merge, split, move concepts, teaching order within a module, remove) as a priced update Built (steer.py, Shape this guide → Concepts, Outline) Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Concepts, Outline. Concepts tree (tier, % of the exam, name, topic; 18 core · 51%) applied at once; Outline of 12 modules: reorder, rename, merge, split, move, remove, priced
G3 "Shorter, more worked examples, use my notation" Step 3 for the whole guide, Learn, Follow along, a module or a lecture; priced, then rewrites only the parts in scope Built (Shape this guide → Presentation) Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Presentation. Presentation per scope; one module's “brief, many examples” priced at $0.04 for 1 module, applied only on Apply
G4 "Let me check everything before my students see it" Steps 4 and 7: precise feedback on any passage, review queue, direct edits, locks, draft and publish Built (review.py, Shape this guide → Review): every part with flags, approve (of one version), edit the text, lock; Hold changes until I publish keeps share links on the published edition; plus Steer this passage Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Review; Study → select text → Steer this passage. Held for publishing: the author's edit to module 1 made a draft (students kept edition 7) until Publish edition 8; the edited module is locked; every passage can also be steered (priced)
G5 "I want to choose the questions, and add my own" Step 5 Built (Shape this guide → Questions): every question with its key; approve, hide, edit (same id, answers still count), write one's own in any format; more like <a past exam> (about a cent); formats, difficulty and number per module in Presentation Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Questions. Every question with its key: “152 not reviewed” → approved one, hid one, wrote my own (numeric) → “151 not reviewed”; 4 more like Quiz 1 wrote questions in that exam's style (traces of a Python procedure, running-time reasoning) for about a cent
G6 "Quiz on lectures 1-3, due Friday, marks after" Step 6 Built: Send as a test sets when it opens and is due, results straight away or after the due date (held on the server), everyone or chosen members; members see Tests set for you and their result once released Open. “Quiz on lectures 1-3, due Friday, marks after”: listed for the student (“Quiz on lectures 1-3 · 6 questions, 15 min · due Fri, Oct 23, 9:00 PM ”), taken under time, answers graded and kept but not shown (“results after it's due, 10/23/2026, 9:00:00 PM”); results and worked answers on the due date
G7 "Where is the class struggling, and fix it" Step 8: hardest concepts and missed questions linking to their parts Built: Where the class struggles and Most-missed questions on People, each with Fix … opening the part that teaches it Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=people (owner) → Where the class struggles. The class's hardest concepts and most-missed questions, each with the part that teaches it (“Dynamic array: 1 of 5 answers right · Fix “Dynamic Arrays and Amortized Analysis””); 4 Fix … links, the first opening its module

As built (18 October 2026). Shape this guide (owner sidebar) has four tabs. Concepts: the hierarchy as a tree; per concept its tier (with the prediction shown), its share of the exam in percent (the rest keep their proportions), its name and its topic; new topics. Applied each time the course map is loaded, over the stored map, so each change can go back to the prediction; no model call, and every view follows at once. Outline: each change becomes an owner edit on the pending update (editions.py actions plus rename_module, order_concepts); a rename or reorder rewrites nothing. Presentation: options per scope rendered into one standing instruction for that scope (shown to the owner as "The writer is told…"); a narrower scope adds to a wider one. Update: the pending update with every change, its price, Apply. In Learn and Follow along the owner can select any passage and Steer this passage (quick instructions plus their own words); it becomes a request aimed at that part with the passage quoted.

Build order for this journey: (1) steering concepts, outline and presentation, and precise feedback (G1-G3, built first because instructors asked to steer the content and its look most); (2) draft and publish, direct edits, locks and the review queue (G4); (3) question curation and assessments with dates (G5, G6); (4) the class view linking to fixes (G7).

Who shapes a guide. A tutor or instructor who makes a guide owns it, independently: they upload or start it themselves and every step above is theirs. There is no shared editing of one guide (no editor role); someone else who wants to change a guide makes their own.

2.9 Build order (all five built 18 October 2026)

In this order, each usable on its own:

  1. Goals and one home. Goals with follow-ups (2.1) for owners, members and visitors; a home screen that plans from them (C5, D1, D2) and replaces Today; navigation Home · Study (Learn and Follow along) · Test · Map (with progress) · More. No model calls.
  2. Teach it. The author's home (E1), overrides taking effect (E2), preview as a student (E3); members can send tests (F2). No model calls.
  3. On demand: ask, explain differently, more questions (B4-B6). About a cent each. The owner can always use them; people on the share link only after joining, and only once the owner sets a daily amount for them (off by default, since share links are public).
  4. Quick start: one question, a course link, filling a gap (A1, A5, B7).
  5. Past exam as a timed test (C4).

Not now: accounts across devices (D5), calibrating predictions on real results (ExamOutcome).

2.10 Bringing what you already have

Many people arrive with significant prepared material of their own: years of flashcards, a question bank, old quizzes with solutions, a study guide they wrote, a whole course in an LMS. Today every file is read as course material for facts, so a deck of 400 cards is mined and thrown away. The aim: what you bring is used as it is, first; Cramfast fills only the gaps.

Principles.

  • Kept as-is. Imported cards, questions and notes keep their wording, answers and marking. They are never rewritten silently; Cramfast may flag a problem ("this card disagrees with lecture 3, slide 12") and suggest a fix, which the owner accepts or not.
  • Origin shown. Every item says where it came from: Your card, From your quiz 2, Your notes, Written by Cramfast, General knowledge.
  • Coverage visible. Imported items are linked to concepts on the map, so the map can say what they cover and what they don't ("your cards cover 61 of 79 concepts, 88% of the predicted exam"). Fill the gaps writes only for the concepts not covered, in the style of what was brought (card length, question formats, notation).
  • Unclear is flagged, not guessed. An item that can't be read reliably (no answer key, two candidate answers, a broken image) goes to a short Check these list, not into the bank.
  • Cheap. Parsing costs nothing; linking items to concepts is a small model call per batch. The price is shown before anything is written.
  • Nothing is locked in. What goes in can come out (H10).

What people bring, and what it becomes:

They bring Read from It becomes
Flashcards Anki (.apkg, .colpkg, with images and review history), Quizlet and Mochi exports, CSV/TSV, a pasted list Cards in Flashcards, Cram and spaced review, linked to concepts; review history seeds mastery (H9)
A question bank or tests Word/PDF with an answer key, Google Forms, LMS exports (QTI from Canvas, Blackboard; Moodle XML, GIFT, Aiken), Kahoot/Quizizz exports, CSV Questions in the seven formats with their answers, marks and rubrics; tagged to concepts; they lead Test
Old quizzes or exams with solutions As past exams today, plus the solution file paired to it As past exams (C3, C4), with model answers taken from the solutions
Their own study guide or notes Markdown, Word, Google Docs, Notion and Obsidian exports, OneNote PDF The guide's text for the parts they cover, kept and locked; Cramfast structures around them and fills gaps
A cheat sheet or formula sheet PDF, image, Markdown A reference page; pinned in Cram's last pass; shown during practice exams when the real exam allows a sheet; its notation becomes the guide's
Syllabus and learning objectives As today, plus objectives pasted or read from the syllabus The backbone: course goals, module order, and an objective on every module and question (I8)
Answer keys, solutions, rubrics Any file, paired by name and content to what they answer Joined to their problem set, quiz or question bank for grading and worked solutions
Lecture recordings Video or audio, a YouTube or Panopto link, Zoom and lecture-capture transcripts Transcript aligned to the slides by time; Follow along draws on what was said; spoken emphasis ("this will be on the exam") feeds the prediction
A whole LMS course IMS Common Cartridge export (Canvas, Moodle, Blackboard, D2L) Its modules, pages, files, quizzes and rubrics in their structure; the outline follows the LMS's module order
A folder of everything A zip, or a Google Drive / Dropbox / OneDrive folder Every file typed as above in one review screen; duplicates and old versions found (slides v2 replaces v1); solutions paired with their problems
Someone else's guide A share link or library page A fork (2.12)

Journeys:

# They say What happens Status Demo (live check, 2026-10-19)
H1 "Here are my 400 Anki cards for this course" Imported with their images; linked to concepts; used by Flashcards, Cram and spaced review; the map shows coverage; Fill the gaps writes cards only for uncovered concepts, in the same style Built (cards.py, Flashcards in Test): Anki (classic package), Quizlet, CSV, pasted; linked by the names they use; Fill the gaps in the deck's style (about a cent) Open. An Anki deck of 24 cards imported as written (one image, 14 reviews), linked to the map, studied self-graded beside the questions (44 cards); the deck covers 48 of 76 concepts (85% of the exam) after Fill the gaps
H2 "Here's my question bank" Read into the seven formats with answers, marks and rubrics; unclear items in Check these; tagged to concepts; the bank's questions come first in Test and practice exams, weighted by exam share Built (qbank.py, Your question bank in Test): Moodle XML, GIFT, Aiken, QTI (Canvas, Blackboard), CSV read without a model; Word or PDF as a Question bank file, read by the past-exam step; Check these lists what couldn't be read Open. A GIFT bank of 16 questions imported (choose one, true/false, numeric, short, match, explain); 14 kept, 12 linked, 2 listed to check; Your question bank (14) asked first in Test, graded
H3 "Here are last year's quizzes and the solutions" Each quiz paired with its solutions; evidence for the prediction (as C3) and sittable (as C4) with real model answers Built (pastexam.solutions_for): a solutions file named like its exam supplies the model answers, isn't listed as an exam and adds nothing to the prediction Open. Quiz 1 and MIT's official solutions, paired by name: one exam to sit (17 questions, 120 min), its model answers taken from the solutions; the solutions file adds nothing to the prediction
H4 "I already wrote a study guide" Their sections are kept as the guide's text for the concepts they cover, labelled Your notes and locked; Cramfast adds structure, questions and only the missing parts Built (mynotes.py, Shape → Review → Use my own notes as the text): notes split at their headings replace the sections they fit best (shared concepts, then title words), marked Written by you and locked; questions and examples stay; notes matching nothing are listed to add as material Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Review → Use my own notes as the text. An instructor's notes (Markdown, 4 headed sections) placed by best fit: 3 sections now in their words, e.g. “Dynamic arrays” in “Linked Lists and Dynamic Arrays”, marked Written by you and locked; questions and examples kept; the note matching nothing listed
H5 "Here's my formula sheet" A reference page, Cram's last pass, shown in practice exams if the real one allows a sheet; its notation is used throughout Built (file type Formula or reference sheet, Sheet.tsx): beside Study, in Cram's last pass, in practice exams when the owner marks the real exam as allowing it; Use its notation in the guide sets the notation (priced rewrite) Open. The course's formula sheet (a one-page Markdown file, typed Formula or reference sheet) beside Study, in Cram's last pass, and in practice exams, since the owner marked the real exam as allowing it; Use its notation in the guide sets the notation, priced
H6 "Here are the course's learning objectives" Objectives become the course goals; each module and question carries the objective it serves; coverage per objective (I8) Built (objectives.py): the author's objectives (pasted, one per line) or the syllabus's, matched to concepts by name; every module shows the ones it serves; coverage in I8 Open. The course's objectives (the author's own, pasted; else the syllabus's) on every module students open: “Serves: Analyse the asymptotic running time of an algorithm in the Word-RAM model · Prove an algorithm correct by mathematical induction · Solve recur”
H7 "Here's our Canvas course export" One upload brings modules, pages, files, quizzes and rubrics; the outline keeps the LMS order; quizzes join the bank Built (folder.cartridge, through A whole folder): a Common Cartridge (.imscc) brings its files typed, its QTI quizzes into the bank, and its module order; Outline → Your LMS's order → Order like my LMS (free) [Open](https://appliedtheology.ai/cramfast/?set=cd99f8bad9d74085911456c2b70acfd3&view=shape (copy's owner) → Outline → Your LMS's order). A Canvas-style course export (.imscc) through A whole folder: “Your LMS's order: 5 modules”; its 5 lectures recognised as already here, its QTI check-in quiz in the bank (3 questions); Order like my LMS → 31 module moves in the update, free
H8 "Here's the lecture recording" Transcribed and aligned to the slides; slide notes can draw on what was said; emphasis the lecturer gave feeds what is core Built (recordings.py, file type Lecture recording or captions): captions (VTT, SRT) read free, audio or video (up to 25 MB) transcribed by the model (tested with a stand-in; not yet run on a real recording); matched to its lecture and aligned to the slides in order; In the lecture under each slide; slide notes written from then on read what was said; stressed concepts with Make these core Owner: /cramfast/?set=4f108547336643fbaf731eb53bf005e3&view=follow (owner) → Lecture 7. MIT's captions for lecture 7 (WebVTT, free; audio or video would be transcribed by the model): 101 parts, matched to the lecture by name and to 4 of its slides in order; “In the lecture (0:00)” under each slide in Follow along; the lecturer stressed Leaf, Node, Root, Binary tree… (Make these core); slide notes written from now on read what was said
H9 "I've been studying this in Anki for weeks" Review history seeds mastery, so Home, Progress and Cram start from where they are Built: an Anki deck's review log becomes the owner's answers Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=progress (owner). The deck's Anki reviews became 7 answered cards, counted in the report: “0 of 51 concepts secure · 14 started · 6 sessions. Secure means at least two answers, 80% ”
H10 "Can I get it all back out?" Export cards (Anki, CSV), questions (QTI, Moodle XML, CSV), the guide (Markdown, PDF) and the course map (CSV); an LMS cartridge for instructors Built (Settings → Take it with you, exports.py): the guide (Markdown, and a printable page saved as PDF), the map (CSV), every question (Moodle XML, QTI, CSV), every card (CSV, TSV for Anki), and the course as a Common Cartridge for an LMS Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=settings (owner) → Take it with you. Settings → Take it with you: 186 questions as Moodle XML and 135 as QTI, 161 cards as CSV and TSV for Anki, the guide as Markdown (20387 words) and as a 262 KB PDF, the course as a Common Cartridge (14 module pages and their quizzes), the course map as CSV (76 concepts)
H11 "Here's my messy folder" Zip or cloud folder: typed, de-duplicated, versions and solutions paired, irrelevant files set aside; one screen to confirm Built (folder.py, Update this guide → A whole folder (.zip), and on the start page): types from names, duplicates, older versions, files already in the course and non-material set aside, solutions paired; decks and banks imported; one screen to confirm. Cloud folders: download them as a zip [Open](https://appliedtheology.ai/cramfast/?set=cd99f8bad9d74085911456c2b70acfd3&view=learn (copy's owner) → Update this guide → A whole folder (.zip)). A zip sorted in one screen before anything is added: types from names (syllabus, exams, homework, notes, a formula sheet, decks), duplicates and older versions set aside, solutions paired with their quiz, photos and system files left out; the live demo's 12-file 6.006 folder added just its new formula sheet
H12 "Are my cards even right?" Imported cards and questions checked against the course material: disagreements, outdated notation and cards with no support flagged, each with the source page; the owner decides Built (checks.py, Check what you brought in Test): imported cards and questions against the facts of their concepts (about a cent per 30): backed, disagrees, other notation, not covered, each with the pages; the owner removes or keeps Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=test (owner) → Check what you brought. The demo deck and question bank checked against the course (about 2 cents): “Checked 35: 28 backed by the course, 0 disagree, 0 other notation, 7 not covered”; each flagged item with what the course says and the page (“The course doesn't cover it · MIT6_006S20_lec1 · page 1, MIT6_006S20_lec4 · page”), to keep, edit or remove

How it works. New file roles (Flashcards, Question bank, Answer key or solutions, Reference sheet, Recording, LMS export) beside today's. Each imported item is an authored item with its origin (file, row or page), its concept links, and a lock: the pipeline reads it as evidence but never rewrites it. Links are redone when the map changes. Imported questions grade by code like generated ones, and their answers never reach the browser before grading.

2.11 Building it with you: automatic or reviewed

Today a build runs end to end by itself. That suits a student the night before an exam, but not an instructor, or someone who brought material and wants to steer how it is used. Each build offers:

  • Build it for me: as today. Every review below stays available afterwards.
  • Build it with me: the build pauses at checkpoints. At each one you see what was made, change what you want, and continue. Do the rest automatically is always there.

Default: with me when the goal is Teach it or the upload includes cards, a question bank or an LMS export; for me otherwise.

Principles. Cheap decisions come before expensive writing: nothing is written until the structure is agreed, and the price of writing is shown at the checkpoint before it. Every checkpoint starts from a good default, so Continue without changes always works. The build remembers where it stopped; leaving and coming back resumes it. Reviewing large amounts has three speeds: everything, only what's flagged (parts Cramfast is unsure of: unreadable slides, diagrams it could not read, statements with weak support, questions whose answer it could not verify), and a sample (check a few; if they're fine, approve the rest).

The checkpoints:

Step You see You can Cost to continue
1. Purpose The goal (2.1) and who it is for (G1) Pick goals, level, prerequisites, use Free
2. Material Every file with its detected type, pages, duplicates, pairs (solutions ↔ problems), what will be set aside (cover pages, admin pages) Retype, unpair, drop, skip pages or slides Reading the files (most of the course map's cost)
3. Goals and objectives Course goals drafted from the syllabus, or from the material when there is none Edit, reorder, add, remove About a cent
4. Course map Concepts by tier and share, the hierarchy, what imported items cover Shape's Concepts (G2), plus merge two concepts that are the same and split one that is two Free
5. Outline and presentation Modules in order; lectures for Follow along; how it will be written; the price of writing it all Shape's Outline and Presentation (G2, G3); write all now, or module by module as approved The writing (shown here, before it starts)
6. Review the writing Parts as they finish: each module section, each lecture overview and slide note, flagged ones first Approve, Steer this passage (priced edit), edit the text directly, lock Only steered changes
7. Questions Imported questions, then generated ones; how the bank spreads over concepts, formats and difficulty against the exam's shares Approve, edit, remove, write their own, more like this, fill this gap Only new questions
8. Try it as a student The student view; a practice exam taken by the author Note anything else to fix Free
9. Publish What students will see Publish to the share link, a class or the library (2.12) Free

The slide review is one screen: the slide on the left, its notes on the right, with keys on desktop (A approve, S steer, E edit, → next) and swipes on a phone, and a counter ("14 of 40 slides reviewed · 3 flagged left").

Journeys:

# They say What happens Status Demo (live check, 2026-10-19)
I1 "Just build it" As today: one run, no stops Built Open. Built by itself, no stops (as B1: One uploaded lecture built by itself into Learn (2 modules) and Follow along; Home opens on “What do you want from this course?”)
I2 "Let me check the plan before you write anything" Pauses after the map and after the outline; the price of writing shown before it starts Built (jobs.py checkpoints, Checkpoint.tsx, Build it with me on the start page): writing uses the map as the owner shaped it Owner: /cramfast/?set=584e68cfb20849259dbd5af8ada9b65b&view=home (owner). Built with review: stops at the course map (only Shape, the map and settings open), then at an outline of 3 modules, 3 unwritten; writing it all is priced first ($0.06)
I3 "Go through it slide by slide with me" The review queue: approve, steer, edit or lock each slide note and module section Built: Review lists every module, lecture overview and slide note; approve, edit in place (locked so updates keep it), lock Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Review → Everything. The review queue lists all 50 parts (50 shown): a slide's headline edited in place (now 2 changed by you, each locked so updates keep it); approve and lock on every part
I4 "Only show me what you're unsure about" Flagged parts first, with why each is flagged; the rest approved Built: Only what's flagged, with why each is flagged, then Approve the other … Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Review → Only what's flagged. Only what's flagged: 44 parts shown with why (“1 sections cite nothing”); Approve the other 6 parts → 39 approved
I5 "Check a few; if they're fine, do the rest" A sample from each lecture and module; approving the sample approves the rest Built: A sample, then the rest: one part from each module and lecture Owner: /cramfast/?set=2548f33a0a3c46ea9d11c871812793a7&view=shape (owner) → Review → A sample. A sample of 18 parts (one from each module and lecture), three checked by hand, then Approve the other 32 → 35 approved
I6 "I'll finish this tomorrow" The build stops at its checkpoint; the author's home shows where it is and what is left Built: the checkpoint panel on the owner's screens Owner: /cramfast/?set=1e2b3bef40bf4900878894ccad84d403&view=home (owner). Coming back later, the course opens where the build waits: “BUILT WITH YOU · STEP 4 OF 9: THE COURSE MAP”, with Continue and Do the rest automatically
I7 "Lecture 8 is up" The new parts get the same checkpoints in small: its concepts, where it goes in the outline, its slide notes Built (Checkpoint.UpdateCheckpoint): on a course built with review, new material shows its new concepts, its new modules and where the rest go, and the price, before writing; after, Review → New in this edition Owner: /cramfast/?set=4f108547336643fbaf731eb53bf005e3&view=shape (owner) → Review → New in this edition. Lecture 7 added to a course built with review: the owner was shown its 9 new concepts, its 2 new modules and where the rest go, and the price ($0.05) before writing; applied, its 9 new parts are under Review → New in this edition
I8 "Does what I teach match my objectives?" A table of objectives × modules × questions: objectives with nothing taught or tested, questions that serve no objective Built (Shape → Outline → Learning objectives): each objective with the modules that teach it and its questions; gaps highlighted; questions serving no objective counted Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=shape (owner) → Outline → Learning objectives. “Learning objectives: 7, 1 not fully covered”: each objective with the modules that teach it and its questions; the gap shown (“7. Keep an AVL search tree balanced under insertions and del…: nothing teaches it”); “83 questions of 155 serve no objective”

How it works. The build already runs in stages (extraction, course map, plan, writing); a checkpoint is a stage that waits for Continue instead of starting the next. Approval states (not reviewed · approved · changed · locked) are kept per part on the edition, and a locked or edited part is carried over unchanged by later updates (the G4 rule). Flags come from checks the pipeline already runs (unsupported statements, unreadable pages, failed answer checks).

2.12 Making, forking and publishing guides

A guide is data (a course map, modules, slide notes, questions, editions and the author's steering), so copying one costs nothing and adapting it costs only what is rewritten. People should be able to take a good guide, make it theirs, and give back. Everyone owns what they make (2.8: no shared editing; someone who wants to change a guide forks it).

Principles.

  • Forking is free and instant. It copies content, not people: no members, answers or sessions.
  • Lineage is visible. A fork says what it came from and at which edition; an original shows how many forks it has. Credit follows the chain.
  • Your changes win. When the original changes, a fork can take the changes or not; its own edits and locks are never overwritten.
  • Private by default. Four levels: Private (only the owner), Link (anyone with the share link, as today), Class (joined members only), Published (listed in the library).
  • Published means rights. A guide is listed only if what it is built from may be shared: open material (open courseware, open textbooks, arXiv), the author's own notes and items, and general knowledge. Guides built from third-party slides or textbooks can still be shared by link for study, as today. The source audit already records where every statement comes from, so this is checked per guide, not trusted.
  • Ranked by learning, not likes. The library orders guides by how much studiers improve (their readiness gains and completion), then freshness and forks.

Journeys:

# They say What happens Status Demo (live check, 2026-10-19)
J1 "Make it mine" Make a copy on any share link or library page: the guide, its map, questions and steering, in their own library; they own it with all of Shape this guide; their progress carries over if they were studying it Built (fork.py, Make a copy of my own on share links): the published guide, its cards and questions, files copied into the new owner's space; a member's answers come too; credited. For anyone with Cramfast access (invite-only for now: opening it is a 2.13 decision) Open. Make a copy of my own on any share link: copied in about half a minute, free, credited to the original; a second owner's copy has the whole guide (edition 14, 18 modules), its 44 cards, 17 bank questions and quiz 1, slide images copied into their space
J2 "Keep up with the original" 3 changes upstream: the original's new editions as a proposal on the fork's Update tab; take all, some or none; the fork's edits and locks win Built (upstream.py, the copy's Settings → Copies): the original's later changes, part by part; take all, some or none; the copy's locked and edited parts keep its own; a rebuild of the original on new material needs a fresh copy [Open](https://appliedtheology.ai/cramfast/?set=cd99f8bad9d74085911456c2b70acfd3&view=settings (copy's owner) → Copies). The copy's Settings: “Up to date with the original (edition 7).” (the original's later change was taken; parts the copy locked or edited keep its own)
J3 "I just want the hash tables module" Fork a module or a lecture into an existing guide; its concepts join that guide's map Built (Shape → Outline → Bring in modules from another guide): a module by share link or library id, text as written, concepts matched by name; overlapping ones proposed as priced merges [Open](https://appliedtheology.ai/cramfast/?set=cd99f8bad9d74085911456c2b70acfd3&view=shape (copy's owner) → Outline → Bring in modules from another guide). One module, “Direct Access Arrays and Hash Tables”, brought in from “Algorithms, Full” by its share link: its text as written, its concepts matched to this course's by name; it overlaps one already there, so a merge is proposed in the update, priced (“Merge “Direct Access Arrays and Hash Tables” into “Hash Tables and Collision Resolution””)
J4 "Combine my notes with that guide" Merge two guides: concepts matched, modules combined, a priced update for what changes Built: Choose all in the same place merges two guides: their modules, and their concepts this course lacks join its map at their tiers Open. Two guides merged: lecture 6's 3 binary-tree modules joined the copy of lectures 1-5 (18 modules now); their concepts joined its map (Binary tree, Node, Root, Leaf…) at their tiers; modules covering mostly the same concepts as one already there are proposed as priced merges
J5 "Same course, for high schoolers" / "in Spanish" Fork, then one Presentation change; only the writing is redone, priced Built: a copy, then Presentation for the whole guide; priced, applied on Apply [Open](https://appliedtheology.ai/cramfast/?set=cd99f8bad9d74085911456c2b70acfd3&view=shape (copy's owner) → Presentation). The copy re-pitched for high schoolers (“Write for students new to the subject, who already know: high-school algebra; no…”): rewriting 14 modules and 26 slide notes priced at $0.97, run only on Apply
J6 "Publish my guide" Title, description, course, school, textbook, subject, level, a licence (CC BY, CC BY-SA, CC BY-NC, all rights reserved); the rights check; listed once it passes Built (library.py, Settings → Publish to the library): title, course, school, subject, level, licence; listed only when every taught file is found openly, written by Cramfast, or declared the author's own or openly licensed Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=settings (owner) → Publish to the library. Published with a licence (CC BY-NC-SA) after the rights check: 5 uploaded lectures declared openly licensed (MIT OCW); files found openly or written by Cramfast pass by themselves
J7 "Is there already a guide for 6.006?" The library: search by course, school, textbook or topic; each guide's page shows what it covers, its author, editions, forks and how studiers did; Study it or Make a copy Built (/cramfast/library/, public): search by course, school, textbook, subject or concept; ranked by studiers' share of the exam secure, then copies and freshness; Study it, Make a copy of my own Open. The library (signed out): 2 guides; “hash tables” finds “Introduction to Algorithms (MIT 6.006): lectures 1” (5 people studying, 0% of the predicted exam secure on average · copied 2 times · 14 modules, 5 lectures); Study it opens its share link
J8 "This explanation is wrong" A studier's Suggest a fix on any passage goes to the author's queue; accepted ones join the next edition; contributors are credited Built: on a share link, select a passage → Suggest a fix; the author's queue in Shape → Review; taken, it is a request on the next update, and the edition credits its author (shown in What's new) Open. A studier selects a passage → Suggest a fix (It's wrong, Unclear, Typo, A step is missing, or their words) → the author's queue; taken, it became an update ($0.045) credited to its author: “With suggestions from Sam (a studier)”, shown to students in What's new
J9 "Who's using my guide?" Studiers, forks and suggestions; where studiers struggle (aggregate only) Built: Your guide's reach on People: studiers, this week, sessions, answers, copies, listing, suggestions Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=people (owner) → Your guide's reach. Your guide's reach on People: “5 people studying together (5 this week) · 9 sessions · 33 answers · copied 2 times · in the library”
J10 "Same course next term" An instructor forks their own guide: steering, locks and questions kept; this term's lectures swapped in Built: Settings → Copies → Copy this course Owner: /cramfast/?set=07ea6fc146544e18b88446aa6460ba3a&view=settings (owner) → Copy this course. Copy this course → “Algorithms, Spring 2027”: Copied from Algorithms (incremental test), edition 6, on 10/19/2026.; 0 students; this term's lectures go in as an update
J11 "Collections" Curated lists of guides ("6.006 complete", "Step 1 immunology"), made by anyone, published like guides Built: Add to a collection in the library; collections are public pages Open. A collection, “MIT intro courses, exam first”, with its 2 guides, public to anyone; made from the library with Add to a collection
J12 "Report this guide" Report (wrong, spam, copyright); an admin can hide a guide or a fork; a copyright claim takes it down pending review Built: Report on every guide; a copyright report hides it until an administrator looks; administrators see reports in the library and hide or restore Open. Reported from the library (“An administrator will look”); the administrator's list shows it, with Hide it / Restore it; a copyright report hides the guide at once (tested)

What it needs. Accounts (D5) come first: an anonymous owner loses everything with their browser, and credit, following and publishing need a person. Creation is admin-only today because a build spends money (about $0.45 on Lightweight, about $20 on Full); forks cost nothing, so they are the way to open up, with a per-person allowance for new builds and rewrites. Library studiers' on-demand help (B4-B6) comes from their own allowance, not the author's. Data: a set's lineage (the original set and edition), visibility, licence; a public library index; a suggestions collection per set; upstream changes found by comparing the original's editions since the fork's base.

2.13 Build order for 2.10-2.12 (all built 19 October 2026, in this order)

Each step is usable on its own:

  1. Checkpoints before writing (I2, I6): the build pauses after the map and after the outline, with the price of writing shown. Makes every build steerable before money is spent; reuses Shape.
  2. Flashcards in and out (H1, H9, H10 for cards): Anki, Quizlet, CSV; coverage on the map; Fill the gaps.
  3. Question banks in and out (H2, H3, H10 for questions), with answer keys and Check these.
  4. The review queue (I3-I5, and G4): approval, direct edits, locks; flagged-first and sample.
  5. Accounts (D5): the prerequisite for everything after.
  6. Forks and visibility (J1, J5, J10).
  7. Publishing and the library (J6, J7, J11, J12), with the rights check and moderation.
  8. Giving back (J8, J9): suggestions and author stats.
  9. Following and remixing (J2-J4): upstream changes, partial forks, merges.
  10. Bigger imports (H4-H8, H11, H12, I8): own notes kept, reference sheets, objectives, LMS cartridges, recordings, folders, checking imported items.

Decisions taken while building (19 October 2026), each open to change.

  • What may be published: a guide is listed only when every file it teaches was found openly, was written by Cramfast from general knowledge, or is declared by the author as their own or openly licensed (naming the licence); a copyright report hides it until an administrator looks.
  • Who pays: creating a course is still for people with Cramfast access (the app is admin-gated); copies, the library and studying are free and public. Opening creation with a monthly allowance per account is the next decision, with accounts (sign-in) beyond one-time device links.
  • A copy that takes its original's changes takes them part by part; parts the copy locked or edited keep its own; a presentation the copy set applies the next time those parts are rewritten.
  • Imported items with errors are flagged with the course's facts and pages; the owner removes, hides or keeps them; nothing is corrected automatically.

3. What a student brings, and what they do

Every journey below has a live example in DEMOS.md, with a link.

3.1 What they start with

They have What happens Built
Nothing (just trying it, or no files yet) No files yet? Start from the course's name: name, and optionally school, instructor, textbook and what the exam covers. Cramfast searches the web for openly published material (the course's own pages, open courseware, open textbooks), follows course pages to the files they link to (lecture notes, problem sets, past exams; see start.py), and outlines the course's topics. The student reviews what was found (each source with a checkbox and a link) and the topics (each marked From the material or General knowledge), then Build my guide. The name can also be a subject or a body of work: for research papers ("recent papers by Ada Lovelace", a topic's literature) the search also writes an arXiv query, and every matching paper (newest 12) is listed as an open PDF, so topics are taught from the papers. Chosen files are added as if uploaded; topics nothing chosen covers get notes written from general knowledge, labelled so everywhere. About 5 cents to search. Yes
One file Upload it; the build runs by itself (extraction, study bundle, course map, lessons, Follow along and Learn). Yes
One kind of file, on a budget Lightweight build (Gemini 3.1 Flash-Lite): under $0.50 for a typical course; best for text-heavy notes. Yes
Many kinds (dense) Each file says what it is: Slides or lecture notes, Textbook or reading, Research paper or article (Follow along goes page by page), My own notes (all taught), Homework or problem set (which skills the course practises; half the weight of a past exam in the prediction), Past or practice exam (the strongest evidence of what the exam tests; never study content), Syllabus or schedule (order, weights, scope), My marked homework or test (read for the Progress report). The course map asks for what would help most and is missing: a past exam, the exam details, the syllabus, homework, missing lectures, and the textbook when the lectures cite one. Yes

3.2 A course over time

  1. New. As 2.1; each stage's progress shows on the Overview, then Today. The first build is published as edition 1.
  2. More files later. Added from the sidebar or the Update this guide panel, typed as above. A new lecture is mapped, placed into Learn and given notes; a past exam, homework or syllabus re-ranks what is core without rewriting anything. Only what new material touches is rewritten.
  3. Feedback in words. See below. Both together are one proposal.

Update this guide: change a finished guide in words, with more files, or both. The panel sits above Learn and Follow along; its bar shows the edition and, once one is ready, Update ready to review.

  • Ask in words. Write what should change and choose what it applies to (the whole guide, a lecture, a slide, a module). Suggest a change on each module, lecture overview and slide opens the panel aimed there. Propose changes reads the request in a few seconds (about a cent).
  • Add files. Choose what they are (Lectures or notes, Past exam, Syllabus) and pick them. The panel says the course map is being updated and the proposal appears there in 3 to 10 minutes; the owner can leave and come back. The published guide stays up the whole time: the owner and students keep studying the current edition. A past exam or syllabus re-ranks what is core without rewriting the guide.
  • Review the proposal. It lists what new material adds (lectures, concepts, new modules, and any lecture that could not be read into the course map), each edit with a checkbox and a one-line summary, what was declined and why (requests about the app rather than the guide are declined), and the price: how many modules, overviews and slide notes will be written, and about how much. Unticking an edit reprices it. Nothing has changed yet.
  • Apply or discard. Apply update writes only the parts the edits and the new material touch, usually in one to two minutes; everything else is carried over unchanged. Discard drops the proposal. If writing stops, the panel says so and Apply again resumes it, with finished parts kept.
  • After. Owner and students see the new edition: a What's new note (new modules, modules updated, new lectures; dismissible) and Updated marks on each changed module, overview and slide. Questions kept word for word keep their answers, and answers to replaced questions still count. Earlier editions lists every edition and restores one in a click (restoring publishes it again; nothing is deleted).

Requests are standing: a later rewrite of the same part (for example after more material) still follows them.

3.3 Ways to study

Use Where What it does Built
Follow along Follow along Each lecture as given: an overview, then every slide beside its notes; Test yourself on the lecture after. Yes
Learn Learn The course re-taught as modules at a chosen depth (Core · Core + supporting · Everything); Test yourself on the module after. Yes
Listen Listen on a module or lecture Reads it aloud in the browser's voice, part by part (a module's intro, sections, mistakes to avoid, summary; a lecture's overview, then slide by slide, turning the slides as it goes), from spoken scripts written for the ear (maths said in words). Play, pause, previous and next part, speed. At the end it offers Test yourself. It never reads questions inside Learn. Yes
Quiz and test Test One question bank (every Learn and Follow along question, all seven formats). Scope: everything, my mistakes, my weakest concepts, questions not yet tried, a module, a lecture, chosen concepts. Quiz shows each answer at once; Practice exam is timed, weighted like the exam, and shows results only when handed in, with a per-concept breakdown. Yes
Cram Cram 15 min to 2 h: as much of the exam as fits, the concepts that count most and that the student knows least first. Each concept: its module section (Got it, test me), then a question or two; a miss comes back once more before the end; a final mixed round. A countdown throughout; the summary says what was covered (and what share of the exam) and what is still shaky (Cram the shaky ones). Yes
Spaced sessions Home → Daily practice Due reviews, new concepts in lesson cards, quizzes, a recap (4.1). Yes
Study with others Together (share link), People (owner) Anyone with the share link can join by name (no account; the membership lives in that browser). A member's answers and sessions are kept with the course; they choose whether the group sees their progress. Members see the group's headline progress and what the group finds hardest. The owner sees everyone: exam share secure, answers right, weakest concepts, last active, and any one person's full report. Yes
Test others Test → Send as a test The owner picks a scope and size; the link opens the test on the share link; takers join by name, take it timed with results at the end; the owner sees each taker's score and what the group found hardest. Yes
Mastery report Progress Exam readiness (share of the predicted exam secure), by lecture, by module, concepts weakest first, every session. Secure: at least two answers, 80% right, the latest right. Yes
Against real marks Progress → Add marked work A marked homework, quiz or exam is read question by question (what it tests, marks, the marker's comment) and compared concept by concept with the report: agreements, and where the app over- or under-rated the student. Yes
Look things up Course map, concept pages, Study guide The whole course by tier; a lesson as a page; the per-lecture study bundle. Yes

3.4 A course, its exams, and sessions that build on each other

A course is the long-lived thing: its files, its course map, the guide's editions, and each student's answers. Within it:

  • Exams. The owner names the course's exams (Midterm: lectures 1-4, 2 November; Final: everything) and marks the one being studied for; anyone on the share link picks their own. The active exam scopes Test, Cram and Progress to its lectures, and its date is the countdown.
  • Sessions. Every finished quiz, practice exam, cram, test and Today session is kept (kind, scope, score, minutes, per-concept results).
  • Building on the last one. Today, Test and Cram open with Last time: when, what, the score, and the concepts still shaky, with Cram these and Test me on them. Progress lists every session. Spaced review schedules the rest.

3.5 Who uses it

  • Owner: everything above, plus updates, sharing, exams, People and Review.
  • Visitor (/cramfast/s/<token>, no account): every way to study in 2.3 except updates; their answers and sessions stay in their browser. The owner's answers are never shown.
  • Member: a visitor who joined by name under Together; their answers and sessions are stored with the course and visible to the owner (and to the group if they choose).
  • Reviewer (/cramfast/compare/?a=<token>&b=<token>): two share links side by side (section 8).

4. Screens

Each view has a URL: ?view=<slug>, plus &set=<id> for the owner and &concept=<id> on the map. Courses built before v4 (no lessons) keep the earlier screens: the map is their home, and concept pages show study pages (UI 2) or the original claim list (UI 1).

Screen Slug What it shows Data
Study learn, follow One screen, two orders: By topic (Learn) and Lecture by lecture (Follow along). Navigation: Home · Study · Test · Course map · Progress, then More (Cram, Together or People, Study guide, Practice, Review, Settings, Sources); the phone bar is Home · Study · Test · Map · More
Learn learn Depth picker (Core · Core + supporting · Everything, with concept counts), the modules in order with goal, minutes at that depth and questions done. A module: title, goal, Learn / Test yourself tabs. Learn: intro, contents, sections (heading, concept chips, explanation, worked example revealed step by step, "On the slides" thumbnails that open full size), mistakes to avoid, summary, Test yourself on this module →. Test yourself: section checks and practice questions, then flashcards GET /plan → modules
Follow along follow Lecture picker and Learn / Test yourself tabs. Learn: steps Overview · 1 · 2 …; the overview (story, before you start, key ideas, terms and notation, where it leads), then each slide beside its notes (headline, concept chips, one section per idea, Reading the figure, Explain this more). On wide screens the slide stays beside the notes; on a phone it sits above them, capped in height, with Open full size. Test yourself: the lecture's questions grouped by slide (Review this slide), then flashcards GET /plan → lectures
Home home (today still opens it) First visit: What do you want from this course? (goals and follow-ups, 2.1). Then the goal line (Change goals), Last time, the leading goal's plan (exam: readiness, pace, today's tasks, The days until…; learn: this week's time and modules; keep up: newest lecture, catch-ups; teach: the author's checklist with Preview it as a student), the other goals in a line each, Daily practice (the spaced session: Next up, length chips, Start), Ask about this course, Something else today goals (set or browser), GET /plan, sessions, StudyView
Session player (overlay) One card at a time, see 3.1 StudyView.plan, .lessons, .reviews
Course map map Exam headline ("79 core concepts → 75% of the exam"), basis, level picker, evidence requests, lens switch (As taught · By topic · By objective), concept rows with tier dot, share and progress mark CourseMapView
Concept page map&concept= Lesson as a page (4.2), or the facts when the concept has no lesson; "covered in the lesson on X" for folded concepts ConceptView
Topic page map&concept= Intro, Start with X, the topic's concepts with summaries and progress, Practise the whole topic ConceptView.topic, .child_summaries
Test test (&test=<id> opens a sent test) Exam picker and Last time; scope, Quiz or Practice exam, 5 · 10 · 20 · 30 questions; one question at a time with a sticky bar (question n of N, timer, Hand in); results: score and concepts weakest first, then every question with its answer. Owner: Send as a test to others → GET /plan (bank), POST /attempts, POST /sessions, POST /tests
Cram cram Exam picker, Last time; 15 min · 30 min · 1 h · 2 h; preview (n concepts, share of the exam, their chips); the run: learn card (Got it, test me) and question cards with a countdown and a progress line; summary with Cram the shaky ones GET /plan, POST /sessions
Progress progress Exam picker; readiness (share of the predicted exam secure), by lecture and by module (secure and started bars), concepts weakest first, sessions; owner: marked homework and tests compared concept by concept (Add marked work). The spaced review schedule (StudyView.progress) folds below GET /plan, /sessions, /graded
People people (owner) The share link to invite with; people (exam secure, answers right, weakest, last active; a name opens their report); tests sent, each with its link, results and what the group found hardest GET /people, /people/<id>
Together together (share link) Join this course (name, show my progress to the group) or, once joined: the group's headline progress and what it finds hardest; Leave on this device POST /join, GET /me, /group
Start review overview of a course started by name Searching… → what was found (sources with checkboxes, links and kinds; topics with From the material or General knowledge) → Build my guide → fetching → the usual build progress set start
Practice practice The study bundle's verified questions and flashcards by scope (courses built before the guide; Test replaces it) snapshot items
Study guide guide The per-lecture study bundle (lessons with citations) bundle
Review review Every stored flag, comment, override and badge, newest first (owner) GET /feedback
Settings settings Account settings (section 7) (owner only; visitors get the defaults) GET/PUT /api/settings
Sources & audit sources Originals, extraction per page, every intermediate record (owner) audit

4.1 The session

A session is a list of steps planned on the server (plan_session in study_views.py):

  1. Warm-up: items whose review is due, most overdue first, at most 25% of the time.
  2. New concepts on the chosen level, in path order (tier, then the course's own order), skipping anything already started: an intro card, one lesson card per block, a check.
  3. Quiz after every new_per_block concepts (default 3): up to two questions per concept, interleaved so no two in a row share a concept.
  4. Recap, always last.

Time estimates: intro 20 s, lesson card 40 s, check or quiz question 30 s, review 15 s, recap 20 s. The player adds two steps of its own: a wrong check inserts a Watch out card (the lesson's traps) and appends the same check once more before the recap.

Card Body Action
Intro Name, tier marker, predicted share, why it matters, "After this you can…" Start
Lesson One block (section 5.4) in card density: self-test points, step-by-step reveals Continue
Check / Quiz Stem, four full-width options (or a text box for free response) Choose → Check → a band with icon and words, each option's reason, citations → Continue
Review A due flashcard (front → Show answer → Again · Hard · Good) or question Rating or Check
Watch out The lesson's traps (wrong → right) Continue
Recap Concepts covered with how each check went, answers correct, reviews scheduled Done

Every card shares one frame: ✕, ←, progress bar and count on top; concept name · tier · card label; body; citation chips; one primary action pinned at the bottom. Keyboard: Enter/Space continue, 1-4 or A-D choose, F flip, ← back, Esc close, ? shortcuts. Phone: full screen, the action bar sticky at the bottom. Desktop (≥ 1180 px): the card centred at 680 px with the slide behind the current card's facts beside it. The step index is kept in session storage so a reload resumes.

4.2 The concept page (lesson as a page)

Top to bottom: breadcrumbs and position on the path; name, tier, share; the lesson head (summary and the "On the exam" box with stated objectives, in the order the lesson style setting chooses; why it matters; "After this you can"); Study as cards (a session for this concept) and Practise (its check, questions and flashcards); each block in page density with a Flag control; the slide viewer opened on best_page; memory aid; Watch out; concepts folded into this lesson; Connects to; drill down; and Everything the course says, the fact ledger grouped by role (Definition, Parts, Kinds, Steps, Features, What it causes, What causes it, Examples, Exceptions, Contrasts, …), each fact with its slide citation and a Flag control.

4.3 Layout

Width Layout
≥ 1180 px Sidebar navigation · page (up to 1260 px) · outline rail on concept pages; sessions show the slide panel
800-1180 px Sidebar · page; the outline opens as a drawer
< 800 px One column; bottom tab bar (Today · Map · Practice · Progress); outline and slides as sheets; tables become stacked rows

5. Data model and how each type is drawn

Python models are the source of truth (Pydantic, extra="forbid"). Screen views are exported to TypeScript (web/src/generated/views.ts); fields with defaults are required in the exported types, because the server always sends them. A test fails when the TypeScript is stale.

Source (file) ─ Unit (page) ─ Block (text | figure | table | equation | transcript)
                                     ▲ cited by
Fact (Claim) ── roles per concept ──▶ Concept ── taxonomy parent, syllabus position, objectives
     ▲                                  │
     │ cited by                         ├─ derived relations (from roles)
Lesson blocks, traps, options ◀── Lesson + PracticeSet (per concept)   [lessons.py]
                                        │
Attempt ─▶ review state ─▶ ConceptProgress ─▶ TodayView, SessionPlan  [study_views.py]

5.1 Sources

Type Fields Drawn as
Source id, name, kind, role (course, past_exam, syllabus), total_units Sources list; original download
Unit <source id>-<page index>, page image assets Slide viewer; figure blocks; the desktop session panel
Block kind, content, location, interpretation, unit_id Page chip ("L3 · p. 12") that opens the passage or moves the slide viewer

5.2 The concept graph (graph_contracts.py, concept-graph-v4)

Type Key fields Meaning
Claim (a fact) id, title, text, kind, about[], primary, block_ids[], source_id, provenance (course | background), roles[] {concept, role, of} One citable learning, and what it tells us about each concept it mentions
Concept id, name, aliases, kind, parents[{id, is_a | part_of, primary}], claim_ids, tier, score, predicted_share, signals, cooccurs, synthesized A node; synthesized marks a grouping topic the course does not name
Relation source, target, type, claim_ids, basis (stated | inferred) A typed edge, derived from a role that names another concept
SyllabusLecture source_id, title, concept_ids The course's own order: each lecture (files in natural order) and the concepts it first teaches
ExamProfile course_title, level, format, depth, objectives[{text, block_ids, concept_ids}], can_do, cues What success on this exam looks like
TierTable, ExamQuestion, Signals as before The 20/80 summary; past questions mapped to concepts; why a concept scored as it did

Concept kinds: topic, entity, process, principle, method, quantity, event, person, work, condition, other (CONCEPT_KINDS).

Fact roles (FACT_ROLES) and the relation each yields when it names another concept (of):

Role The fact says the concept… Relation
defines is … —
kind_of, part_of, step is a kind of, component of, or stage in of (taxonomy)
property has a feature or value —
cause / effect brings about of / results from of causes (effect reversed)
prevents blocks or stops of prevents
example is an instance or case (of of) example_of
exception does not hold when … —
contrast differs from of contrasts_with
measure is quantified by of measured_by
uses is used for of used_for
location is found in of located_in
time comes before of precedes
flows moves, drains or passes to of flows_to
interacts binds or communicates with of interacts_with
requires depends on of requires

Invariants (validate_graph): every claim cites blocks; roles name concepts the claim is about; every concept is placed once and the hierarchy is acyclic; syllabus and objectives name known concepts; objective concepts are never detail; shares sum to 1.

Graphs from earlier versions are read through upgrade_graph (v2's medical vocabulary is mapped to the general one; v3 differs only by fields with defaults); stored records are not rewritten.

5.3 Views

View Fields Drawn by
CourseMapView profile, exam, requests, tiers, depths, roots (MapNode tree), syllabus, by_objective, lessons (concepts with a lesson), folded (concept → host lesson) CourseMap.tsx: headline, level picker, requests, lens switch and its rows
MapNode id, name, kind, tier, synthesized, predicted_share, concepts_by_tier, item_ids (bundle and lesson practice), children Tree rows, outline, progress marks
ConceptView concept, breadcrumbs, parents, children, claims (ClaimView with role), relations, objectives, practice_item_ids, lesson (LessonView), lesson_in, topic, child_summaries Concept page (4.2)
LessonView concept_id, name, tier, predicted_share, lesson, check, questions, flashcards (answers withheld), evidence (fact → blocks, for chips) Concept page and session cards
StudyView today (TodayView), plan (SessionPlan), progress (ConceptProgress[]), lessons used by the plan, review items Today, session player, Progress

5.4 Lessons (lessons.py, concept-lesson-v2)

One record per concept on the level-1 path with at least 4 facts. A smaller concept folds into the nearest ancestor on the path that has a lesson and is covered there as a points entry.

Lesson: summary (≤ 40 words), why_it_matters (≤ 25), can_do (1-3 × ≤ 15), exam_angle (≤ 30), blocks (2-6), traps (0-3 {wrong ≤ 15, right ≤ 20}), memory_aid (≤ 20), connections (0-4 {concept, how ≤ 8}), best_page, folded.

Block Use it for Fields Card / page
explain an idea in prose, or an example body ≤ 60, example, shows Paragraph; "Example" tag
define a term to know exactly term, definition ≤ 30, not_to_confuse Term large, definition, "not to be confused with"
rule something that holds under conditions statement, conditions, exceptions Boxed statement, ✓ conditions, ⚠ exceptions
points testable facts 2-5 × {cue ≤ 8, answer ≤ 15} Card: tap a cue to reveal; page: all shown
steps a process or procedure 3-8 × {label, detail ≤ 18, then} Numbered flow with ↓; horizontal on wide pages
compare 2-4 things to tell apart columns, rows {aspect, cells} Table; a card per column on phones
tree kinds or parts root, nodes {label, parent, note} Nested list
timeline events in order events {when, label, detail} Dates in a gutter
formula an equation math (TeX), symbols, note KaTeX with a symbol legend
worked a problem solved step by step prompt, steps, answer Card: one step per tap
argument a claim, reasons and the case against claim, reasons, counter Claim, "Because", "But consider"
code an algorithm or syntax language, snippet ≤ 12 lines, note Numbered monospace
figure a slide that teaches better than words page, caption The slide image

PracticeSet: check (one choice question), questions (2-5; choice with four options each carrying a reason, or free with a model answer and a 2-5 point rubric when the exam format calls for it), flashcards (2-6 {front ≤ 20, back ≤ 25}). Item ids are <concept id>:check, :qN, :fN.

Rules enforced in code (normalize): citations must name the concept's own (or folded) facts (an unknown id is dropped; a part with no course citation is kept as labelled general knowledge); parts over their word limit by more than 25% are dropped; blocks must be complete for their type; options are shuffled (seeded by item id); claims about what exams emphasise are removed; filler step transitions ("then", "next") are cleared; connections name concepts on the map; a lesson needs at least two valid blocks and a check, or it is repaired once and otherwise skipped.

5.5 Study state (study_views.py)

Type Fields Meaning
Attempt item_id, answer, correct or rating (again, hard, good), timestamp One answer; owners' are stored per set, visitors' in their browser
review state (per item) stability (days), due, retrievability, last_correct Simplified FSRS: R(t) = (1 + t / 9S)^-1, due when R falls to 0.9; good × 2.5, hard × 1.3, again × 0.3. Or a fixed ladder 1, 3, 7, 14, 30 days
ConceptProgress state (secure, started, new, none), items, secure_items, retrievability, next_due, has_lesson, lesson_in Secure = every item last answered right and recall ≥ 90% now
TodayView exam_date, days_until, level, level_concepts, level_share, secured_share (Σ share × recall), secure_concepts, due_reviews, next_concepts, weakest Today
SessionPlan id, minutes, steps[{kind, concept_id, item_id, block}], concepts, reviews The session player
ConceptMark concept id, understood "I understand this" for concepts with nothing to practise

Grading: POST /api/sets/<id>/attempts (owner, stored) or POST /api/shared/<token>/attempts (visitor, not stored) returns correct and a reveal (the right option, each option's reason, the explanation and citations; or the model answer and rubric). Asking to see a free-response model answer is not recorded as an answer.

5.6 Course plan (course_plan.py, course-plan-v1)

Built after the concept graph by create_course_plan; every part is tagged with the concepts it teaches or tests, and with its source (course, citing fact ids, or general, labelled General knowledge).

Type Fields Drawn as
Lecture overview (per PDF) title, summary (the lecture's story), before, ideas[] (title, text), terms[] (term, meaning), after Follow along, step Overview
Slide notes (per page) headline, skip, sections[] (title, text), visual (figure walkthrough), deeper, concept_ids, questions[], cards[] Follow along, one step per slide; questions and cards under Test yourself
Module plan modules[] (key, title, goal, concept_ids in teaching order); every concept in exactly one module Learn, the module list
Module intro, sections[] (title, concept_ids, text, slides[] {page, note}, example {source, title, problem, steps[], answer}, check[]), practice[], traps[], summary[], cards[] Learn, a module; checks and practice under Test yourself
Question format (choice · multi · numeric · short · order · match · free), prompt, options / pairs / accepted value and tolerance / rubric, solution, hint, level, concept_ids One component per format; the key stays on the server until an answer is sent

Depth: a section's level is its most central concept's tier (core 1, supporting 2, detail 3). A student at depth d sees the sections, questions, traps and cards whose concepts include one at level ≤ d, and the modules that have any; minutes are estimated per depth.

5.7 Editions and revisions (editions.py)

Type Fields Drawn as
Edition number, graph_id, plan (modules), excluded concepts, requests[] (target, text: standing instructions), record ids of every module, slide note and lecture overview it shows, changes[] (part, added · updated · removed, why: material · request), cost What Learn and Follow along show; What's new and Updated marks from changes; Earlier editions
Revision status (proposing · proposed · applying · applied · failed · discarded), requests[] (text, target, declined[]), material (lectures added, concepts added and removed, lectures that failed to reach the map, new modules), edits[] (action, target, instruction, concept_ids, title, other, summary, selected), estimate (USD; modules, slides, overviews to write; changes) The Update this guide panel

Questions are identified by a hash of their text, so a question an update keeps word for word keeps the answers given to it; answers to replaced questions still grade and still count toward their concepts.

5.8 A course's study records (api.py, together.py, narration.py, start.py)

Type Where Fields Drawn as
Exam set exams id, name, date, lectures (source ids; empty = everything), active The exam picker; scope of Test, Cram and Progress; the countdown
Session sessions kind (session · quiz · exam · cram · test), label, exam_id, test_id, answered, right, minutes, concepts {id: right, total}, member_id, finished_at Last time, Progress → Sessions, a test's results
Member members id, name, visible, key_hash (a secret key kept in the member's browser, sent as X-Cramfast-Member), joined_at, last_active People, Together
Member answer member_attempts item_id, member_id, correct, concept_ids, timestamp A member's report; group progress
Test tests id, title, question_ids, minutes, created_at Test (&test=), People → Tests sent
Graded work graded_work title, kind, items (label, summary, concept_ids, earned, possible, correct, feedback), totals Progress → marked work
Narration narrations (by record id) scripts {overview | slide | intro | section id | traps | summary: text} Listen
Start set start status (searching · proposed · fetching · building · failed), course (what the student said), search (sources, topics, notes), chosen, added, failed Start review

Mastery from answers (the same rule on the server and in the browser): per concept, answers and right answers to the guide's questions; secure = at least two answers, 80% right, the latest right. Readiness = the predicted exam share of secure concepts over the share of the concepts in scope.

6. Practice from the study bundle

The study bundle (per lecture) keeps its own verified practice: Question (four options with explanations, cognitive level, citations) and Flashcard, linked to concepts through item_concepts. The Practice tab runs these; their attempts count towards progress alongside lesson practice.

7. Settings

Setting Scope Options (default first) Stored
Map arrangement account As taught · By topic · By objective server (owner); visitors get the defaults
Lesson style account Exam first · Study notes (orders the lesson head) server
Session length account 25 · 10 · 45 min server
Review schedule account Spaced · Fixed ladder · Off server
New concepts before a quiz account 3 · 1 · 5 server
Reading font, theme account Sans · Serif; System · Light · Dark server
Study level member Core · + Supporting · Everything browser
Exam details set (owner) date, format, questions, cumulative server
Goals person in a course exam, learn over time, keep up, teach, each with follow-ups (2.1) server (owner, PUT /goals); browser (visitors and members), the owner's as defaults
Emphasis set (owner) per concept: as predicted · core · supporting · detail · leave it out server (PUT /emphasis)
Help for the share link set (owner) daily US$ for members' ask / explain / more questions; 0 (off) by default server (PUT /help-budget); People shows What people asked
  • Share links (POST /api/sets/<id>/share, /share-links): read-only, no account. A link can pin a UI version and study-page mode for courses built before v4.
  • Compare (/cramfast/compare/?a=<token>&b=<token>&view=…): two links side by side, one view switch for both (Today, Learn, Follow along, Test, Cram, Map, Progress, Together, Guide), an A/B toggle on phones; labels never name the model. Example pairs loads the demo courses worth comparing (Full vs Lightweight for algorithms and immunology, built at once vs grown over time, found online vs general knowledge, two researchers' papers, one lecture vs six); choosing one says what is compared, so a blind comparison is still made by pasting links. Keep the trailing slash.
  • Feedback (POST/GET /api/sets/<id>/feedback): a stored, attributed record with form (flag, comment, override, badge), target (concept, topic, fact, block, item, guide), kind (wrong, unsupported, unclear, missing, too_long, pin_core, exclude, merge_into, move_under, rename, reorder, note, reviewed), note and value. For now feedback is stored and listed under Review; nothing acts on it.

9. Quality method

Unit tests (test_lessons.py, test_graph_pipeline.py, …) use a fake model and check contracts only: citations, limits, invariants, the planner's order and the review schedule. Quality is judged on real builds: an independent model reviewer reads each lesson against the exact facts it may use, lists every unsupported statement and scores faithfulness, exam value, clarity and structure (1-5). Latest results (run 3): immunology 3.83 / 3.58 / 4.25 / 3.67, algorithms 3.83 / 2.83 / 4.0 / 3.83, with every marked answer correct. Position bias and exam claims are fixed; unsupported details in option reasons and the low exam value of recall-style lessons on a problem-solving course are not, and need a per-statement entailment check and subject-aware block and practice rules. See PIPELINE_DESIGN.md, "Quality method and results".

10. Not built yet

  • The on-demand steps (ask, explain, more questions, gap cards, checking brought items) have not yet been judged on real courses the way lessons have (section 9); transcription of raw audio and video is tested with a stand-in model only (captions were read live).
  • Opening creation to everyone (accounts with sign-in, an allowance per account): decisions in 2.13.
  • Accounts: a member moves between devices with one-time links (D5), not a sign-in; /r/ review links; feedback taking effect. (No editor role: each guide has one owner, 2.8.)
  • Voice answers in Listen (it reads, the student taps); audio files (it uses the browser's voice).
  • Graded work feeding the mastery estimate (it is compared, not merged).
  • Fact-to-fact links (same as, elaborates, contradicts) and page roles with figure regions.
  • Lessons beyond Level 1; ExamOutcome to calibrate the prediction.

11. Earlier versions

Version What it was Still served for
UI 1 (Original) Concept pages as cited claims grouped by kind Share links pinned to UI 1
UI 2 (Slides and diagrams) Study pages (study_pages.py): summary, exam angle, worked question, key points, one diagram, traps, connections; modes exam-4, exam-5, notes-5 and older Graphs built before v4 and their share links
concept-graph-v2 / v3 Medical vocabulary (v2); general vocabulary without roles (v3) Read through upgrade_graph