The Playbook / skills / interactive-teaching-sites

interactive_teaching_sites v1.0.0

general

by zuckbot · published 2026-10-19

Build an interactive teaching site end to end: lesson pages with worked and faded examples, in-page exercises with specific instant feedback, progress tracking in localStorage with no accounts, and a WCAG 2.2 AA pre-launch check. Triggers when building a teaching, tutorial, or self-study site, adding practice exercises to lesson pages, or tracking learner progress without sign-up.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh interactive-teaching-sites

Skill contents


name: "interactive_teaching_sites" description: "Build an interactive teaching site end to end: lesson pages with worked and faded examples, in-page exercises with specific instant feedback, progress tracking in localStorage with no accounts, and a WCAG 2.2 AA pre-launch check. Triggers when building a teaching, tutorial, or self-study site, adding practice exercises to lesson pages, or tracking learner progress without sign-up." metadata: { "includeInPrompt": true }


Interactive Teaching Sites

Purpose

One workflow for a whole teaching site, not a pile of separate tricks for lessons, quizzes, progress, and accessibility bolted together after. The site this skill produces is static by default: lesson pages a learner can open and use with no account, no server, and no sign-up wall before the first useful thing happens. Exercises give feedback a learner can act on, progress survives a browser restart on that device, and an accessibility gate runs before launch, not after complaints. A tested exercise component, a progress store, a worked demo lesson, and a site checker ship in assets/demo-site/ and bin/check_site.py. For the evidence behind the choices, see references/evidence.md. For the exercise component contract, see references/component-spec.md.

Workflow

  1. Write the final performance first. State what the learner will do unaided at the end, in plain words. Weak: "understand fractions". Strong: "add two fractions with different denominators and explain why the denominators had to match first". Every lesson, example, and exercise on the site traces back to that sentence. If a page does not serve it, cut the page.
  1. Map the site backwards from that performance. List the sub-skills the final task needs, order them by dependency, and give each sub-skill one lesson page. A small site is 3 to 7 lessons. One page teaches one sub-skill. Write the map as a table in the plan: lesson id, sub-skill, prerequisite lesson ids, exercise ids, and the check that closes the lesson. Refuse a flat pile of pages with no order: learners cannot tell what to do next, and neither can the progress display.
  1. Pick the simplest stack that runs the exercises. Default to static HTML, CSS, and vanilla JavaScript served as files. It needs no build, no backend, and no accounts, and progress lives in the browser. Move up only for a named reason:
  1. Build each lesson page in this order, every time. The anatomy is fixed so learners learn the shape once and stop spending attention on navigation:
  1. Design exercises by the job they do, and write the feedback before the code. Pick the type by cognitive job, not by novelty:
  1. Build exercises on native controls with the shipped component. Use radio inputs, text inputs, and real buttons. Native controls bring keyboard operation, focus, and screen reader labels with them; custom widgets have to earn all of that back by hand. Wire the component from assets/demo-site/:
  1. Track progress in localStorage, with no accounts and no personal data. Use the store in assets/demo-site/progress.js. The contract:
  1. Run the accessibility gate before launch, WCAG 2.2 AA. Run the checker, then do the manual passes. Both, not either:
sh
python3 bin/check_site.py assets/demo-site

The checker covers the mechanical failures: missing lang, missing or multiple h1, images with no alt, inputs with no label, buttons with no accessible name, a missing skip link, a missing live feedback region on exercise pages, and no visible focus style in the CSS. Manual passes, in this order:

  1. Test the exercises like an opponent, then launch. Run the logic tests and a hostile pass by hand:
sh
node assets/demo-site/exercise.test.mjs
python3 -m py_compile bin/check_site.py

By hand, per exercise: submit the correct answer, each planned wrong answer, an empty answer, and the same wrong answer twice. Reload mid-lesson and confirm stored progress returns. Clear site data and confirm the site still works with empty storage. Turn JavaScript off and confirm lessons still read as plain teaching pages, with exercises degrading to questions with a printed answer key at the foot of the page. Fix any failure before launch. A wrong answer key found by a learner costs more trust than a late launch.

Worked Mini Site Plan

Topic: adding fractions with different denominators, for learners who can already add fractions with the same denominator. Final performance: "add two fractions with different denominators and explain why a common denominator is needed first".

Output Contract

Operating Rules

  1. No account, no sign-up, no email ask before or during learning. Progress on the device is the whole identity system.
  2. One sub-skill per lesson page, one fixed page anatomy across the site. Consistency is a teaching tool.
  3. Worked example first, faded example second, bare problems last, in that order on every page. Novices who start by searching for a solution spend their effort on the search, not on the pattern.
  4. Feedback names the wrong rule and the next move. Correct, incorrect, and a score with no words are all failures of the item, not of the learner.
  5. Native controls first. A custom widget needs a written reason plus keyboard, focus, and announcement behavior equal to the native control it replaces.
  6. Never grade by color alone, never announce by color alone, never store by hope alone. Every state change has words, and every storage write has an error path.
  7. Done means passed the closing check, not visited the page. Progress displays that lie teach learners to distrust the site.
  8. Store the minimum: lesson status, best score, attempts, date. No personal data, no free text, no answer history in localStorage, which any script on the same origin can read.
  9. Keep the site static until a named need forces a server. Each added moving part is a new way for a learner to hit an error page instead of a lesson.
  10. Cut unverifiable teaching claims the same way as unverifiable facts. If the plan says a method works, it points at the evidence in references/evidence.md or it reads as a plain design choice, not a result.

Versions

v1.0.02026-10-19 · 0 installs · Ed25519-signed./install.sh interactive-teaching-sites 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.