Back to Knowledge Base

How the Curriculum Is Made

The lessons on this site are AI-authored through a multi-pass pipeline behind a quality gate — so the curriculum can stay current without a human writing every word, while still reading like an edited course. This page shows exactly how that works, and how fresh each lesson is.

120 lessons13 phases578,607 wordsupdated 2026-05-162026-07-03

The multi-pass pipeline

Each lesson is built by the same repeatable pipeline (in roadmap-kg/kg/ground_content.py). Every stage names the real mechanism it uses, so the description is verifiable rather than marketing.

1

Research

A retrieval index is built over the real sources for the topic — existing lessons plus code and specs. Code is split function/class-aware (CodeSplitter); prose stays on a sentence splitter. Embeddings are content-keyed and cached (IngestionPipeline + IngestionCache), so re-runs that only touch prompts don't re-embed.

2

Retrieve

For each section, a fusion retriever (Reciprocal Rank Fusion over a dense FastEmbed retriever plus a BM25 keyword retriever, with LLM-generated query variants) pulls the most relevant chunks, then a cross-encoder reranker keeps the best. Keyword recall catches exact mechanism terms the embedder misses.

3

Outline & Draft

The draft is produced as typed structured output (llm.structured_predict), so an explanation ladder (Gist → More → Deep) comes out as one coherent progression rather than three disconnected queries. System-design sections decompose into mechanism / trade-off / failure-mode sub-questions (SubQuestionQueryEngine), each retrieved and answered, then synthesized.

4

Review

Every generated body is scored against its retrieved context by a FaithfulnessEvaluator — the check is whether the claims are actually supported by the sources, not just whether the prose reads well.

5

Revise

An ungrounded body is regenerated once with a stricter ask. Deterministic re-runs (fixed splitters, cached embeddings, seeded retrieval) mean the same inputs reproduce the same output.

6

Quality gate

Before an audio-derived artifact publishes, the mechanical gate (kg.audio_gate) must pass — a hard set of structural and readability checks summarized below. A human reviews and approves before a lesson goes live.

What the quality gate enforces

The mechanical gate (kg.audio_gate, a faithful port of the original Rust gate) runs before a lesson’s audio-derived artifacts publish. Hard checks block publish; advisory checks flag but never block. The prose lessons themselves are gated by the faithfulness check in step 4 — claims must be supported by the retrieved sources. Thresholds are grounded in readability research (Flesch 1948; Fang 1966; DuBay 2004), cited in the gate source.

Hard · blocks publish

structural integrity

Chapter durations, start offsets, total duration and the stitched full-script must all reconcile (duration-mismatch, start-secs, total-duration, full-script-integrity).

minimum length

No chapter under 40 words (chapter-too-short); at least ~400 words total, so a gate-passing unit is substantive, not a stub.

readability floor

Flesch Reading Ease ≥ 50 (FLESCH_MIN) — the plain-English boundary; spoken material can't drop into the 'difficult' band a reader could re-read.

sentence ceiling

No sentence over 30 words (PACING_MAX_SENTENCE_WORDS) — a hard breath/comprehension ceiling for listening.

spoken numbers

Numbers under ten are spelled out, not left as glyphs (spoken-small-digits), because a listener parses the word, not the numeral.

acronym first use

A non-allowlisted acronym must be expanded on first use (acronym-first-use) — unexpanded acronyms are a comprehension failure by ear.

title length

Chapter titles capped at five words, so section headings stay scannable and speakable.

Advisory · flags only

easy-listening

Fang's Easy Listening Formula (syllables − words > 20) flags a lone short-but-dense sentence.

spoken-symbol

Percent / currency / operator glyphs and fractions are flagged with a spelled-out suggestion.

sentence variety

Uniform sentence length (low coefficient of variation) reads as monotone and flattens synthesized prosody.

AI tells & polarity

Advisory checks for generic 'AI voice', over-negative framing, and comma-spliced spoken lists.

What is and isn’t AI-generated

