← All starters
Tier 1 starterLowest load

Sub Plan in a Box

Out sick? Your class still learns.

AI Builder
Maya R.open
AI Champion
open

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

k12worx.app/sub-plan — Grade 3 Math

Build a substitute day

Out tomorrow? ~20 seconds.
Generate sub planProduces a worksheet + a no-teaching-required run-of-show.
Ready:PreviewPrintDownload PDF

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

Name: ______________________Grade 3 · 3.NF.A.1
  1. Shade 3/4 of the shape.
  2. Mark 1/3 on the number line.01
  3. 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. 1

    Pilot

    Pilot (teacher-side): a teacher uses it for one real unplanned absence instead of the old scramble.

  2. 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. 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

  1. 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).
  2. 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.
  3. 3Render — display the worksheet and answer key with the worksheet-core ui components.
  4. 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.
  5. 5Print — apply PrintOptions and the app’s own print layout/CSS; the teacher prints to paper or “Print → Save as PDF.”

The data flow

Teacher picks grade + standard.
Build a CcssProblemGenerationConfig from the selection.
Make an LLM call with getProblemGenSystemPrompt.
Receive problems + answers as CcssProblemRecord.
Render the worksheet and key with worksheet-core/ui.
Separately, generate the sub run-of-show from the grade + standard.
Apply PrintOptions to the rendered packet and the sub sheet.
Print or Save as PDF — worksheet, answer key, and sub sheet.

Caveats — the honest gaps

“PDF” means browser-print: worksheet-core exposes a PrintOptions type, not print CSS and not a turnkey generatePDF() — print layout/styles are yours to write at the app level, and the packet becomes a PDF via the browser’s print-to-PDF. Don’t promise a server-side PDF the block doesn’t provide.
firebase-auth dependency: worksheet-core depends on @k12vls/firebase-auth. For a no-login starter, keep generation/printing on a path that doesn’t require a signed-in user; confirm what the package actually requires at runtime before claiming “no login.”

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 load

Data 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.