We use our own product to show how we build larger systems with AI inside. A student works through a real Matura (Polish secondary school leaving exam) paper, a language model grades the open-ended answers against the official scoring rules, and the platform turns that into a map of what the student doesn't know yet.
Client
PRODAUT's own product
Industry
EdTech
Services
Applications, AI
Duration
under construction
Year
2026
- Before
all a regular app can check automatically
multiple choice
scope
how open-ended answers are graded today
by hand
scope
all the feedback a student gets
score %
scope
Situation
Exam-prep apps handle closed questions fine, because there it's enough to compare a letter. The trouble starts with open-ended tasks, and those are what decide a biology score. To check them, someone has to read the student's answer and compare it with the scoring rules.
The result: the student completes a paper, gets a percentage and has no idea why they lost a point. The teacher knows, but can't check thirty papers a week.
Why it's hard
A language model asked outright to grade an answer is too polite. It awards a point for an answer that sounds reasonable even when it lacks an element the key requires. For learning, that's worse than no grade at all, because it reinforces the mistake.
The second difficulty is repeatability. The same answer must get the same score today and a week from now, otherwise progress can't be measured.
What we're building
The system is a modular monolith in Symfony with API Platform and a React front end. Instead of one big application we have six domain modules with separate boundaries: content and papers, solving sessions, grading, student progress, accounts, payments.
Grading is a separate module precisely because it's the riskiest part. It can be swapped out, or a second model added for comparison, without touching the rest.
papers and tasks as data, not as PDFs to scroll through,
scoring rules stored with the task, just like in the official key,
a grade broken down into key elements, not a single number,
every attempt saved, so progress is computed from history rather than the latest try.
How grading works
The model isn't asked "how many points". It gets the task, the student's answer and the itemized key, and its job is to indicate which key elements appear in the answer and which are missing. The points are counted by code, not by the model.
That's how the student gets a sentence like "you have the mechanism, you're missing the effect on the organism" instead of a bare score. That is the whole value of this platform.
What we keep an eye on
Before grading goes out to students, we test it on answers with a known score and compare it with a human grader. As long as they diverge, we don't show it as a grade, only as a hint.
We take the same approach with clients. AI gets a narrow task with a clear key, and the decision is computed by code that can be verified.
Data flow
01Student works through a paper
02Answers go to the grading module
03Model compares against the key
04Code counts the points
05Knowledge-gap map and the next review
Project goal
tasks checked without a teacher
open-ended
goal
feedback instead of a bare percentage
what's missing
goal
progress computed from every attempt
from history
goal
- What's next
First, grading that agrees with a human closely enough to be shown as a grade, then a first test group of students. Only after that: accounts, payments and a public release.
- Stack
SYMFONY 8
API PLATFORM
REACT 19
POSTGRESQL
CLAUDE API
- Have a similar process?
Tell us what eats your hours.
We'll get back within 4 business hours with questions, or straight away with a proposal for how to wire it up. No strings attached.
Allegro listings with margin calculated before publishing
A React + Symfony application straight on the Allegro REST API, no middleman. A custom listing workflow built on a variant catalog and a profitability module.