You write the questions (or reuse old exam questions), plus, for each question, a model answer that the students never see. They write a draft, get AI feedback measured against it, and revise, as many times as they want. This helps students embed both detail and concepts, and "learn the shape of a good answer."
The loop
The same four steps repeat every time a student revises, and feedback gets more specific with each attempt.
A plain text box. Your model answer is never sent to their browser.
Checked against your model answer, plus any marking guidance you gave it.
Directional hints across five dimensions, never a quote from your answer.
No attempt limit. Every past try stays visible in the revision history.
Feedback
Each one gets its own card with a status chip (Needs Work, Good, or Correct) so a student can see at a glance where to focus next.
Which required parts of the question are present, partial, or missing.
Where the reasoning needs to go further than a surface-level answer.
How the argument's organisation could improve.
Factual errors or misconceptions, flagged directly.
From attempt two onward: what improved since last time.
Alongside the cards, every submission gets a qualitative score ring. If you marked point values in your model answer (like [3] at the end of a paragraph), a real point-based score is computed too and is what shows up in your analytics.
Example
Two first-attempt drafts answering the same practice question, and the feedback each one gets back. Below the cards is the per-dimension score section every submission gets. Its bars are always qualitative, the same status chips as the cards above; the ring and point total only appear if the model answer carries point values, so both states are shown below.
Explain how natural selection can lead to antibiotic resistance in a bacterial population. Use a specific example.
Bacteria become resistant to antibiotics because they get used to the drug over time. When you take antibiotics again and again, the bacteria adapt and the drug stops working as well. This is a type of evolution.
A bacterial population contains random genetic variation, including occasional mutations that reduce a cell's sensitivity to an antibiotic. When the antibiotic is applied, susceptible cells die while resistant cells survive and reproduce, so the next generation contains a higher proportion of resistant bacteria than before. Repeated use selects for resistance again each generation, until resistant strains dominate. MRSA arose this way: mutations that altered methicillin's target protein let some Staphylococcus aureus cells survive treatment, and their descendants now make up a large share of infections in some hospitals.
No Progress card here since both are first attempts. From a second attempt onward, a fifth card compares the new draft to the one before it.
For instructors
Create a class and get a student code to share and a separate instructor code. Anyone who joins with the instructor code becomes a full co-instructor for that class, with the same access to student work as you have.
Each question has its own model answer, kept server-side only and never sent to a student's browser, in the page source or the network traffic.
Mark a paragraph [3] and it becomes a scored section. Leave the marks out for feedback with no numeric grade at all.
Tell the AI how to award partial credit or what to treat as a misconception. An "advise on this" tool checks your wording against how scoring actually works before you save.
Sessions, average attempts, and average score per question, with a score distribution across the class.
Every question and class page has a CSV and JSON export of attempts, scores, and feedback for your own records.
This is what produced the question, model answer, and optional scoring used in the student example above.
Privacy
A student reaches a question with just your class code. Their browser is given a random token so their own attempts stay together and their instructor can see them, but that token carries no identity, and nothing else about the student is collected or stored.
They can sign out from the same browser at any time, which ends that session without deleting the work already on record.
If you'd rather students keep the same identity across devices and sessions, you can enable named accounts for your deployment. Students then register with a username, email, and password, and their history follows their account instead of a browser token.
This is a setting for the whole deployment, not per class, and most trials run anonymous-only.
Scope
Not for term papers or open-ended essays. It is built around exam-style questions that ask a student to explain a concept with examples, each with a known model answer to check against, not longer independent research or argumentative writing with no single right shape.
Not a real exam. It automates formative feedback for practice, not summative grading of a real assessment.
Not a writing-skills tutor. It is built to help a student learn the shape of a good answer to a specific question, through repetition, not to teach writing craft in general.