ExamForge
Un programma che legge i materiali di un corso (PDF, markdown, testo) e genera domande d'esame originali, con soluzione e teoria. È un progetto personale e presto sarà open source.
Perché l'ho fatto
Per prepararsi a un esame universitario servono domande nuove, costruite sul proprio materiale e non su banche di quiz generiche. Il primo a usarlo sono stato io, per un esame di statistica. Non ho notizie di altri utenti.
È nato come programma da riga di comando e poi è cresciuto in tre parti: un'app web, un'app desktop con lo stesso frontend e alcuni strumenti per lo studio personale.

Come funziona
Il programma legge i file del corso in due passaggi: una chiamata a un modello AI per ogni file per estrarre gli argomenti, poi un'unione che elimina i doppioni. Da quell'indice genera l'esame con il numero di domande, la difficoltà e gli argomenti scelti. Ogni domanda viene controllata dall'AI e rigenerata se incoerente. Le formule sono rese con KaTeX.
Per i modelli si può usare un servizio esterno (OpenRouter) oppure, sul desktop, gli strumenti da riga di comando di Claude o Codex già installati, senza bisogno di una chiave.
Scelte tecniche
- Backend in Rust (Axum, sqlx) con PostgreSQL; frontend React e TypeScript condiviso tra web e desktop (Tauri).
- Accesso con hash delle password (Argon2), token di breve durata con rinnovo, limiti di richieste per indirizzo e verifica dell'email. Il piano gratuito è limitato dal server.
- Le formule tra dollari vengono messe da parte prima del markdown e riscritte con KaTeX dopo, perché altrimenti il markdown le rovina.
- Il ciclo di generazione delle domande è scritto due volte, per web e desktop: l'ho lasciato così per ora.
Strumenti per lo studio
Nello stesso repository ci sono tre strumenti nati dall'uso personale. Il primo trasforma slide e appunti in pagine di studio in HTML con formule, schemi, quiz e trappole, con PDF per Kindle, tablet e A4 ed EPUB. Il secondo è una pagina vocale: il telefono ascolta e legge, mentre la risposta viene generata sul server di casa. Il terzo produce audio-lezioni con una sintesi della mia voce, da ascoltare correndo.
Limiti onesti
Gira sul mio server di casa e non ha ancora un servizio pubblico né una demo. Mancano la correzione delle risposte scritte, la difficoltà adattiva e un'interfaccia per più utenti che collaborano. Il codice di web e desktop non ha test automatici: lo controllo con la compilazione e con l'uso. Sono circa 72 commit, 5.900 righe di Rust e 10.200 tra TypeScript e CSS; ho lavorato da solo, con Claude Code.
Stack: Rust (Axum, sqlx, Tauri), PostgreSQL, React, Vite, TypeScript, KaTeX, Docker, Nginx, Node.js.


