Crosshire
Miscellaneous·Education·16 min read·27 July 2026

Three lessons, one engine.

The series argued that five problems in school sit on one limit, and that the useful move is to lift the copyable work — explaining, marking, being available — onto an engine. Here is that engine, running. Three lessons you can open now: place value for nine-year-olds, German capitalisation for the same nine-year-olds, and compound interest in two languages. Same screens, same marking, same worked answers. Nothing in the teaching or the marking knows it is about maths.

Half past seven, at the kitchen table

She has rounded 999.600 to the nearest thousand and written 999.700. The worksheet in front of her has no opinion about that. It will have one tomorrow, in red, hours after the moment the mistake was worth explaining.

The lesson that exists once per room

Down the road, a teacher is explaining place value again, to another child who has not got it yet, and she will explain it again next September. The explanation is good. It is also local — it exists in that room, in that hour, and nowhere else.

The reform series made an argument and put one thing behind it: a grading engine that already ran. Everything else — the lessons, the classroom, the model inside a school — was labelled vision, and that label was the point. This post moves one more piece across the line, and says so plainly rather than letting the old sentence quietly lapse. The lessons are built. Three of them are open right now, and they are not three products: they are one engine reading three files. Rather than describe it, here is what it does.

01What is live

Three lessons, and you can open them

Seven topics are registered today — five Klasse-4 maths chapters, one Klasse-4 German chapter, and one that belongs to no national curriculum at all. Three of them make the argument on their own, because of how little they have in common.

Hessen · Klasse 4 · Mathematik
Der Zahlenraum bis 1.000.000

Place value, reading and writing big numbers, comparing, rounding. Six sections, three interactive widgets, fifty-one things to answer. Taught in German, for nine-year-olds.

Live Open it →
Hessen · Klasse 4 · Deutsch
Nomen erkennen und großschreiben

Which words are naming words, and why German capitalises them. Seven sections, no widget at all, sixty things to answer — and not one of them a number: forty-one chosen from options, nineteen written out. Same nine-year-olds.

Live Open it →
No curriculum · older learners
Compound interest, from scratch

Money that earns on what it already earned. Four sections, one widget, thirty things to answer — and the only topic that ships as a full parallel in English and German, so the lesson-language switch has something to switch. It is also the demo topic: it carries one-click sample answers for presenting, which is why it sits outside the school browse tree.

Live Open it →
The line the series drewThe series said that before roughly age eleven none of this applies, and that the primary years are made more human, not less. That still holds, and these lessons are built to sit inside it rather than around it. Before roughly eleven, a real teacher teaches the class in a room, and these are what she teaches with. That is not a softening; it is a mode the engine ships with, and the one every link in this post opens in. In Klasse nothing is locked, the teacher sets the pace, and the lesson stays in one language for the whole room — read-aloud included. In Zuhause it is homework: the child picks their own language, sections unlock in order, and a wrong quick check sends them back to re-read before the answer appears. Nobody is handing a nine-year-old a machine instead of a teacher. The machine is what goes on the wall.
02The claim

A topic is a file, not a product

The three lessons above share every screen a child touches. The mode bar, the locked sections, the quick checks, the practice bank, the marking, the section jumps, the final test. None of it was written twice. A topic is a folder holding one JSON file per language, plus one entry in a lookup table, and the lookup key is the URL — which is why the taxonomy can be five segments deep for a German state chapter and two for compound interest without a new route file existing anywhere.

The German-language chapter is the load-bearing proof. It carries "subject": "deutsch" where its siblings carry "mathematik", it has no widget, and it needed no new lesson machinery — the sections, the checks, the marking and the final test all ran unchanged. The one thing it did add was a first-class photo route, because a nine-year-old learning capitalisation works on paper. A module built to teach place value taught capitalisation because nothing in it was ever about place value. That is not an architectural boast — it is the difference between a subject being a rewrite and a subject being a week of writing.