Being explicit about the boundary is part of the trust model. Fully autonomous publishing is deliberately out of scope — a human stays in the loop.

AI-generated

The lesson prose, examples and explanation ladders — authored by the pipeline above.
The spoken audio narration and knowledge-graph edges — regenerated from the lesson on change.
The study aids (spaced-repetition cards, recall cues) derived from generated lessons.

Human / not generated

Curation and sequencing — which topics exist and in what order is an editorial decision, not generated.
Publishing — a human reviews and approves before a lesson goes live; there is no autonomous publish.
The freshness dates below — these are git commit dates of each lesson file, not a model-authored field.
Source selection — the corpus each lesson is grounded in is chosen and maintained by the maintainer.

Why the tutor withholds answers

The AI tutor on every lesson gives hints and grades your attempt; it will not simply hand you the answer. That is a deliberate constraint, not a limitation. In a randomized trial with roughly a thousand high school students (Bastani et al., 2025), a plain ChatGPT-style tutor raised practice scores 48% — and then scored those same students 17% below the no-AI control on a later exam taken without it. Students used it as a crutch and did not notice the loss. A guardrailed tutor — hints instead of solutions, plus an author-supplied correct answer and a list of common mistakes so it cannot give wrong feedback — reached 127% on practice with the negative exam effect gone.

Guardrail · in the tutor

The move a concept gets is chosen from your mastery state, and a withholding move is checked for answer leakage before it reaches you — lib/tutor-policy.ts (chooseMove, leaksAnswer) and the intent ladder in rag_service/chat_tutor.py. Where a canonical answer exists, it is given to the model to judge against and explicitly withheld from the reply.

Measurement · with AI off

The trial only found the harm by testing with access removed, so this site does the same: /today re-checks a topic you studied with AI help at least a day later, with the chat and explain tools disabled, and reports the gap between your assisted and unassisted score.

Lesson freshness

Every lesson, grouped by phase, with its word count, reading time and last-updated date. Dates are the git commit date of each lesson’s source file — an honest content-history signal, not a maintained field. Median lesson is 5,388 words.

Derived deterministically by node data/curriculum/build-stats.mjs.

Phase 1 · Foundations & Model Inference7 lessons · 38,404 words · newest 2026-06-29
LessonWordsReadUpdated


4,76624m
2026-05-17

4,71224m
2026-05-17

5,81729m
2026-05-17

5,29226m
2026-06-13
Phase 2 · Prompting & Structured Output10 lessons · 54,368 words · newest 2026-07-02
LessonWordsReadUpdated

Prompt Engineering Fundamentals: Principles & Patterns

#10 · prompt-engineering-fundamentals

5,46827m
2026-07-02

Few-Shot & Chain-of-Thought Prompting

#11 · few-shot-chain-of-thought

5,43727m
2026-06-29

5,82929m
2026-05-16

1,1236m
2026-06-29

6,04230m
2026-05-17
Phase 3 · Embeddings & RAG9 lessons · 43,692 words · newest 2026-07-03
LessonWordsReadUpdated

Embeddings

#20 · embeddings

3,28216m
2026-06-29

5,29326m
2026-05-17

6,00330m
2026-06-29

3,07615m
2026-05-17

6,17131m
2026-07-03

6,22231m
2026-06-29

6,55833m
2026-05-17
Phase 4 · Agents & Orchestration19 lessons · 73,151 words · newest 2026-07-03
LessonWordsReadUpdated


5,16726m
2026-07-03

8,52743m
2026-07-02

1,6218m
2026-06-29

Reflexion: Self-Improving Agents via Verbal Reinforcement

#101 · reflexion-self-improving-agents

1,6678m
2026-06-29

1,7169m
2026-06-29

1,5818m
2026-06-29

1,3657m
2026-06-29

1,5218m
2026-06-29

1,3107m
2026-06-29

1,6088m
2026-06-29

1,6608m
2026-06-29

Generative Agents: The Memory Stream

