-
-
After fixing line 5, line 6 is flagged next: it checks your lines, not an answer key.
-
Every line fixed: "No mistakes found."
-
Your photo beside what it read, so you can fix any misread line before checking.
-
The first wrong line gets a red-pen mark and a hint question, never the answer.
-
Not maths? It says so honestly instead of guessing.
Inspiration
I practise a lot of maths problems. When my answer comes out wrong, I usually recheck everything from the top, again and again. Sometimes I try examples and they all seem to work, and that teaches me nothing. When I ask an AI tool, it re-solves the problem and hands me its solution. I didn't want the right answer yet. I wanted to know where my reasoning broke.
What it does
You upload a photo of your handwritten working. Correct Me:
- reads it line by line and shows you what it read next to your photo, so you can fix any misread line before checking
- marks the first line where your reasoning breaks, with a short note and a hint question, but never the corrected line or the final answer
- greys out the lines after the mistake, because they build on it
- re-checks from your own lines after you fix something, so if line 6 still carries the old mistake, it flags line 6 next
- says "unsure" when a line could be read two ways (like sin x²) instead of confidently guessing
- tells you honestly when a photo isn't maths at all
How I built it
I planned it with the Devpost Learn skill pack (scope → PRD → spec → build in small slices), using Claude Code as my coding agent. All the planning documents are in the repo under devpost/.
It's a plain HTML/CSS/JS page with a small Node.js + Express server, so the API key never reaches the browser. It makes two AI calls on Groq: a vision model (Qwen 3.8) reads the handwriting, and a reasoning model (gpt-oss-120b) judges each line. The model only judges. My code enforces the rules: only the first wrong line counts, low confidence becomes "unsure", and a leak guard blocks any hint that contains the answer.
Challenges
- The reader misread my ∫ as "f", and the checker then blamed me for the mistake. Now any line the reader isn't sure about has to be confirmed before checking, and if one of those lines still comes back wrong, the app says "I might have misread this line" instead of a red cross.
- On a genuinely ambiguous line, the checker said "wrong" and was 96% confident. Asking it to say "unsure" didn't work, so the decision moved into code.
- The model's hidden answers came back in LaTeX, which slipped past my leak guard until I normalised LaTeX too.
- A photo of a T-shirt kept the app scanning for about two minutes instead of saying "this isn't maths". I added a 20-second limit on reading the photo and an honest "this doesn't look like a maths solution" message.
What I learned
I wanted to get better at evaluating AI output. The biggest lesson: an AI can be very confident and still be wrong. Testing with mistakes I planted myself, reading the raw output, and moving any rule the model can't be trusted with into tested code made the app far more honest than better prompts alone.
What's next
Coding problems (where mistakes are spread over several lines), re-uploading a corrected photo, more hints when you're still stuck, and a history of the kinds of mistakes you make most.
Built With
- claude-code
- css
- express.js
- gpt-oss
- groq
- html
- javascript
- node.js
- qwen
Log in or sign up for Devpost to join the conversation.