READ
The section
Prose at two reading levels, a worked ladder, and — where it helps — something the child can move.
CHECK
The gate
A short quick check closes each section. At home, the next one stays padlocked until it is right.
PRACTISE
Your turn
Practice questions that show their working, and guided ones that coach first and reveal after.
TEST
The final test
Section by section, three rounds, fresh questions each time — and every worked answer shown.
03One lesson

What a nine-year-old actually sees

Open the million-number chapter and the first thing on screen is not the lesson. It is a short strip of the words the chapter is about to use — die Stellenwerttafel, die Periode, der Vorgänger, nine of them — each German term with its meaning glossed in plain language. The policy is written into the interface itself: „Das deutsche Wort bleibt deutsch — das lernst du ja; die Bedeutung wird einfach erklärt.“ The word the teacher will say out loud, and the word the Klassenarbeit will use, stays the word the child meets.

EinfachAusführlich KlasseZuhause Kapitel vorlesen
Abschnitt 2 · Bausteine: zehn werden zu eins
Und eine Million?

Einfach — „Zehn Tausenderwürfel sind ein Zehntausender. Zehn davon ein Hunderttausender. Zehn davon eine Million. Eine Million ist sehr groß: Eine Million Sekunden sind fast 12 Tage. Eine Million Schritte sind etwa von Frankfurt bis Hamburg.“

Ausführlich — „Zehn Tausenderwürfel wären ein Zehntausender, zehn davon ein Hunderttausender, zehn davon eine Million. Das ist riesig: Eine Million Sekunden sind etwa 11½ Tage, und eine Million Schritte reichen ungefähr von Frankfurt bis Hamburg.“

Same paragraph, same file, two authored registers. Note what the simple one does to the number: etwa 11½ Tage becomes fast 12 Tage. Simplifying the sentence was not enough; the quantity had to get simpler too.

Both versions are written by a person, ahead of time. The reading level opens on Einfach — a struggling nine-year-old does not reach for a "simplify" button.

The widget sits in the middle of that section — the introduction above it, the million bridge below — and the rule it follows is narrow on purpose: the only thing the child is asked to watch is the transformation itself. Press plus on a column already holding nine and ten of them bundle into one of the next place, the arriving blocks sliding in from the side they came from. The rule underneath says it in the child's words, and it covers the way back too — „Regel der 9: In jedes Haus passen höchstens 9. Kommt eine dazu, werden zehn gebündelt und ziehen ins nächste Haus nach links. Nimmst du bei einer 0 etwas weg, wird eins von links wieder zu zehn.“ Rounding gets the same treatment in section six, and it is the better idea: the number sits on a shallow hill between its two round neighbours, the child presses play, and it rolls downhill over about eight-tenths of a second — slow enough to follow — into a result that stays on screen. Rounding stops being an instruction about looking at the next digit and becomes something that falls. All of it is switched off under prefers-reduced-motion, where the flash marking a jumped-to section becomes a static outline rather than nothing.

One quiet thing carries more weight than it looks. Every large number in the lesson prose is stored once, as a locale-neutral token — three hundred and thirty-one of them, ninety-nine distinct values — and formatted at render. So {{1000000}} reads 1.000.000 in the German lesson and 1,000,000 in an English one, and the author does not type a separator in the lesson text. The chapter title, the glossary and the notation examples that teach the separator itself are still written by hand. The same rule runs backwards through the answer box: a child who types 8.000, exactly as this chapter has just taught them to, is not marked wrong for it.

04The German lesson

When the language is the subject

The nouns chapter is where a maths engine ought to break, and the interesting part is which seam held. Its sixty things to answer contain no numbers at all — words and sentences instead — and its instructions are bilingual: a child working at home can pick English as their own language and then tap a quiet control at the edge of a paragraph to read the instruction in English. But the options being judged in a question are not translated. Not one of the hundred and sixty-three answer options in the file carries an English key.

That is not an oversight, and it is not laziness about translation. Rendering Blume · grün · singen · schnell in English hands over the answer and destroys the exercise in the same move. So the file separates the instruction, which may be translated, from the material, which may not — and holds that line without exception across every option label, every worked step and every section heading.

