MATH 170 · Math of AI · What we built
Fall 2025 worksheets · 2026 build

A course you can hold in one hand.

Twenty-nine interactive activities, one classroom server, and a small editing desk that hands all of it to the person who teaches it. One file each. No build step. No accounts.

The goal

One course, one visual language.

A student should never have to learn a new interface to learn a new idea.

Week 1 of MATH 170 puts twenty rows of numbers in front of a student — four columns, no column names — and asks them to write a rule that says healthy or not healthy. It is a good hour. What it is not is an hour that survives being handed off to five different websites, each with its own buttons, its own colours, and its own idea of what a slider looks like.

So the brief was one visual language for the whole semester: black text, white paper, one spot colour, the way a two-colour textbook is printed. Every activity a single HTML file that opens from a double-click. And every one of them owned, afterwards, by the professor rather than by us.

This doesn't replace the paper. Each page runs after the worksheet, as the reveal or the discussion engine.

Round one

Thirty-two pages and a plane full of cursors.

Built in one pass from the professor's own Fall 2025 worksheets.

The first build read the course materials and produced thirty-two activities covering weeks 1 through 14 — sorting learning types, drawing a decision line, stepping k-means, reading a truth table, walking one honest forward pass of word2vec — plus one thing that could not be a static file: a coordinate plane on the projector where every student in the room is a randomly named cursor, moving in real time.

The data came out of the worksheets verbatim wherever the worksheets had data. Where they only had a picture — a scatter, a bitmap, a graph — the numbers were reconstructed, flagged on the page, and pinned in the source so they can be swapped and re-verified.

This doesn't mean it was right. It means it was checkable, which is the part that mattered next.

The review

Thirty-two verdicts, page by page.

The professor opened every activity and wrote down what was wrong with it.

Not a rating. A verdict per page — keep, edit, rework, replace, split, remove — with the specific sentence to change, the specific bug to fix, and the reason. The clause selector on the sandwich page could not toggle back to zero at its minimum threshold. The k-NN page mentioned the worksheet when it should have just let you drag. Seven pages were removed outright, because a whiteboard and a conversation did the job better.

One line reorganised a whole page. On the truth tables, students had been clicking buttons that revealed answers; the note said they should type T or F themselves and be corrected: “It should be earned not given.” That is a pedagogy decision no amount of engineering produces on its own.

This doesn't happen without a reviewer who opens all thirty-two.

Round two

Every verdict, then the keys.

The fixes were the easy half. The other half was making us unnecessary.

Round two implemented all of it: the edits, the reworks, the removals, the Markov page split in two, the norm page replaced with something that doesn't hand out the worksheet's answers. Two new games against the computer joined week 9 — the Shannon switching game and Cliquer — both with the opponent's engine mirrored in Python and swept exhaustively before shipping.

Then the part that changes who owns the course. The Studio is a small web app the professor runs on their own laptop: click any sentence on any activity and rewrite it, edit the numbers behind it in a spreadsheet-like grid, generate or import a fresh dataset, make a second exercise from any template, choose what students see and when — and publish a folder of plain HTML. In the coordinator's words, it is “turning it around and giving the keys to the front line.”

This doesn't call anything over the network, and it doesn't touch the original files: your edits live beside them as small JSON files you can delete.

What exists now

The set, as of today.

Counted from the repository on 27 July 2026, not rounded up.

Twenty-nine activities live in the gallery, each a single self-contained file with its own teaching spec, its own worksheet attachment, and a keyboard route through everything you can do with a mouse. Seven more sit in the archive in case the professor wants them back. The classroom server has three modes now; the last one clusters the whole class by their movie ratings, in all eight dimensions, with no scatterplot anywhere — because the point of that lesson is that you can cluster what you cannot plot.

29
activity pages, one HTML file each
0
network requests a student page makes
4
modes in the classroom server
7
spot colours, both themes, all measured
11
interaction archetypes the set is built from
119
automated tests (101 Studio, 18 server)
One of the twenty-nine, running here: the worksheet's scores [1, 2, 5] become 1.7% · 4.7% · 93.6%, and a confidence knob shows why a lead of 3 is a factor of e³. If the frame is blocked, open Turning Scores into a Decision directly — it is the same file.
How it was built

