EAReady: Making Exam Readiness Visible
TL;DR
Shipped EAReady, a weekly self-reflection and class-insight app for senior Queensland students, and added a Trial Exam Builder that assembles a practice paper from real QCAA past-paper questions.
Benjamin Hyde
Education Leader & AI Builder
This week I shipped EAReady, a weekly self-reflection and class-insight app for senior Queensland students heading into external assessment. It is live at eaready.com.au and it started as a Digital Solutions pilot for my own Year 12 cohort.
The problem it solves is one I have had every single year. Ask a Year 12 class how ready they are for the external exam and most of them will tell you they are fine. Then the exam arrives and it turns out "fine" meant they could recall the content but had never applied it to unfamiliar stimulus under time pressure. By the time that gap shows up in a result, it is far too late to teach into it.
EAReady tries to surface that gap weeks earlier, in a form both the student and the teacher can act on.
Readiness is a calculation, not a vibe
Students rate themselves against the visible reflection points for their subject on a behaviourally anchored 0 to 4 scale. Not "how do you feel about this", but a described behaviour at each level, so a 2 means roughly the same thing for every student in the room.
Each point is rated across three separate signals: knowledge and explanation, application and transfer to unfamiliar stimulus, and confidence under exam conditions.
The readiness score is 40% knowledge and 60% application. Confidence is deliberately excluded from that calculation and kept as a separate diagnostic. That single decision does most of the work in the app. A confident student who cannot transfer their knowledge does not get to inflate their own score, and the gap between their confidence and their readiness becomes a useful signal in its own right.
Students can also log study activity, the strongest evidence they actually have, and a short next-step note. Partial baselines save, so a student can start a reflection, run out of lesson, and come back to it.
What the teacher actually sees
The teacher dashboard is the half of the product that changes how a lesson gets planned. It shows class medians per module, response and evidence coverage, confidence distributions, and a student-by-content heatmap.
The distribution view was the piece I kept iterating on. A class median of 3.0 hides a lot. Seeing the spread, and seeing which students sit at the bottom of it, is the difference between "the class is mostly fine" and "six students cannot do test design".
Unsure flags are counted separately, so a teacher can tell the difference between a genuine low rating and a student who does not yet know enough to rate themselves at all.
From there the dashboard suggests a next teaching move rather than leaving the interpretation to a teacher at 10pm on a Sunday.
From one subject to twenty-eight
EAReady began as a single Digital Solutions pilot. It now covers 28 senior Queensland subjects across every learning area: the three mathematics pathways, the sciences, humanities and social sciences, English, the arts, technologies, and health and physical education.
Most subjects also come with mapped practice drawn from past examination papers published by the QCAA. The catalogue currently sits at 3,121 questions across 26 subjects and the 2020 to 2025 papers, split into multiple choice, short response and extended response.
Adding a subject is deliberately additive. Existing reflections stay valid, there is no schema change, and teachers simply pick the new subject when they create a class.
New since release: the Trial Exam Builder
The biggest addition since launch is a Trial Exam Builder for teachers, and it came from the most predictable request in the world: "can you make me a practice paper".
Teachers filter the past-paper catalogue by year, paper and question type, search by topic or keyword, and select individual questions. Selected questions land in an assembly panel where they can be reordered, and the header keeps a live count of questions, known marks and sections.
Then there is a cover sheet. Exam title, school, date, reading time, working time, and an option to include ruled response space for written questions. It is branded as an EAReady trial exam and explicitly labelled as not an official QCAA cover, which matters when the thing is about to be handed to a room full of students.
The part that took longest was fidelity. A short-response question about a data flow diagram is useless as plain text. EAReady renders selected questions from the original QCAA question book layouts, so formulas, diagrams and stimulus survive the trip, then generates a print-ready A4 paper that can be printed or saved as a PDF. Source documents come from a cache of approved official PDFs, so the app never impersonates a browser or tries to work around access controls on a cache miss.
Two bugs worth writing down
Two things went wrong after launch that are worth recording, because both were completely invisible until real students hit them.
The first: every single reflection save had been failing since launch. A foreign key on the reflections table pointed at a legacy cohorts table that nothing ever writes to, while the save path was actually writing the student's class id into that column. Every write hit a constraint error. The count of saved reflections sat at zero and I had not noticed, because the failure surfaced as a generic error rather than anything loud. Repointing the key at the classes table fixed it.
The second: a class tried to sign up and got locked out, and it looked like an IP rate limit doing its job. It was not. The app reads the client IP from a header the reverse proxy was not setting, so the runtime synthesised one from the connection instead, which meant every visitor to the entire site shared a single fake IP address. One class signing up at once locked out everybody. Passing the real client IP through fixed the actual bug. Raising the limits afterwards was just headroom.
The lesson from both is the same. Neither would have shown up in testing with one user. Both showed up within minutes of thirty.
Running in a real school
EAReady is now running with a full Year 12 cohort, across 39 classes and 33 teacher accounts, on school-managed accounts and class codes rather than students bringing their own logins.
Super admins create schools and site admins. School admins create classes, issue class codes, and manage teacher and student accounts. Teachers link to classes, choose which reflection modules are visible to each class, and can reset passwords for their own students. Students join with a class code and can be enrolled in more than one class.
None of that was the fun part of the build. It is the part that makes the difference between something a school can run and something only I can run.
What's next
Three subjects are still missing from the roster: Chinese, French and Industrial Technology. Each needs its reflection content mapped before it can be offered, because an unmapped subject would quietly fall back to the wrong content.
Beyond that, the exam builder is the thread I want to keep pulling. Saved exam templates, sharing a built paper with another teacher in the same subject, and feeding trial exam results back into the readiness picture so a student's self-rating can be checked against how they actually performed.
Screens




Build Notes
Approach
Start from the gap between what students think they know and what they can apply, then make that gap visible every week to both the student and the teacher. Build the school access model properly so it can run as a whole-cohort tool rather than a demo.
Tools Used
Next.js, TypeScript, Cloudflare Workers and D1, Docker, Caddy, Claude Code for the build, and past examination papers published by the QCAA for the practice catalogue
What Worked
Separating confidence from readiness. Keeping it out of the score turned a soft self-report into a diagnostic, and the gap between a student's confidence and their application became one of the most useful signals on the teacher dashboard. Behaviour-anchored descriptors also made ratings comparable between students instead of being 28 personal scales.
What Failed
Two launch bugs that only appeared under real load. Every reflection save was silently failing on a foreign key pointed at a dead legacy table, and IP rate limiting was bucketing the whole site under one address because the reverse proxy was not passing the client IP through. The reflections students typed before the fix were unrecoverable, which is the part that still annoys me.
What's Next
Chinese, French and Industrial Technology content so those classes can be created. Then saved exam templates, sharing built papers between teachers in the same subject, and feeding trial exam results back into the readiness picture.