AI Tinkerers · take-home

Stop Re-Reading Your Conference Notes: Build a Spaced-Repetition Course Instead

Everything I captured at AI Engineer World’s Fair 2026 — talk transcripts, wearable-recorder audio, a camera roll — turned into a keyboard-first spaced-repetition course, built almost entirely by an orchestrated fleet of Claude agents.

What I built

A personal learning platform that converts passive conference watching into the techniques that actually create durable knowledge for experts: retrieval practice on a spacing schedule, generation prompts, and build challenges. I started by researching the learning-science literature — retrieval practice, FSRS spaced repetition, the Feynman technique — and encoded those techniques as the product spec, so features fell out of the research instead of the other way around.

Then agents matched my camera roll to the conference schedule, wrote 66 lessons across two courses (the conference itself, plus a formal-methods course built from a folder of university PDFs), generated 274 retrieval cards, and typeset real MathML formulas. Everything compiles to one dependency-free HTML file with an FSRS-5 scheduler I implemented from the published weights.

By the numbers
53talk transcripts
167photos & videos
66lessons · 2 courses
274retrieval cards
1HTML file, 0 deps
~20Sonnet subagents
The one lesson

Verify content, not pipeline mechanics.

Every one of these bugs ran green — exit code 0, pipeline “worked” — while producing wrong output. A passing pipeline tells you the machinery ran, not that the result is correct. The fix each time was to make an agent inspect the actual artifact.

ran green · wrong

Every photo, wrong talk

The photo-to-session matcher assigned every photo to the wrong talk — macOS Photos returns capture times in your Mac’s current timezone, not the one you shot in. Caught only by making the agent read the slides visible in the photos.

exit 0 · undecodable

Videos that won’t play

ffmpeg exited 0, but no browser could decode the output: iPhone HDR is 10-bit (HLG/BT.2020) and libx264 happily kept it that way. Fix: tone-map to 8-bit BT.709.

right name · wrong paper

The impostor PDF

A source PDF shared a name with a famous paper but was an unrelated one. A subagent caught it because it was instructed to flag source mismatches instead of paraphrasing blindly.

The orchestration recipe

What made the fleet reliable

JSON contract

Agents write schema-validated lesson JSON, never HTML. Bad output fails validation instead of shipping broken markup.

1 generator

A single deterministic generator owns every byte of HTML. Presentation is code, not something 20 agents each reinvent.

append-only

Append-only data changes so user review state survives a full regeneration of the course.

model routing

Save the big model for judgment calls; smaller models do extraction at scale. Fable 5 orchestrates, ~20 Sonnet subagents extract and write.

verify loop

Playwright-driven headless Chrome as the agents’ verification loop — every change screenshot-checked and behavior-tested before it ships.

Technologies used
Claude Code · Fable 5 ~20 Sonnet subagents schema-validated JSON vanilla HTML/CSS/JS single-file app MathML Core OKLCH design system FSRS-5 (from weights) ffmpeg · HDR→SDR AVIF via SVT-AV1 sips · AppleScript Playwright headless Chrome ntfy push
Go deeper

The demo and the source docs