Two people, and a queue of agents.

Serial phases, each with exit criteria someone checked before the next one started.

A Fable 5 orchestrator held the plan, the contracts and the verification; seven Opus 5 phase agents did the building, one at a time, each finishing to a written exit criterion — linter clean, tests green, every item in the professor's document accounted for — before the next was allowed to start. One design agent ran in parallel at the beginning and produced the colour system: seven hues, every contrast ratio computed rather than eyeballed.

The two people are the reason it points anywhere. The professor drove the pedagogy: what to teach, what to cut, what students should have to earn. The coordinator drove the architecture: static files, a Python back end, one spot colour, and the Studio itself, which was their idea before it was anyone's code.

This doesn't scale by adding agents. The serial order is what made each phase's output checkable.

What it consumed

The meter, published.

Measured per agent by the harness. Where a number does not exist, we say so.

Round two ran in a single session on 27 July 2026. Every figure below is the harness's own reading for that agent's run — tokens consumed, tool calls made, wall-clock elapsed. The design phase and the first build phase overlapped; the rest ran one after another.

Round-2 agent usage — measured (source: archive/05-round2-build/usage-ledger.md).
PhaseAgent modelTokens Tool usesWall time
D — design system, palettes, gallery specsOpus 5120,2473113m 40s
P1 — professor pass A + removals + galleryOpus 5277,0467623m 05s
P2 — professor pass B + markov splitOpus 5411,22214439m 37s
P3 — Shannon/Cliquer games + movies modeOpus 5291,8048033m 24s
P4 — contract retrofit + lint v2Opus 5208,40212826m 34s
P5 — Studio core CMSOpus 5124,1436415m 15s
P6 — Studio data toolsOpus 5260,23712629m 04s
P7 — this page and its siblingsOpus 5187,9847520m 10s
Orchestrator — planning, contracts, phase gating, verificationFable 5not measurable from inside the session — see the note below
All eight phase agentsOpus 5 subagents1,881,085724~3h 21m

Bar length is the token count; the shade is the same number, stepped. The numbers are printed because the bars are not the evidence.

Three honest gaps. The orchestrator's own consumption cannot be read from inside its own session, so it is not in the table; its share went to planning documents, contracts, gating and verification runs, and the coordinator can read the exact figure from their plan's usage meter. Round one's per-agent telemetry was not retained, so it has no row here at all — only a shape: a thirty-two page build, one server app, two interruptions when the session ran out of room. And there is no cost column, because this work ran on a subscription rather than metered billing, and a dollar figure we cannot defend would be worse than none.

What's next

The list we did not get to.

Written down in full, with effort estimates, in NEXT.md.

  • The click-through. The professor has now opened these in a real browser twice, and both times sent back notes — that is where every verdict in this story came from. What nobody has done is walk all twenty-nine against their specs, and the newest round of fixes has not been clicked at all. The linter and the test suites cannot do it, and it is still the first thing that should happen.
  • Versioning the professor's edition. The Studio's edits are plain JSON that diffs cleanly; a small git layer over them would turn “what did I change before last semester?” into an answerable question.
  • The class as a dataset. The shared plane already computes the class's own numbers on the projector. Letting the room's anonymised responses land back in the Studio as a dataset would close a loop nothing else in the set closes.
  • A second course's archetypes. Eleven shapes covered a semester of AI mathematics. Probability and calculus sequences would need perhaps three more — and colleagues could trade exercise packs the same way they trade worksheets.
Where to start

Open one and press something.

Everything here is a file. Nothing needs permission to look at it.

The gallery — twenty-nine activities, sorted by topic.
What kinds of pages this makes — for a colleague with five minutes and a projector.

None of this has been in front of a class yet. The mathematics has been checked twice, by hand and in Python; the structure has been checked by a linter that reads every file; the games have been solved exhaustively so the computer opponent cannot blunder. What has not happened is thirty students at once, on their own devices, in a room with imperfect wifi and eleven minutes left. That is the only test that counts, and it is the professor's to run.

Built for MATH 170 · Math of AI, from the Fall 2025 worksheets.

Reset puts the theme back to your system setting and the colour back to Goldenrod.