Scaffold practice project
How I work, encoded as skills — 88 portable AI SKILL.md files (research, design, AI-product, motion, code, business). Fork it, make it yours. Inspired by @mattpocock + @emilkowalski, grounded in NN/g.
npx -y skills add dineshrevunuru/SuperSkills --skill scaffold-practice-projectAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 25 days oldThe repository was created 25 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Scaffold a small buildable practice project — a green-running baseline with one deliberate gap — to learn a concept by BUILDING it, not reading about it. Use when Dinesh says 'let me build a tiny thing to learn X', 'scaffold a practice repo/sandbox', 'set up a project to try Y', 'I learn this by making it', 'give me a failing test to implement', 'stub out an exercise for this pattern', or when a teach-me lesson needs its build-to-learn artifact stood up. Generalizes course-exercise scaffolding (problem/solution/reference split, one-command run, a red baseline you turn green) to any solo React/Next/TypeScript practice repo — defaults to a single throwaway file and mode-switches up to a minimal framework repo only when the framework IS the concept.
The file declares its own license as MIT — forked from `scaffold-exercises` in mattpocock/skills (© Matt Pocock). The scaffold-to-a-passing-baseline method and the problem/solution/explainer split are generalized; the course CLI linter, section/exercise numbering, and ai-hero repo assumptions are dropped in favor of a solo local scaffold.. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
14.1 KB, ~3.2k tokens by cl100k_base, as published. Nobody here has run it
Scaffold Practice Project — Green Baseline + One Deliberate Gap
Scaffold the gap, not the answer: stand up the smallest thing that runs green, then cut one deliberate hole — a red test or a // TODO — that only building can fill. Learning by making, not by reading a finished example.
When to use / when NOT to use
- Use when standing up a tiny buildable sandbox to learn a pattern by making it; converting "I want to understand X" into a failing test to implement; stubbing a practice exercise (for yourself, or a set for the 100x cohort); or standing up the
builds/NNNNartifact ateach-melesson calls for. - NOT
teach-me— that owns the multi-session pedagogy (mission / glossary / zone-of-proximal-development / learning-records). This skill just stands up ONE practice scaffold, whichteach-mecalls into. If the goal is progress that persists across weeks, route there; this is the scaffold it uses. - NOT
build-coded-prototypes— that owns throwaway artifacts that answer a design question and then hit a disposition ritual. A practice scaffold answers "can I build this pattern from scratch?", not "which design is right?" - NOT
research-technical-docs— that owns reading docs to ship a task. Here the reading is only the cited minimum a gap needs; the point is the build.
Two paths — mode-switchable
- Scrappy (single throwaway file): the concept survives outside a framework — a reducer, a hook's logic, a parser, an algorithm, a type-level puzzle. One
x.ts+ a failingx.test.ts, run withtsx/ Vitest. Stands up in minutes. - Rigor (minimal framework repo): the framework is the concept — RSC, a real route/loader, hydration, a component tree, a browser API. A minimal Vite or Next scaffold, one
pnpm dev/pnpm test, and the gap/sealed-solution/reference split as folders.
Recommended default: scrappy single file whenever the pattern survives outside the framework; rigor only when removing the framework removes the concept. When unsure, scrappy — a passing single file graduates into a repo later; an unused repo never shrinks back.
Intake gate — ask only the gaps
Discover silently (do not ask):
- The concept and its smallest observable success move — infer from context.
- Stack = React / Next / TypeScript unless he says otherwise.
- Whether you're already inside a
teach-meworkspace — scan cwd forMISSION.md/builds//learning-records/. If so, this scaffold lands as the nextbuilds/NNNNand you skip re-interviewing. - Whether the gap renders UI (→ load
design-tastebefore the baseline).
Ask Dinesh (each with a default):
- The one success move — "after this, from a blank file, you can ___." (Default: infer the smallest capability, confirm in one line.)
- Scrappy file or minimal repo (Default per the mode rule.)
- Standalone throwaway, or a kept artifact in a teach-me workspace (Default: standalone local, unless a workspace is already here.)
One batched round; proceed on the defaults. If every gap has a safe default, state them and build.
The scaffold parts (situational menu — one default, not a march)
Include each only when it earns its place. "Process is dead": a scrappy scaffold may be two files.
| Part | What it is | Include when… |
|---|---|---|
| Green baseline | skeleton that compiles/runs/tests green, the interesting part absent | always — the floor that makes a later red mean your gap, not a broken setup |
| The gap | one red spec or // TODO with a checkable done-condition | always — this IS the skill; a scaffold with no gap is a tutorial |
| Sealed solution | reference impl kept out of sight (a solution branch / folder) | when there's a right answer to check against; skip for open exploration |
| Minimum-knowledge ref | a tiny cited cheat-sheet, only what the gap needs | jargon- or API-heavy concept; skip for a plain-logic gap |
| One-command run | pnpm test / pnpm dev / tsx, wired into the existing runner | always |
| Structured section/exercise tree | Pocock's XX-section/ + XX.YY-exercise/ split (renumber with git mv to keep history) | ONLY when authoring a set for others (cohort/course) — never for solo practice |
The method (scaffold, then hand the gap over)
- Write the success move. One line at the top of the README / file: "After this, from a blank file, I can ___." Same discipline as
build-coded-prototypes' Step 0. If you can't write it, you don't have a concept yet — narrow it. - Pick the vehicle per the mode rule. The framework-is-the-concept test decides scrappy vs rigor.
- Stand up the green baseline. Skeleton runs/tests green with the concept missing. One command in the project's existing runner — add no new package manager or runtime just to practice. This is Pocock's "lint passes," generalized: the floor is it runs green.
- Cut ONE deliberate gap. Stub exactly the piece the concept lives in — an empty function body, a
// TODO, a failing spec that names the transitions — and nothing else. The done-condition is checkable (a spec goes green, an assertion holds), never "looks right." One concept, one gap; a second concept is a second scaffold. - Seal the solution. Write the reference impl, then put it out of sight — a
solutiongit branch, asolution/folder you don't open. Peek only after an honest from-the-stub attempt. Reading the answer and feeling you get it is the confirmation trapname-and-control-biasnames — the control is filling the gap from the stub, not recognizing the solution. - Ground only what the gap needs, cited. If the concept has API surface or jargon, add a small cheat-sheet with the minimum from a primary source — claims about how the API behaves follow
craft-critique's evidence discipline (cite / get / flag). A scaffold that ships a full tutorial to read has become the thing it exists to replace. - Hand the gap over; close the loop tight. He fills the stub; red→green (or the TODO's assertion) is the automatic feedback — better than a verdict from you. If the gap renders UI, load
design-tastefirst; if it doesn't, that step does not apply — skip it, don't perform it. - Disposition. Kept (a
teach-mebuilds/NNNNbuild-to-learn artifact — kept, not deleted; a separatelearning-recordfollows only once the concept is rebuilt from a blank file) or folded-and-discarded (standalone: the learned pattern lands in real work, the scaffold goes).teach-meowns the kept case;build-coded-prototypesowns the discard ritual.
Worked example — scaffolding a repo to learn useReducer by building it
Ask: "I keep reaching for useReducer and copying examples. I want to actually own it — set me up a practice project."
- Success move: "From a blank file, write and drive a typed reducer for a small fetch machine (
idle → loading → success | error), without looking it up." Not "understand useReducer" — an observable capability. - Vehicle: a reducer is a pure
(state, action) => state— it survives entirely outside React. Framework is not the concept → scrappy single file. First failure this catches: reaching forcreate-next-appto practice a pure function — a whole repo is over-scaffolding, and every extra file is a place for the setup, not the concept, to break. - Green baseline:
fetchMachine.tsexportingtype State,type Action, and areducerthat returnsstateunchanged;fetchMachine.test.tswith the transition specs;pnpm vitestruns — and every spec is red. Green floor = it runs; red = the gap, by design. - The gap: the
reducerbody is a singlereturn state. The failing specs name every transition (loadingonFETCH;success+ data onRESOLVE;erroronREJECT; ignoreRESOLVEwhileidle). Done-condition is exact: all specs green. One gap — nouseReducer-in-a-component yet; that's a second scaffold once the pure reducer is owned. - Seal the solution — the big failure this catches: the naive "practice project" is the finished reducer with tidy comments explaining each case. He'd read it, nod, and still copy the next one — fluency, not storage strength. Here the working reducer lives on a
solutionbranch he doesn't check out until he's tried; the sealed gap forces retrieval + construction. Recognizing the answer is exactly the trapname-and-control-biasflags. - Ground it: a 6-line
reducer-cheatsheet.md— only the discriminated-union action shape and the exhaustive-switchrule, from the React + TS handbook docs (cited percraft-critique), not a blog tour. - Hand over: he fills the body until
pnpm vitestis green. No UI here, so thedesign-tastestep does not apply — stated and skipped. - Disposition: standalone, so once green he folds the pattern into the real component that needed it and deletes the scaffold — the decision lands in
main, the practice repo doesn't. Had this been ateach-melesson,builds/NNNN-fetch-reducer/would be kept (not deleted) as the build-to-learn artifact instead — alearning-recordfollows only once he rebuilds the reducer from a blank file.
Anti-patterns / red flags
| Don't | Do |
|---|---|
| Scaffold the finished example with explanatory comments | Ship a green baseline with one sealed gap you fill from a stub |
create-next-app to practice a pure function | Scrappy single file whenever the pattern survives outside the framework |
| Leave the gap's done-condition as "looks right" | A failing spec or TODO with a checkable, exact done-condition |
| Cut three gaps into one scaffold | One concept, one gap; a second concept is a second scaffold |
| Keep the solution open in the next tab | Seal it (branch/folder); peek only after an honest attempt (name-and-control-bias) |
| Read the solution and call it learned | Fill the gap from the stub — retrieval + construction, not recognition |
| Ship a full tutorial README to read | The minimum knowledge the gap needs, cited per craft-critique |
| Wire a numbered section/exercise tree for solo practice | Local single scaffold; the course tree is only for authoring a set for others |
| Add a new package manager or runtime for the sandbox | Reuse the project's runner; one command to run |
| Render a practice UI in the generic look | Load design-taste first — it's still his work |
Output format
When asked to plan a scaffold before building it, emit this and get a nod first:
SCAFFOLD PLAN — [concept]
Success move: [from a blank file, I can ___]
Vehicle: [single file / minimal repo — and why (framework is / isn't the concept)]
The gap: [the one stubbed piece + its checkable done-condition: spec green / assertion holds]
Sealed as: [solution branch or folder — or "open exploration, no sealed solution"]
Grounding: [the primary source the cheat-sheet cites — or "plain logic, none needed"]
Run: [the one command]
Disposition: [kept as a teach-me build / folded-and-discarded]
When building, the deliverable is the running green baseline with its one sealed gap — never the filled-in answer.
Boundaries
teach-meowns multi-session learning pedagogy (mission / glossary / ZPD / learning-records) and calls this skill to stand up each build-to-learn artifact; this skill owns standing up ONE practice scaffold.build-coded-prototypesowns throwaway artifacts that answer a design question plus the disposition ritual; this skill owns a kept-or-folded learning scaffold that answers "can I build this pattern?".research-technical-docsowns docs research done to ship; this skill's reading is only the cited minimum a gap needs.design-tasteowns every taste value a rendered practice screen honors;craft-critiqueowns the evidence discipline behind the cited cheat-sheet;name-and-control-biasowns the confirmation control behind sealing the solution. Reference, never restate.- Maintenance law: a new skill earns a row in SKILL-MAP.md and a route in
ask-dinesh— do both in the pass that ships this, or the index and router lie.
Sources
- Forked from
scaffold-exercises— mattpocock/skills, MIT (© Matt Pocock), "Skills For Real Engineers." Adopted: scaffold-to-a-passing-baseline (his lint-green floor → generalized "runs green"), the problem/solution/explainer split (→ the gap / sealed solution / cited cheat-sheet), the one-command run, andgit mvfor renames. Generalized/dropped: the course CLI linter (ai-hero-cli internal lint), theXX-section/XX.YYnumbering, and the ai-hero course-repo assumptions — replaced by a solo local scaffold that mode-switches up to a structured exercise tree only when authoring a set for the cohort. The source rubric would strip the Don't/Do table; this library keeps it, each ban paired with its Do. - Build-to-learn / research-through-making is the shared instinct with
teach-me(named there); the learning-science grounding (storage vs fluency strength — Bjork) lives inteach-me, referenced not restated.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.