The best question in the chapter is a trap the chapter itself sets. By section three the child has been told, correctly, that nouns are capitalised. So a test question asks which row contains only nouns, and every wrong row capitalises something that is not one:

Deutsch · Nomen · test · hard

„In welcher Reihe sind alle Wörter Nomen?“

a  Hund, Angst, Auto  ·  b  Hund, Schnell, Auto  ·  c  Laufen, Blume, Kind  ·  d  Freude, Grün, Tisch

The worked answer — never shipped to the browser

„Nur in Reihe a sind alle drei Wörter wirklich Nomen: Hund, Angst, Auto (der Hund, die Angst, das Auto). Lass dich von der Großschreibung in der Liste nicht täuschen — mach bei jedem Wort die der/die/das-Probe. In den anderen Reihen steckt jeweils ein Wort, das kein Nomen ist: „schnell“ (Wie-Wort), „laufen“ (Tuwort) und „grün“ (Wie-Wort).“

A child running the shortcut — it has a capital letter, so it is a noun — picks a wrong row with complete confidence. The question is diagnostic rather than recall: it asks whether the test has been internalised, or only the visual cue the lesson accidentally taught.

Abschnitt 1: Was ist ein Nomen? →

And then there is the instruction the marker carries for this topic, which is the part worth quoting whole. Each topic hands the grader a short vocabulary contract — for the maths chapter it pins the exact words and forbids the plausible synonyms, so a nine-year-old never meets Zerlegung where the lesson said Stellenwertschreibweise. The German chapter's version does something else. It tells the marker that the lesson's own rule is a beginner's approximation, and what to do about the child who sees past it:

Wichtig zur der/die/das-Probe: Sie ist ein guter Anfängertest, aber nicht absolut. Manche Tuwörter (Verben) und Wie-Wörter (Adjektive) kann man großschreiben und zu einem Nomen machen (das Laufen, das Schöne). Wenn ein Kind das erkennt und sinnvoll begründet, bewerte es als RICHTIG und besonders aufmerksam.

A string-matcher marks that child wrong. A rubric on one of the guided questions goes further and instructs the marker to praise them explicitly. The same contract also forbids the marker from naming any particular literacy method — no FRESCH, no Silbenschwingen, no syllable method — because German primary schools are partisan about which one they teach, and feedback that contradicts the classroom is worse than no feedback. That is a small sentence in a JSON file, and it is the difference between a tool a school can use and one it cannot.

05The marking

The model writes the explanation. Arithmetic decides the mark.

Here is the thing most easily overclaimed, so it is worth being exact: most answers a child submits are never seen by a model at all.

A multiple-choice pick is settled by comparing the chosen option against the stored key on the server — deliberately, because asking a model to re-judge an answer already known removes nothing and adds the possibility of marking a demonstrably right pick wrong. A typed whole number on a question with an authored key is settled by comparison too. Practice questions of either kind never leave the browser. And when a typed number does go to the model — because the feedback needs writing — the verdict has already been decided by comparison and is handed to the model as settled, with its own judgement discarded if it disagrees.

What the model is for is the sentence afterwards. On a wrong answer with a known failure pattern, it is not even needed for that: the chapter author has already written the reply. The child at the kitchen table who rounded 999.600 to 999.700 meets this, with no model call and nothing to go wrong:

Mathematik · Runden · test · hard

„Runde 999.600 auf Tausender.“ Round 999,600 to the nearest thousand.

Child wrote: 999.700

Noch nicht

„Du hast nur die Hunderterstelle verändert. Wenn du die Tausenderstelle um eins erhöhst, wird aus jeder 9 davor eine 0, die als Bündel weiterwandert — genau wie beim Bündeln mit Bausteinen.“

Written ahead of time against that exact wrong value, and it reaches four sections back to the blocks the child already pushed around. Which rung comes back depends on which try the child is on: the next one asks a question instead of making a statement — „Was passiert, wenn du zu 999.000 genau 1.000 dazuzählst?“ — and from the third, the method itself. On the final test that counter is the round, so the rungs arrive across the fresh questions each round serves.

