Nothing in here is a lecture. A workshop is two things: a deck you can present, and one app that already runs — small enough to read in a sitting. No install, no npm, no accounts: if you can open this page you can do the work. Walk out with the thing built.
The shelf
How every workshop is built
Same three passes at the same artifact, every time. People quit this subject when night one is forty new words and a blank file. They don't quit when they watched it work first.
I do
Hands off keyboards. Typing along means debugging instead of watching. The instructor builds the smallest version that works.
We do
Keyboards up, nobody types ahead. A checkpoint after every step — “you should see this. Thumbs up.”
You do
Three TODOs in a file that already runs. An answer key exists, and looking at it is allowed. Saying STUCK out loud is encouraged.
The live editor
A workshop folder is the app: an index.html and a
js/main.js that open and run straight off disk — no server, no build
step, nothing installed. The live editor is a full-screen editor over
those files: a sidebar you pull files from, the code in the middle, the running app on
the right. Click the red live editor chip on any card above.
Every run rebuilds the preview from scratch, so nobody debugs state left over from the last attempt. Errors land in the console in red, with the line number counted from line 1 of the file you are editing. Your edits are kept per file, so a refresh costs nothing — and Reset all puts everything back.
Every js/main.js ends with a BREAK IT ON PURPOSE list: a
few things to change, and what each one teaches when it goes wrong. Delete an
await and you get [object Promise] — you printed the
waiting instead of the thing. That is a better lesson than a paragraph about promises,
and it costs one keystroke.
Add the next workshop
Fifteen minutes of setup, then you're writing content. The template is a working app with the words taken out — it opens and runs before you change a thing.
- Copy
workshops/_template/toworkshops/0N-your-slug/. - Rewrite
REF-deck.html. Arrow keys drive it,Ctrl+Psaves it as a PDF. Do not touch the<style>block — the palette is the house palette. - Rewrite the app:
index.htmlandjs/main.js. Only the lesson's code — if a feature is not the lesson, it is something a student reads past to find the point. - End
js/main.jswith a BREAK IT ON PURPOSE list. - Run
python tools/build-playground.py. It reads your app and writesplayground.html— nothing to maintain by hand. - Add one object to
js/workshops.js, withlive: true. The card and the live editor chip build themselves. - Teach it to real people, then change
statusto"ready". That word means survived a cohort, not finished writing.
Full checklist in CONTRIBUTING.md, including the parts of the house style
that are not up for redesign.
The source tree
Plain static site. Pages are HTML, styles are CSS, scripts are JS, and the whole thing is served straight off GitHub Pages. There is no build step to break.