This repo produces multi-concept learning roadmaps that bridge online courses to a build-from-scratch project (ZeroServe). Each roadmap is a single Markdown file converted to PDF.
roadmap/
├── FORMAT.md # Per-concept template (READ FIRST)
├── zeroserve-in-public.md # LLM inference engine curriculum (101 concepts)
├── llm-lab.md # PyTorch + TiP foundations (37 concepts)
├── scripts/
│ └── convert-to-pdf.sh # Markdown + Mermaid → PDF pipeline
├── references/ # Source materials, config dumps
└── AGENTS.md # This file
Follow these phases in order. Each phase has explicit steps.
- Read the target project. Read
zeroserve-in-public.mdto understand what the roadmap feeds into. Identify which concepts the learner needs BEFORE they can start ZeroServe. - Web-fetch the course page. Use
webfetchon the course URL. Extract: module list, topics, hours, prerequisites, instructor. - Read FORMAT.md. This is the per-concept template. Every concept MUST follow it. No exceptions.
- Explore the reference repo. If a local clone exists (e.g.,
~/workspace/learning/deeplearning-ai-pytorch/), spawn anexploresubagent to map its structure. Get: file inventory, naming conventions, notebook depth/style, data/model files. - Read 3–5 actual notebooks. Don't guess content. Read representative labs to understand what's actually taught, what APIs are used, and what exercises look like. This ensures the Write/Test sections reference REAL files.
- Web-fetch supplementary courses. If blending multiple sources (e.g., PyTorch Certificate + Transformers in Practice), fetch each course page and map overlap vs unique content.
- Map course modules to concepts. Break each module into 2–4 concepts. Aim for 30–40 total. Each concept should be learnable in 1–2 hours.
- Organize into layers. Group concepts into sequential layers (Layer 0: foundations → Layer N: advanced). Each layer should take 1–2 weeks.
- Identify bridge concepts. Mark which concepts unlock the target project (ZeroServe). These get a
★ KEYmarker. - Create a todo list. Use
todowritewith one entry per concept. Set priority:highfor must-learn,mediumfor nice-to-have,lowfor optional. - Ask the user 2 questions before writing:
- Depth per concept (full FORMAT ~80 lines vs compact stubs ~30 lines)
- Reference model/dataset (e.g., Qwen3-0.6B vs course defaults)
- Present the plan. Show the layer structure, concept count, and cross-reference to ZeroServe. Get confirmation before writing.
NEVER write all concepts in one pass. It is error-prone. Write incrementally:
- Write the header first. Title, repos table, abbreviations, per-concept template reference, big-picture mermaid diagram. End with
<!-- CONTINUE -->marker. - Write one layer (3–6 concepts) per turn. Use
todowriteto mark the first conceptin_progress, write the batch, mark allcompleted. - Append using the CONTINUE marker technique:
- The file always ends with
<!-- CONTINUE --> - Use
edittool: oldString =<!-- CONTINUE -->, newString =[new concepts] + <!-- CONTINUE --> - This guarantees reliable appending without reading the whole file
- The file always ends with
- After the last batch, remove the
<!-- CONTINUE -->marker (or replace with closing content). - Each concept follows FORMAT.md exactly:
Goal+Why(1 sentence each)Read(real file paths from Phase 1 research)Search(keywords, papers with arXiv IDs)Write(runnable code, typed, with correct imports — NOT pseudocode)Test(concrete bash command + expected output)Commit(conventional commit format)Think(3–5 bullets + mermaid diagram for anything structural)Q&A(2–3 interview questions with specific numbers in answers)Tips & Tricks(3–5 gotchas/shortcuts)---separator
When adding a second course (e.g., Transformers in Practice):
- Map overlap vs unique content. Which TiP modules duplicate existing concepts? Which add new topics?
- Enrich existing concepts. Add new course references to the
Readsection of overlapping concepts. Don't rewrite — just add references. - Add new concepts for unique content. Insert as a new batch between existing layers.
- Create a two-track system. Mark skippable concepts with
⏭️ SKIP (fast track). Add a "Two tracks" table in the header showing fast vs full path. - Update the big-picture mermaid to show both tracks.
- Update the cross-reference table at the end to include new bridge points.
- Fix mermaid syntax BEFORE running the script. Common bugs:
->instead of-->(single dash fails silently)- Unicode arrows
→↔in edge definitions (must be-->) - Emoji in node labels (
⏭️,★) — replace with ASCII ((skip),KEY) - En-dashes
–in node labels — usually fine but replace with-to be safe
- Check script dependencies:
quarto,mmdc,pandoc,xelatex/pdflatex. - Install optional packages for quality:
fvextra(code line wrapping):tlmgr init-usertree && tlmgr --usermode option repository https://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2025/tlnet-final/ && tlmgr --usermode install fvextra- DejaVu Nerd Font (Unicode):
brew install --cask font-dejavu-sans-mono-nerd-font
- Run:
bash scripts/convert-to-pdf.sh <file>.md - If mermaid fails: The script reports which diagram number failed (e.g.,
FAILED: d007). Extract that diagram with:Fix the syntax, re-run.python3 -c " import re text = open('<file>.md').read() blocks = re.findall(r'\x60\x60\x60mermaid\n(.*?)\n\x60\x60\x60', text, re.DOTALL) print(blocks[N-1]) # N = failed diagram number "
git add <file>.md <file>.pdf
git commit -m "docs: add <name> roadmap with N concepts
- N concepts across M batches
- <key features>
- Generated PDF with all K mermaid diagrams rendered"- Sequential within a roadmap: C0, C1, ..., C36
- New concepts from blending get the next available numbers (e.g., C31–C36 for TiP)
- Batch headers:
# BATCH N — LAYER X: NAME (Concepts A–B)
- Always
-->for directed edges (NEVER->or Unicode→) - Node labels: ASCII only inside
["..."](no emoji, no Unicode arrows) <br/>for line breaks inside labels — this is finestyle NODE fill:#color,stroke:#colorfor coloring- Test render before PDF: the convert script catches errors, but fixing pre-emptively saves iterations
- All code in
Writesections must be runnable Python (not pseudocode) - Include
importstatements - Include
if __name__or module path for direct execution - Reference real APIs from the actual lab notebooks (verified in Phase 1)
- Use Qwen3-0.6B config numbers where relevant (verified from HF config.json)
- Conventional commits:
feat(scope):,fix(scope):,docs(scope): - For roadmap files:
docs: add <name> roadmap with N concepts - For fixes:
fix(mermaid): correct edge syntax in diagram N
| File | Concepts | Source courses | Feeds into |
|---|---|---|---|
zeroserve-in-public.md |
101 (C0–C100) | Practical LLMOps book + nanoGPT + nano-vllm | ZeroServe build repo |
llm-lab.md |
37 (C0–C36) | PyTorch Certificate (87h) + Transformers in Practice (11h) | zeroserve-in-public.md |