Abschnitt 6: Runden und Überschlagen →

When free text or a photograph does reach the marker, it arrives with more context than a marker usually gets: the question, the authoritative worked solution labelled for your judgement only, the actual text of the section that question points at — loaded server-side, so the explanation comes back in the lesson's own words rather than invented ones — the topic's vocabulary contract, a rule set that changes with which try this is, and, where a question has parts, a checklist that stops a correct number hiding a missing explanation.

It answers in two messages. The first is always in the simple register of the lesson language, one level below the lesson itself, so a child never fights the explanation on top of the subject. The second is the same feedback — same steps, same order — in the child's own language, because a child who cannot yet follow German should still be able to read what to do next. Seventeen languages sit in the marker's list, though only six are offered in the menu today — the ones the project is willing to stand behind. Adding one there is a single line, since the feedback is written in the moment rather than pulled from a translation file. When the two languages coincide, the second message is simply not there.

The marker is a small, fast model, and the reason sits in the code beside the call: a nine-year-old is waiting. That is a real trade, and what makes it safe is that the model is not the source of truth. Every worked answer in all seven chapters is written by a person in advance and shown verbatim. The model names what went wrong. It never invents the maths, or the spelling rule. None of that makes it a better judge than a good teacher on a good day. It is a more consistent one — and it is awake at half past seven.

One more instruction is worth quoting whole, because of which post in this series it pays off:

Ignore spelling, grammar and phrasing completely. Many pupils write in a second or third language. Mark only the mathematics or the reasoning, and never comment on language.
06Restraint

What the marker is forbidden to say

A tool that explains well is easy. A tool that explains well and still withholds an answer it knows is harder, and it is the whole reason a test can be a test. Three mechanisms hold that line. Two of them do not depend on the model behaving at all.

First, the answer is not in the browser. Before a page is built, every guided and test question has seven fields taken off it — the worked solution, the numeric answer, the correct option id, the wrong-answer patterns, the fallback hint, the method and the rubric. Practice questions keep theirs, because practice is meant to show its working. Second, the route refuses. Ask it to mark a practice question the browser can mark itself — a multiple choice, or a number with a stored key — and it declines, because those are settled locally and never posted at all; a written practice answer has no key in the browser, so it is marked like a guided one. Ask it to mark a test question in guided mode — the obvious way to make it hand over the solution — and it declines that too, because the requested mode has to match the question's own tier.

Third, the instruction itself, which reads less like a prompt than like a rule for an invigilator:

NEVER state the correct answer. NEVER give the working, NEVER give any intermediate figure, and NEVER give any number from which the answer could be worked back. […] The pupil will attempt the question again, so leaving the answer to be found is the whole point. If you are tempted to include a number, leave it out.

It anticipates the specific leak, too — that on a constructive question the recipe is the answer. For a question like build the smallest number, saying "put the smallest non-zero digit first, then sort the rest" hands it over as completely as stating it, so that is named and forbidden. Then the model re-reads its own reply and strips anything that reconstructs the answer. When in doubt, it is told, say less.

And it stops. On the third attempt at a test question the rule is lifted for that one reply, in as many words: withholding the method no longer helps. Nobody is left stuck to protect the integrity of a question they have already lost.

The restraint extends further than it had to. A correct answer on a test earns „Richtig.“ and nothing else — no praise, no reason, no numbers. On a guided question, two sentences at most, and the marker is told not to compliment the child's cleverness or claim to know how they reasoned. The warmth is deliberately saved for the end.

07The test

A final test that teaches while it marks

The last thing in every chapter is a real test with an unusual unit of account: the section, not the question. Round one draws one question from every section. Get a section's question right and that section is passed and never asked about again; passing overall means clearing sixty per cent of them — five of seven in the German chapter. Miss some, and the next round brings new questions drawn only from the sections still open, up to three rounds. The chapters are stocked for exactly that: the million-number chapter carries three test questions per section, so a failed section can be re-served from material the child has not seen.

