convex-bootcamp — teach a fast-moving stack without teaching stale syntax
convex-bootcampThis skill documents the process behind the 7-day Convex bootcamp in curriculum/. It
generalises to any framework that ships faster than its tutorials — which is most of them.
#Invocation
/convex-bootcamp new <topic>— Phases 0–2: verify the API, curate sources, publish the plan/convex-bootcamp day N— build and teach Day N (Phase 3)/convex-bootcamp verify— re-run Phase 0 against live docs and report what drifted/convex-bootcamp status— read memory, report the day, what's banked, what's stale
State lives in a project memory file (e.g. project_convex_bootcamp.md). ALWAYS read it
first: it holds the plan, artifact URLs, the verified-API snapshot with its date, and which
checkpoints passed. Update it whenever a day completes or a verified fact changes.
#The premise this skill exists for
A fast-moving framework's tutorials are a snapshot; its docs are the moving target. For
Convex specifically, the document API moved from ctx.db.get(id) to
ctx.db.get("tasks", id), which silently invalidates the syntax in essentially every video
tutorial published before it. A bootcamp that teaches from model memory will teach that
error confidently.
So Phase 0 is not optional and is not research flavour. It is the thing that makes the output trustworthy.
#Phase 0 — Verify the API against live docs (ALWAYS FIRST)
Before writing one line of teaching content, WebFetch the canonical docs and quote the current syntax. For Convex, minimum set:
/understanding/best-practices/— the practices list is also a ready-made gotcha list/functions/query-functions,/functions/validation— function + validator syntax/database/reading-data,/database/writing-data— the argument shapes that moved/database/schemas— schema and index syntax/functions/actions— limits,"use node"rules, runtime constraints/auth— provider options and current stability language/client/react,/client/react/nextjs/server-rendering— hooks and SSR functions/components,/components/using— component config syntax
Rules:
- Ask each fetch to quote code verbatim, not summarise it. A summary launders errors.
- When a fetched signature contradicts what you were about to write, the docs win — and say so out loud to the user. That contradiction is teaching material, not an embarrassment.
- Record every verified fact with the date fetched. Facts expire.
- If a fetch fails or is ambiguous, mark the item unverified in the output. Never silently fall back to model memory for syntax.
#Phase 1 — Curate sources
Search for videos and posts. Then:
- Resolve every URL. Only link URLs that came back from a real search. Never reconstruct a video ID from memory — a plausible-looking wrong ID is worse than no link.
- Date every source and check that date against Phase 0. A pre-change tutorial is not discarded — it is labelled: "watch for workflow, take syntax from the cheatsheet."
- One primary per concept. A second video on the same topic is procrastination with good posture. Add an alternative only when the teaching angle genuinely differs (vendor walkthrough vs. working developer).
- Prefer sources with a companion repo so the learner can diff.
- Note durations only if the title or snippet states them. Publish dates are more useful anyway, because they predict staleness.
#Phase 2 — The plan
Order by dependency, not by the docs' table of contents. Two rules that do the work:
- Concept before syntax. Day 1 writes no application code. People bounce off a stack because their old model doesn't fit, not because the API is hard.
- Front-load the decisions that are expensive to reverse. Indexes are Day 2 because retrofitting them means rewriting queries. Auth is Day 5, not Day 7, because a data model without ownership is a rewrite.
Every day gets: one idea, one video maximum, a build task ending in running software, and a blind checkpoint. Publish the plan as an HTML artifact; save the URL to memory.
#Phase 3 — Per-day lesson (the core loop)
One self-contained lesson. Anatomy, in order:
- Header — the one idea as a single sentence the whole day hangs on; time; the video; what ships by the end.
- Numbered sections (4–7), each with this rhythm:
- the concept in one sentence, then the layers
- story box — a concrete anchor, one paragraph, vivid. The library with no
catalogue (indexes). The photograph vs the window (
fetchQueryvspreloadQuery). The runner sent into a building three times (sequentialrunQuery). This is what survives when the reader is tired and debugging at 1am. - verified code from Phase 0 — never from memory
- where relevant, an explicit "the videos show X, current is Y" callout
- quick check — one question, answer hidden in
<details>. Number them across the page. Prefer questions phrased as symptoms ("renders right, never updates — where do you look?") over definitions; that is the form the knowledge is actually used in.
- Build task — ends with running software, and includes at least one
deliberate-bug drill: instructions to write the wrong version, observe the failure,
then fix it. Rationale: a bug you caused yourself is worth ten warnings you read. Best
candidates are failures that are silent (
.filter()at small scale,fetchQueryfreezing) or scary (deleting another user's row from the console). - Checkpoint — 5 blind questions, no answers on the page. Passing = day banked.
- Cheat strip — a monospace block of the day's whole API surface, copy-pasteable.
- Tomorrow — one sentence of narrative pull, naming the tension the next day resolves.
#Progression gating
Do not advance on request alone. Ask for checkpoint answers.
- all correct → next day
- one miss → point at the section, then advance
- two or more → redo the build task before advancing, and say so plainly
A learner who wants to skip ahead is asking you to make the later days useless. Be direct about the tradeoff rather than quietly complying or quietly refusing.
#Honesty rules
- Never state a syntax fact not verified in Phase 0. If it's memory, say "unverified — check the docs."
- Never invent a URL or a video ID. Search results or nothing.
- Report the stack's weaknesses in the curriculum itself. Day 1 has a "what you give up" section: vendor lock-in, no SQL, the cost shape of over-broad reactive queries. A bootcamp that only sells is a brochure, and learners can tell.
- Quote stability language verbatim for anything beta. Convex Auth's docs say it "isn't complete and may change in backward-incompatible ways" — that exact sentence is more useful to a learner than any paraphrase.
- When the user reports that verified code didn't work, re-fetch the doc before debugging their code. The docs may have moved again.
#Design rules (artifacts)
- One token system across the whole bootcamp so the days read as a set. Light:
--paper #FBFAF8 --ink #1B2027 --accent #6B4EE6 (indigo) --flag #C2410C (rust, for traps and warnings) --line #E4E0D9 --mono-bg #F2EFEA. Define dark variants under BOTH@media (prefers-color-scheme: dark) :root:not([data-theme="light"])AND:root[data-theme="dark"]. - Semantic colour split: accent = learning machinery (quick checks, key boxes); flag/rust = danger (deliberate bugs, gotchas, security). Keep it consistent — by Day 4 the reader should feel the rust border before reading the words.
- Body max-width ~760px; every code block and table in an
overflow-x: autowrapper;<title>at the top of the file. - One favicon per day, stable across redeploys.
#Publishing & durability
- Write lesson HTML to the session scratchpad, publish with Artifact, THEN copy the file to
~/.claude/study/<bootcamp-slug>/dayN-<topic>.html. macOS wipes/tmp; the published artifact survives but the source does not. - Same-session updates: edit the file, republish the SAME path (keeps the URL).
- Cross-session: restore from
~/.claude/study/...into the new scratchpad, edit, publish withurl:set to the existing artifact URL (find it in memory, orArtifact action:"list"). - Record every artifact URL in memory the moment it is published.
#Adapting this to another stack
The Convex specifics are an instance; the process is the point. To retarget:
- Phase 0 doc list → that framework's canonical reference pages.
- Find its drift line — the API change that invalidates existing tutorials. Every fast-moving framework has one, and it is the highest-value thing you can tell a learner. (Convex: table-name-first document API. Next.js: App Router vs Pages.)
- Reorder days by what is expensive to reverse in that stack.
- Keep everything else: story anchors, deliberate-bug drills, blind checkpoints, gating, and the honesty rules.