Making flashcards is the part everyone skips. You have three exams in nine days, a syllabus you read once in week one, and a folder of lecture slides you have not opened since. Building sixty cards by hand is a real afternoon of work, and it is an afternoon you are trying to spend actually studying. So the cards never get made, and you reread highlighted paragraphs instead, which feels productive and is not.
Semora is already holding the material. When you scanned the syllabus, the parser kept a structured list of every topic and item it found. If you uploaded lecture slides or a reading for the AI Tutor, those files are attached to the same course. Flashcard generation reads exactly those two sources. That is the point of putting flashcards inside a syllabus app rather than beside one: there is nothing new to type, upload, or re-organize before you can start.
This page walks through what actually happens when you tap Generate with AI, what the scheduler does to each card when you grade it, and where the feature stops. Real numbers, real button labels, real error messages.
How a deck gets generated, step by step
Generation is grounded in one course, so it starts from one course. Open a course, scroll to the Study tools card, and tap the Flashcards row. That row hands the course along, and the course is what makes the Generate with AI button appear at the top of your deck list. Reach Flashcards from the Me tab or the web sidebar instead and you get your decks without that button, because no course is attached yet and there is nothing to ground cards in.
Tap Generate with AI and the button expands into a panel with two decisions and one confirm. First, Focus on: whole course, or one specific item you are already tracking. Second, Study material: an optional PDF or photo to add. The confirm button then states what it is about to do in plain words, either Generate for whole course or Generate for Midterm 2, using the item's real title.
Behind that tap, the request goes to a server function that checks three things before spending anything: that your session is valid, that your account is Pro, and that the course actually belongs to you. Only then does it assemble the material and call the model. The Pro check happens on the server, not just in the app, because every generation is a paid model request. If that check itself errors, the function returns a temporary failure rather than treating you as free — a paying account never gets demoted by a database blip.
- The most recent parse run for that course: up to 60 extracted syllabus items, each as its title and type, trimmed to 8,000 characters.
- Up to the 10 most recently uploaded note files for that course, sharing a combined 24,000-character budget, each labeled with its filename.
- When you scoped the deck to one item, a "covered so far" list built from the course's other tasks — up to 60 of them, ordered by date.
- Nothing else. Class meeting times and office hours are never sent, because they are not quizzable.
Focus the deck on the whole course or one tracked exam
The Focus on row is a set of chips. The first is Whole course and it is selected by default. After it comes one chip for every exam, quiz, assignment, and reading Semora is already tracking for that course, labeled with its type and title, like "Exam: Midterm 2" or "Reading: Chapter 7". Projects and items typed as Other are deliberately left out — a project is usually something you build rather than something you recall, and Other is too vague to be a useful focus.
Those chips come from your live tasks, not from the original scan output. That distinction matters more than it sounds. If the scan misread a date and you fixed it, or you renamed "Exam 2" to something you actually recognize, the chip shows your corrected version, and the server uses your corrected due date.
Picking a specific item does something more careful than adding "focus on the midterm" to a prompt. The server looks at every other task in that course and splits them by real dates: anything already completed, or due on or before your target's due date, goes into a covered-so-far list that gets sent as evidence of what has actually been assigned and taught. Anything due strictly after your target is dropped from the covered-so-far list entirely, so the model's evidence of what has been taught stops at your exam date. The syllabus topic list itself is not date-filtered — most syllabus topics carry no date to filter on — so the prompt additionally instructs the model not to generate cards for material that would only be relevant later in the course. If your target has no due date, only completed work counts as covered, which is the conservative read. If nothing qualifies at all, the prompt says so and tells the model to favor foundational, early material rather than guessing.
If a course has no exams, quizzes, assignments, or readings tracked yet, the panel says exactly that and suggests adding one so you can focus generation on it. Whole course still works.
Attach the review packet your professor handed out
Under Study material there is a dashed row that reads "Add a PDF or photo (e.g. the teacher's review packet)". Tapping it opens the file picker, restricted to PDFs and images. Once something is attached, the row updates to a count — "2 files added — add another", so you can stack a study guide, a set of slides, and a photo of the board before generating.
The file goes to a private storage bucket, filed under your own user ID, with the filename sanitized for the path. Nothing is parsed on your phone. The first time a generation or tutor request needs that file, the server reads it, extracts all readable text from it while preserving structure, and caches the result on the note record. The second generation from the same packet costs nothing extra to read. Files larger than 6 MB are skipped for inline extraction rather than blocking your request.
These are the same course notes the AI Tutor uses. Upload a packet here and the tutor can answer from it; upload slides in the tutor and flashcard generation picks them up. There is one note library per course, not two.
What the generator writes, and what it leaves out
The generation prompt is specific about what counts as a flashcard. It asks for the academic content — concepts, terms, definitions, formulas, key facts drawn from the syllabus topics and the note text. It explicitly rules out administrative and logistics material: office hours, grading policy, late-work rules, class meeting times. Those are the things a naive "make cards from my syllabus" tool fills a deck with, and they are worth nothing on an exam.
The shape is fixed too. The front is a short question or a term. The back is a concise answer or definition, one to three sentences. The target is between 10 and 20 cards, with an instruction that fewer good cards beat padding, and that if the material genuinely does not support that many, it should generate fewer rather than invent filler.
What comes back is validated before anything is saved. Both faces are trimmed, each capped at 300 characters. Any entry missing a front or a back is dropped instead of failing the batch — if fourteen of sixteen cards came back clean, you get the fourteen. No more than 30 cards are inserted from a single run. When there is not a single usable card, nothing is saved and you are told to try again or add more material first.
The deck itself is created on the spot and named for what you asked for: "Organic Chemistry I — Midterm 2" when scoped to an item, or "Organic Chemistry I — AI Generated" for a whole-course run. The app drops you straight into the new deck when it is done.
The schedule: what Again, Hard, Good, and Easy actually do
Every card carries four numbers: an ease factor, an interval in days, a due date, and a count of consecutive successes. A brand-new card starts at ease 2.5, interval 0, due now, zero reps, so anything you create or generate is due in your very next session, with no waiting.
When you grade a revealed card, Semora runs a compact SM-2 variant and writes the next state. The four buttons are not cosmetic; each one moves ease and interval differently.
Ease is clamped at 1.3, the SM-2 floor, both in the scheduler and by a constraint in the database, so a bad week of Again and Hard cannot drive a card into a permanent loop. Intervals of a day or more are rounded to whole days so due dates stay stable and predictable; the ten-minute relapse interval is deliberately left un-rounded so a card you missed genuinely comes back soon rather than tomorrow.
In practice, a card you keep getting right goes 1 day, then 6 days, then 15, then about 38, then roughly three months. A card you keep missing stays in front of you.
- Again: ease drops by 0.20, the consecutive-success count resets to zero, and the card is due again in about ten minutes instead of tomorrow.
- Hard: ease drops by 0.15. A brand-new card graduates to 1 day; an established card gets its current interval multiplied by 1.2 instead of by its full ease.
- Good: the standard ladder. First success is 1 day, second success is 6 days, and after that the interval is multiplied by the card's own ease.
- Easy: ease rises by 0.15, and the interval is multiplied by that ease and then by a further 1.3 bonus. A brand-new card graded Easy jumps straight to 6 days.
A study session, start to finish
Your deck list shows every deck grouped under its course, with the course's own icon and color, and an Uncategorized group at the bottom for decks not tied to a course. Each row shows the total card count, plus a badge with the number due right now when anything is.
Open a deck and the top button reads either "Study 12 due" or, when nothing is ready, a flat "Nothing due right now" that cannot be tapped. That second state is the feature working, not failing — spaced repetition means some days there is nothing to do in a deck.
Start a session and the due queue is snapshotted at that moment. Grading a card pushes its due date into the future, and without the snapshot the list would reshuffle under you mid-session. A counter shows your position, like 4 / 12, with an Exit link beside it. Tap the card or Show Answer to reveal the back, then pick one of the four grades. When the queue runs out you get a completion screen with the number of cards you reviewed.
Grades are persisted in the background so the next card appears instantly. If a write fails — bad signal on the bus, for instance — the card simply stays due for your next session. Nothing in the session depends on the round trip completing.
Cards you write yourself
Generation is optional. New Deck creates an empty deck with a title of up to 80 characters, scoped to the course you came from or left uncategorized if you opened Flashcards on its own. Inside a deck, Add Card gives you two multi-line fields, front and back, and both are required — a card with a blank side is rejected in the app and again by the database.
Every card behaves identically regardless of where it came from. Tap any card in the list to edit its front and back. The trash icon deletes one card after a confirmation. Delete Deck removes the deck and all of its cards together, also after a confirmation. A card you typed and a card the model wrote share the same scheduling fields, so a deck can be half generated and half hand-written with no seam between them.
One difference worth knowing: the 300-character cap per side applies to generated cards, as a defensive clamp on model output. Cards you type yourself are not truncated.
How flashcards connect to the rest of Semora
Flashcards are downstream of the scanner. The syllabus you scanned is the grounding source, the tasks Semora extracted become the focus chips, and the notes you attached feed both this and the AI Tutor. Delete a course and its decks are not destroyed — they detach and move to Uncategorized, keeping every card and every review schedule intact. Decks also ignore semester filters on purpose, so last term's deck is still there when the final rolls around.
Flashcards are part of Pro, at $3.99 per month or $19.99 per year, which works out to about $1.67 a month on the annual plan. Pro is purchased in the iOS app and the entitlement applies to your whole account, including the web app — there is no separate web checkout. Free accounts get a genuinely usable core: 5 syllabus scans per calendar month, up to 4 courses within one semester, one semester total, full deadline and task tracking, grade tracking with weighted averages, same-day reminders, and Course Spaces — joining a classmate's shared course is always free. Pro adds unlimited scans and courses, Canvas, Blackboard, and Moodle assignment import subject to school policy and platform configuration, hosting your own Course Space, Smart Plan, the Workload dashboard, Flashcards, the Focus timer, the AI Tutor, Grade Scale and Forecasting, calendar sync with .ics export, custom 1-day and 3-day reminders with quiet hours, Academic Risk alerts, Progress Insights, and Share and Streaks.
Who this is for, who it is not, and what happens when things break
This fits courses where the load is recall. Intro biology, anatomy, psychology terminology, organic chemistry reactions, language vocabulary, history dates, statute names in a law course — anywhere a semester's difficulty is partly the sheer volume of things you have to have memorized cold by a specific Thursday.
It fits less well where the work is producing something rather than retrieving it. Proof-heavy math, a studio course, a semester-long coding project, a seminar graded on three essays — Semora's Smart Plan and Workload dashboard serve those better than a card deck does. Concretely, cards are plain text on two sides. There is no image on a card, no rendered equations, no audio, no cloze deletion, no shared or public decks, and no import from another flashcard app.
Generation also has a hard prerequisite: something to read. If a course has neither a scanned syllabus nor an uploaded note, generation stops before it costs anything and tells you to scan the syllabus or upload notes first. That is the most common reason a generation does not run, and it is fixable in about a minute.
The other failure paths are specific and worth recognizing.
- The model comes back busy or rate-limited: Semora retries up to three times, then falls back to a second model, and only then tells you the AI is busy and to try again in a minute.
- The response gets truncated mid-batch: you are told it generated more than fits in one batch, and that a retry usually succeeds.
- The output is malformed: nothing is saved and you are simply asked to try again. Every card fails validation: nothing is saved either, and you are asked to try again or add more material first.
- A note file fails to extract: that file is skipped and generation continues with whatever else it has, rather than failing the whole run.
- The entitlement check hiccups: you get a temporary-unavailable response instead of being silently treated as a free user.