Two things about it are worth more than the mechanics. Every question shows its full worked answer after every round — including the ones the child got right — which is safe precisely because the next round asks different questions, and which turns the test into a last pass through the material rather than a verdict. And a third failed round does not end in a mark. There is a count of sections cleared, and then a reading list: the sections still not cleared go back to be re-read; they re-lock, and the test reopens once their quick checks are done again. In the child's own words, on screen: „Die Abschnitte unten gehen zum Wiederholen zurück — arbeite sie noch einmal durch, dann öffnet sich der Test wieder.“

What keeps the marking honest
  • Arithmetic decides, the model explains — multiple choice and keyed numbers are settled by comparison on the server; when a number does reach the model, the verdict is passed in already decided and overrides whatever it returns.
  • The worked answers are written by people — every solution in all seven chapters is authored in advance and shown verbatim. The model is never the source of the maths or the rule.
  • Answers are never in the browser — seven fields are stripped from every guided and test question before the page is built, and the route refuses a mode that does not match the question's tier.
  • The explanation is grounded in the lesson — the marker is handed the actual text of the section the question points at, plus a per-topic vocabulary contract that bans plausible synonyms.
  • It cannot point somewhere that does not exist — the "where to look" link is chosen from an enumerated list of the chapter's real sections, and anything outside it is coerced back to a real one.
  • No accounts, no names, no record — a child never logs in. Which sections they have passed lives in their own browser and nowhere else, and a submitted answer is used to write the feedback and then not kept.
  • It is not unbiased — the model carries whatever its training carried. What is different is that the bias sits in one place, can be sampled and measured, and can be fixed once for every child. None of it has been measured here yet.
08The honest part

What this is not yet

The series kept a bright line between what runs and what is proposed. It is worth keeping here rather than letting a good demo blur it.

The six languages in the "Meine Sprache" menu are not six translations of the lesson. The chapters carry German and English; choosing Українська, Türkçe, العربية or Română changes the marker's second message — generated in that language, per request, not a reviewed translation — and not the lesson text. The lesson-language switch is real but barely exercised: only compound interest ships two full parallel languages, so it is the only chapter where the switch appears at all. Photographing handwriting is wired end to end, and on the German chapter it is the first-class route rather than a fallback — but it is read by the same small fast model, and the code says plainly what that costs on very messy writing.

Meine Sprache
DeutschEnglishУкраїнськаTürkçeالعربيةRomână
Six in the menu today, and the menu only appears at home. The marker can write in seventeen — the six are the ones the content stands behind.

There is no per-child record, no progress that follows a child between devices, no teacher dashboard. There is no pilot result either, because the pilot has not run: no outcomes, no cost-per-learner, no time-to-level, and nothing above should be read as hinting at any. And the thing the series was most careful about stays exactly as it was. This is not a plan to fire teachers. Below eleven, Klasse mode is what a teacher teaches with — she sets the pace and nothing is locked; Zuhause mode is homework, and homework has never been a teacher. What changes is that the homework answers back. It is a plan to stop wasting teachers — to stop making one person re-explain, from scratch, the thing that has already been explained well.

See it for yourself
The fastest way to judge any of this is to open a lesson in classroom mode, with everything unlocked, and get one question wrong on purpose. Read what comes back — and notice what it does not tell you.
Classroom or at home · simple or full reading level · read-aloud in the lesson language.
For the grown-up in the room
How the Education engine works
The plain guide for parents, teachers and schools — the two modes, the reading levels, the marking, the final test, and what does and does not leave the device. Written in English and German.
The argument this answers
Five problems, one limit
The seven-part series these lessons were built for — why five separate-looking failures of school sit on one ceiling, and what moving the copyable work would change. This post is the part that was still owed: the engine, running.

Written from the shipped code and the three lesson files themselves — the section counts, question counts, worked answers, marker instructions and German quotations above are reproduced as they stand in the chapters and the marking service, not reconstructed from memory. No outcome, accuracy or usage figure appears here, because none has been measured. — Crosshire.

© 2026 Crosshire Journal · Made in EU Written from a working platform