ExamForge
A program that reads a course's material (PDF, markdown, text) and generates original exam questions with solutions and theory. It is a personal project, open source soon.
Why I built it
To prepare for a university exam you need new questions, tailored to your own material and not to generic quiz banks. I was the first to use it, for a statistics exam. I have no news of other users.
It started as a command-line program and grew into three parts: a web app, a desktop app with the same frontend, and a few tools for personal study.

How it works
The program reads the course files in two passes: one call to an AI model per file to extract the topics, then a merge that removes duplicates. From that index it generates the exam with the chosen number of questions, difficulty and topics. Each question is checked by the AI and regenerated if inconsistent. Formulas are rendered with KaTeX.
For the models you can use an external service (OpenRouter) or, on the desktop, the Claude or Codex command-line tools already installed, with no key needed.
Technical choices
- Rust backend (Axum, sqlx) with PostgreSQL; React and TypeScript frontend shared between web and desktop (Tauri).
- Sign-in with hashed passwords (Argon2), short-lived tokens with refresh, per-address rate limits and email verification. The free plan is limited by the server.
- Formulas between dollar signs are set aside before markdown and rewritten with KaTeX afterwards, because otherwise markdown mangles them.
- The question generation loop is written twice, for web and desktop: I have left it that way for now.
Study tools
The same repository holds three tools born from personal use. The first turns slides and notes into HTML study pages with formulas, diagrams, quizzes and pitfalls, with PDFs for Kindle, tablet and A4 and an EPUB. The second is a voice page: the phone listens and reads aloud, while the answer is generated on the home server. The third produces audio lessons with a synthetic version of my voice, to listen to while running.
Honest limits
It runs on my home server and has no public service or demo yet. Grading of written answers, adaptive difficulty and a multi-user collaborative interface are missing. The web and desktop code has no automated tests: I check it by compiling and by using it. It is about 72 commits, 5,900 lines of Rust and 10,200 of TypeScript and CSS; I worked alone, with Claude Code.
Stack: Rust (Axum, sqlx, Tauri), PostgreSQL, React, Vite, TypeScript, KaTeX, Docker, Nginx, Node.js.


