

How 11+ Connect Hub - the platform behind Focused Mentoring’s mock exams - got computer vision to read photographed paper answer sheets - two independent detection pipelines, the same sheet read more than once, and a system that would rather return nothing than invent an answer on a child’s exam paper. Plus the feature that turned the same discipline inward and audited the platform’sown 34,678-question bank.
A meaningful share of Focused Mentoring’s revenue comes from offline mock exams. Children sit real papers at booked physical centres across Orpington, Kent and Bexley, under timed conditions, exactly as they will in the actual 11-plus. That authenticity is the product - a mock exam taken on a laptop at the kitchen table is not the thing being sold.
It is also the bottleneck. Every child leaves behind a paper answer sheet carrying 35 to 75 bubble rows, and until those rows exist in the database, nothing downstream can run: no analytics, no report to the parent, no weak-area breakdown, no practice recommendation. A sitting of 200 children produces 200 sheets, each needing dozens of transcriptions, in the narrow window where parents are waiting for results. Manual entry is slow, error-prone, and scales linearly with the business - every new centre is more typing.
The authenticity is the product. It is also the reason 200 answer sheets have to become database rows before anyone can be told how their child did.
Rather than betting on one approach, we built two complete detection pipelines and use each where it is strong. The first is geometric: a calibrated template expresses every bubble position as a percentage of image width and height, so the layout survives resizing, and ink density is sampled inside each option box. It is free, fast and works entirely offline - but it assumes a known sheet, reasonably flat and reasonably lit. The second sends the photograph to a multimodal vision model with a long instructional prompt and gets structured JSON back. That one survives skew, shadow, phone-camera noise and, critically, layouts it has never seen, because identifying the sheet’s structure is part of what it is asked to do.
The decision that matters most is what happens when the system is unsure. The guiding instruction appears verbatim in two places in the vision prompt: an invented wrong answer is far worse than a null. That is the correct calibration for a child’s exam paper, and it is enforced structurally rather than merely requested - confidence bands are specified, anything below 0.5 returns nothing instead of a guess, and the default is explicitly "not detected". Three levels of fallback sit behind it, because the failure mode of this feature is a child’s exam result being wrong.
What runs in production, and what keeps each part of it honest.
A sheet of 35 to 75 rows is read from a phone photograph rather than transcribed by hand. The operator’s job changes from typing every row to confirming an overlay that shows what was detected, row by row, with a confidence on each.
Below the confidence threshold it returns nothing and flags the row. Multi-pass consensus catches the cases where the passes disagreed. Both routes end at a human, which is the only acceptable destination for an uncertain answer on a child’s exam paper.
34,678 questions across 331 subtopics, each carrying a human-written answer key and explanation. Roughly 1,647 had been flagged by users through support tickets - enough to know the problem was real, not enough to know its size. Reading them by hand was never a plan.
We modelled token counts from the real data and priced the full bank across seven models from three providers before committing to any of them. The result is a three-phase cascade: a free-tier sweep over the user-flagged questions first, then the whole bank on a low-cost model, then a premium second opinion on only the ~5% that came back wrong or ambiguous. Verification is cheap and adjudication is expensive, so you run the cheap model over everything and the expensive one over the disagreements - and an ongoing nightly review of newly added questions stays inside the free tier permanently.
No AI grades a child’s written work and no AI awards effort points. Marking is deterministic or human; rewards are computed by database triggers on real activity. For a product whose output is a child’s assessed progress and a parent’s purchasing decision, that is the right line to draw.
For low-volume admin work done a few times a week, the application generates a paste-ready prompt for a free external chatbot instead. Building API integrations there would add key management, error handling, cost and three more failure modes to automate work someone is already sitting in front of. Knowing which tasks should not be integrated is part of the job.
React and Supabase carry the platform. The question auditor runs server-side in a Supabase edge function and checks the caller holds an admin role before it does anything. Model selection is reasoned from the task rather than from a leaderboard - the vision path leads with a model strong on fine detail and fast enough that multi-pass consensus stays responsive, while the bulk auditor leads with models whose free-tier quota pools survive a run across tens of thousands of questions.
Answer sheets, delivery notes, inspection forms, meter readings - anywhere a person reads a page and types what it says into a system, and everything downstream waits for them to finish. Tell us what the paper looks like and how much of it there is, and we will tell you honestly which part a machine can read, and which part still needs a human to sign off.