🗂 Material — author here, learners see there
Two source folders in the lab, two learner destinations. Edit or ➕ New page, 💾 Save, then 🚀 Publish from the Dashboard 🚦 Fleet.
| You author (lab) | → Publish | Learner sees | Editable by learner? |
|---|---|---|---|
📦 courses/ |
📦 → vault | 📚 Library — the 🎓 Course menu | No — read-only |
🛠 hubs/build-ai-summer26/course/ |
🛠 → hub | 🛠 their Bench (after 🔄 Refresh) | Yes — it’s their copy |
One rule: in the hub, add new module files each week (never re-edit one learners are working in) → 🔄 Refresh only ever adds, so it can’t conflict.
📚 Courses — where each publishes
Your courses and their destinations, read live from each __course.yml. A second
course targeting another vault or org is just a new folder under courses/
with its own __course.yml. Click a course, then ✏️ Author (open in the
runner) or 🚀 Publish (send just that one to its vault).
📄 Pages of that course
Pick a page and act on it — no URL to type anywhere. ✏️ Author opens it in the runner with the full platform. 🎓 As a learner opens the same lab file through the frame flags (focus + editable), so the loop is edit → reload, with no publish in it. 📋 Copy iframe gives you the Canvas snippet pointing at the published vault copy.
📚 Library — what learners READ (read-only)
Lands in the vault; learners open it from the 🎓 Course menu.
🛠 Bench — what learners WORK IN
Lands in every learner’s bench; they pull it with 🔄 Refresh.
♿ Accessibility — scan, then read
The scan walks the site the way a learner meets it — the components, the
tutorial, and the course pages behind the Build-AI, Databases and
Python doors — against WCAG 2.1 A/AA, and compares with the last run:
existing debt is free, new debt fails. The verdict lands right here, page
by page; the exact nodes stay private in hq/a11y/. About two minutes.