#109 · generative-agents-memory

1,7039m
2026-06-29

1,7119m
2026-06-29
Phase 5 · Long-Term Memory8 lessons · 46,780 words · newest 2026-06-29
LessonWordsReadUpdated


1,0205m
2026-06-29

4,43022m
2026-06-29

8,56043m
2026-05-19

8,61843m
2026-05-19

1,5508m
2026-06-29
Phase 6 · LangChain & LangGraph9 lessons · 21,600 words · newest 2026-07-02
LessonWordsReadUpdated


1,5638m
2026-06-29

1,6868m
2026-05-19

1,6388m
2026-05-19

1,5118m
2026-05-19
Phase 7 · Evals, Safety & Observability17 lessons · 95,827 words · newest 2026-06-29
LessonWordsReadUpdated

7,16536m
2026-06-29

7,74239m
2026-05-19

5,63528m
2026-05-19

5,66128m
2026-05-19

Constitutional AI & RLHF for Safety

#63 · constitutional-ai

5,61228m
2026-05-19

4,91625m
2026-05-19

6,24231m
2026-05-19

6,09430m
2026-06-29
Phase 8 · Ship to Production9 lessons · 52,764 words · newest 2026-07-03
LessonWordsReadUpdated

6,18131m
2026-05-19

5,86329m
2026-05-19

5,33827m
2026-05-19

Search & Recommendations with LLMs

#76 · search-recommendations

6,19931m
2026-06-13

6,27331m
2026-05-19

5,54228m
2026-05-19

5,15626m
2026-07-03

5,99430m
2026-05-19
System Design Foundations7 lessons · 23,475 words · newest 2026-07-02
LessonWordsReadUpdated

4,69323m
2026-06-06

6,10831m
2026-06-06

Microservices

#90 · microservices

2,13111m
2026-06-06

SOLID Principles

#93 · solid-principles

2,22511m
2026-06-06

ACID Properties

#94 · acid-properties

2,01310m
2026-06-06
Appendix · Other Clouds & Platforms5 lessons · 14,149 words · newest 2026-05-17
LessonWordsReadUpdated

5,11926m
2026-05-16

Microsoft Azure

#81 · azure

2,29011m
2026-05-16

2,25411m
2026-05-17

Docker

#88 · docker

2,21411m
2026-05-17

Kubernetes

#89 · kubernetes

2,27211m
2026-05-17
Appendix · Fine-tuning & Training6 lessons · 33,080 words · newest 2026-05-17
LessonWordsReadUpdated

5,50028m
2026-05-17

4,93325m
2026-05-17

5,92430m
2026-05-17
Appendix · Engineering & Communication12 lessons · 65,715 words · newest 2026-07-02
LessonWordsReadUpdated

AWS Lambda & Serverless

#85 · aws-lambda-serverless

6,63333m
2026-05-17

AWS API Gateway & Networking

#86 · aws-api-gateway-networking

7,65038m
2026-05-17

AWS IAM & Security

#87 · aws-iam-security

7,14536m
2026-05-17

AWS Compute & Containers

#88 · aws-compute-containers

7,86239m
2026-05-17

AWS Storage & S3

#89 · aws-storage-s3

7,10236m
2026-05-17

AWS CI/CD & DevOps

#90 · aws-cicd-devops

8,53543m
2026-05-17

9,69048m
2026-05-17

CI/CD

#91 · ci-cd

2,00910m
2026-05-17

Node.js

#92 · nodejs

2,37412m
2026-05-17

LlamaIndex

#97 · llamaindex

3,32817m
2026-07-02

1,2806m
2026-06-29
Appendix · AWS Deep Dives2 lessons · 15,602 words · newest 2026-05-17
LessonWordsReadUpdated

8,58843m
2026-05-16

AWS DynamoDB & Data Services

#93 · dynamodb-data-services

7,01435m
2026-05-17

Freshness colors: green updated Jun 2026 or later · amber mid-May 2026 · gray earlier or unknown.