Sub Plan in a Box
“Out sick? Your class still learns.”
Illustrative team — open seats are real invitations.
- Build mode
- assemble on blocks
- Built on
- @k12vls/worksheet-core + @k12vls/curriculum
- Output
- printable packet
The brief
What it is, and why a teacher says yes
The pain point
A teacher out sick scrambles for a sub plan, or the class loses a day. Teachers already lose sleep over this — it’s an acute, recurring, known problem.
What it does
Teacher picks grade + standard, and it generates a substitute packet: a worksheet aligned to that standard, its answer key, and a plain one-page plan a non-specialist sub can run (“hand these out, here’s the warm-up, here’s what ‘done’ looks like”).
Why it's adoptable
It solves an acute, recurring problem and touches no student data at all — the easiest possible “yes” from a teacher. A student leader can hand over a finished packet the same week.
What the teacher receives — a synthetic example
The surface they use
Build a substitute day
Out tomorrow? ~20 seconds.What a teacher opens to produce the sheets below. You assemble this surface from the blocks — see “How you build it.”
What they get back
Fractions — Practice
- Shade 3/4 of the shape.
- Mark 1/3 on the number line.
- Write the fraction shaded.= ____
… ~5 more problems …
Substitute Plan — Grade 3 Math (≈30 min)
- Warm-up (2 min)
- Ask: what fraction of a pizza is one slice of 4?
- Hand out
- The worksheet (one per student).
- Work time (20)
- Students work; circulate. No need to teach.
- 'Done' means
- Every problem attempted — not all correct.
- Collect
- At the bell. Leave in the tray.
Illustrative mockup. All example data is synthetic — no real student data.
The graduation signal
“Built” doesn't count — real, repeated use does. Here's the ladder.
- 1
Pilot
Pilot (teacher-side): a teacher uses it for one real unplanned absence instead of the old scramble.
- 2
Active use
Active use (teacher-side): the same teacher reaches for it the next time they’re out — repeat use across absences, not a one-off.
- 3
Sustained MAU
Sustained MAU (teacher-side): a handful of teachers who each reach for it every time they’re out, month over month — it’s become their default sub plan; student participants aren’t counted by login but can be estimated from classes served.
For the AI Builder
How you build it
The honest build path — what it builds on, the rough assembly, the data flow, and the gaps the blocks don't give you for free.
Blocks it builds on
- @k12vls/worksheet-core — provides the CCSS standards model (GradeID, CCSSStandard, the StandardsTree type), problem-generation config + record types (CcssProblemGenerationConfig, CcssProblemRecord), the problem-generation prompt surface (getProblemGenSystemPrompt(subject) plus exported prompt constants), rendering UI (@k12vls/worksheet-core/ui — MathMarkdown, DiagramRenderer, ObjectRenderer), and a PrintOptions type.
- @k12vls/curriculum — curriculum content-node utilities to tie packets to curriculum content; the grade/standard browsing itself comes from worksheet-core’s CCSS model, not a curriculum ordering API.
Rough assembly
- 1Pick — a grade + standard selector populated from the worksheet-core CCSS standards tree, plus a packet-length input wired to numProblems on the config (fewer for ~30 min, more for ~55).
- 2Generate — call the LLM with the worksheet-core prompt surface (getProblemGenSystemPrompt(subject), or the exported prompt constants via a thin app wrapper) plus a CcssProblemGenerationConfig (numProblems required) to produce the problems and their answers.
- 3Render — display the worksheet and answer key with the worksheet-core ui components.
- 4Sub sheet — generate a short plain-language run-of-show (a second, simpler LLM call or a fixed template) so a non-math sub can run the period.
- 5Print — apply PrintOptions and the app’s own print layout/CSS; the teacher prints to paper or “Print → Save as PDF.”
The data flow
CcssProblemGenerationConfig from the selection.getProblemGenSystemPrompt.CcssProblemRecord.worksheet-core/ui.PrintOptions to the rendered packet and the sub sheet.Caveats — the honest gaps
Scope boundaries
This is a packet generator, not an LMS: it doesn’t collect student work, track scores, save sessions, or persist anything once the packet is printed — keeping it out of that scope is what holds the “no data” safeguarding profile.
For the AI Champion
Taking it to a teacher
The adoption kit — the pitch, the pain it lands on, the objections you'll hear, and what a real pilot looks like.
The 30-second pitch
“You know the panic when you wake up sick and have nothing for the sub? Pick your grade and today’s standard, and this prints a full packet — worksheet, answer key, and a one-page plan the sub can just follow. No logins, nothing for you to set up.”
The pain it lands on
The emergency-absence scramble — specific, vivid, and one every teacher has lived.
Objections → responses
“Is it aligned to what I’m actually teaching?”
It’s generated from the Common Core standard you pick, so it targets exactly that skill.
“Will my sub be able to run it?”
That’s the one-page plan — written for a non-specialist.
“Where does my students’ data go?”
Nowhere. It generates a printable; no student logs in, and no student data is stored. The packet itself is yours to keep or reprint, like any worksheet — it just carries no student data.
What a pilot looks like
The teacher keeps it in their back pocket; the real test is the next unplanned absence. Success = they used it instead of the old scramble, and would again.
The bar
Safeguarding & the pilot gate
The minimum conditions before any classroom use, and the data posture that keeps the solution honest.
Pilot gate
- Sponsoring adult
- The classroom teacher who’d be out (sponsoring teacher is required program-wide).
- Minimum version
- Generates a real packet — worksheet, answer key, and one-page sub sheet — for a picked grade + standard, and prints (or saves as PDF). Not a demo of the picker alone.
- Pilot setting
- A real absence or sub-covered class period — the packet must be run by an actual sub with the class, not merely reviewed by the teacher. A genuinely unplanned absence is the strongest proof, but a planned/known sub day counts so the AI Champion can schedule the pilot.
- Success evidence
- The teacher used it instead of the old scramble for one real absence (mirrors the Pilot rung).
- Stop condition
- Immediate — at review the sponsoring teacher judges the packet unusable by a non-specialist sub, inaccurate (bad answer key), or misaligned to the standard they picked, and won’t send it in. Over the pilot — the sub or class couldn’t actually run it as intended.
Safeguarding
Lowest loadData touched
No student data. The teacher-selected grade + standard are used to generate the packet (and pass through the LLM problem-generation call); no student login, no student PII, no uploads, no completed work. No student data is persisted; the generated packet is ordinary lesson material the teacher may print, save, or reuse, and it carries no student data (until a student writes on the paper, off-tool).
Checklist
- Sponsoring teacher ✓ (required program-wide).
- Data-handling review n/a (no student data).
- Consent n/a.
- Supervision = ordinary classroom use.
- Content review applicable — the worksheet, answer key, and sub run-of-show are LLM-generated and get worked by students under a non-specialist sub, so the sponsoring teacher verifies correctness, answer-key accuracy, standard alignment, and suitability before the packet is used (a required classroom quality/safeguarding gate, not a data-handling item).
One thing to verify
That the build path genuinely avoids requiring a student/teacher login (see the firebase-auth caveat), so the “no student data” claim holds in practice, not just in intent.
What would change the load
The “Lowest” profile holds only as long as the tool stays a print-and-go generator. Adding any of — a login, telemetry tied to a teacher/class/student or assessment history, student uploads or saved work, completed-packet collection, parent contact, or personalized per-student feedback — would put it on the data-handling path and push it higher-risk. (Saving the generic packet or a product-only generation count with no identity is not a trigger — only the identity-linked versions are.) None of these are in scope today; the profile is contingent on keeping them out.
Want to build Sub Plan in a Box?
Tell us this starter caught your eye — or browse the others first.