Axia
AP exam-prep platform: generates question banks from course PDFs, with full-length tests and context-aware grading.

Problem
Studying for an AP exam usually means practicing against generic question banks that don't quite match what a specific class covered - or a teacher's own PDFs and slides, which are real, aligned material but aren't in a form you can practice against: no bank, no grading, no diagrams rendered as questions.
System design & approach
The ingestion and generation pipeline turns raw course material into structured, AP-style question banks - including diagram-based formats, usually the hardest part to automate since a diagram question needs a real image, not just text. Grading is designed to retain the relevant exam and unit context rather than scoring a response cold, and that same pipeline is what the platform's practice tests, topic quizzes, and FRQ/MCQ drills sit on top of.
Challenges
Course PDFs aren't structured data - formatting, layout, and how diagrams are embedded vary a lot from teacher to teacher, and a question extracted with the wrong context (a graph mislabeled, a unit reference dropped) is worse than no question at all. Getting extraction reliable enough to trust, including for diagram-based questions, took real iteration. Grading had the same shape of problem: a correct-looking answer can still be wrong for the specific unit being tested, so grading needed to carry that context forward instead of treating each response as a standalone string to score.
My role
I own the ingestion, generation, and grading pipeline end to end - the layer that turns raw PDFs into a trustworthy question bank. The practice-test UI and broader app are built on top of it.
Retrospective
The extraction pipeline hits 95% accuracy turning raw course PDFs into usable question banks, across four distinct practice formats: full-length exams, topic quizzes, FRQ drills, and MCQ drills.
Turning unstructured source material into something reliably structured is a genuinely hard extraction problem, not just a parsing script - it's the kind of pipeline where accuracy has to be measured and pushed, not assumed. It also pushed me to think about grading as something that needs context as an explicit input, not an afterthought bolted onto a scoring function.
- Python
- Dart