Saving your own assignment templates
Once an assignment shape works — instructions, rubric, attempt cap, peer-review setup — save it as a template. The next assignment is a tweak away, not a rebuild.
- Why templates exist
- The starter templates Red Stet ships
- Saving an assignment as a template
- What actually gets saved
- Applying a template to a new assignment
- Per-teacher scope — yours alone
- Cross-classroom reuse
- Managing the library — edit, rename, delete
- Where templates are stored
- Copy-on-apply — past assignments don't change
- The "All options" demo template
- Related docs
Why templates exist
A working assignment carries a rubric, style preset, attempt cap, target word counts, sub-tasks, reference links, self-assessment prompts, sometimes peer review, sometimes variants. Fifteen-plus decisions deep.
Click From template… in the New Assignment modal, pick the shape, the form fills in. Week-specific content — passage, question, due date — you fill in fresh.
Templates are shapes, not lessons. Structural decisions that travel across weeks, classes, and years.
The starter templates Red Stet ships
The picker isn't empty on day one. Six starters cover common secondary and early-college writing patterns:
- Close reading essay — 500–800 words, MLA, 4-criterion rubric.
- Research paper — 1200–1500 words, APA, 5-criterion rubric with counterargument; 2-attempt cap.
- Persuasive essay — 600–900 words, 4-criterion rubric weighted toward audience awareness.
- Reflection journal — 300–500 words, single attempt, no rubric — engagement-graded.
- Discussion post — 150–250 words plus a reply, single attempt, no rubric.
- All options demo (kitchen sink) — every field populated (see below).
Starters live in code, identical for every teacher. To tweak one, apply it, change what you want, then Save as template.
Saving an assignment as a template Save as template
Fill out the New Assignment modal, click Save as template in the header. The name prompt pre-fills with the assignment's title — usually just hit Enter.
The name is for you; students never see it. "Close reading — short prose" beats "Lit assignment 1". Picker sorts by most-recently-updated.
To build outside the modal: the Assignment templates panel on the dashboard has a + button for a dedicated editor. Useful when stocking the library at the start of a year.
What actually gets saved
The modal's Save-as-template button captures the reusable fields:
- Title — placeholder for the new assignment.
- Instructions — the markdown body.
- Style preset —
chicago,ap,apa, ormla. - Max attempts.
- Rubric — criteria with names and descriptors.
The dashboard editor adds two more: a description (note to your future self) and a default due-date offset in days — 14 pre-fills the due date two weeks out.
What's not captured by Save-as-template: sub-tasks, reference links, self-assessment prompts, peer-review config, variants, target word/page/citation counts. The kitchen-sink starter shows these exist — apply it and tweak.
Applying a template to a new assignment From template…
Open the New Assignment modal, click From template…. The picker has two sections:
- Starter templates — always visible.
- Your saved templates — newest-touched first. Empty libraries show "no saved templates yet."
Each card shows name, meta summary (style preset, attempt cap, rubric size), and the first 180 instruction characters. Click; modal fills in, picker closes. Fill in the assignment-specific bits — due date, classroom.
Applying overwrites whatever you'd typed. Cancel if you opened the picker by mistake.
Per-teacher scope — yours alone, with explicit sharing teacherUserId
Every template you save is yours. Backend keys each row by teacherUserId; listMine returns only the caller's rows. Co-teachers don't see your library; you don't see theirs.
To bridge, Share any saved template into one of three scopes:
- Co-teachers — every staff member on the originating classroom gets a notification; the template lands in their Shared with you sub-section.
- Department — set a label (e.g. "English department"). Anyone with the same label sees the row.
- Organization — school-wide. The cross-org admin surface ships in Phase 9; today, org rows land in the table but only the owner sees them.
Sharing is a copy. The receiver's Import mints a new row — no live link back. Later edits to the shared template don't reach existing imports.
JSON export / import
For teachers in different orgs, the Shared with you section has an upload-arrow button for a JSON file. Each row has a download arrow to export. Same shape as shareAssignment minus storage IDs. Hand off the file however; the receiver imports through the same button.
by_teacher index keys each template to its owner.
Cross-classroom reuse
Templates scope to you, not to a class. Save one in AP Lit Period 4 and it's in the English 11 Period 2 picker immediately. No per-class list, no "copy to another class" step.
At term boundaries: when Fall AP Lit archives and Spring AP Lit spins up, no migration — templates were never bound to the class. Build once, apply from any section.
Managing the library — edit, rename, delete
The Assignment templates panel on the dashboard manages everything. Each row carries name, meta (style preset, attempt cap, rubric size, due offset), and three actions: Apply, Edit, Delete.
Edit
Opens the full editor. Save replaces the old version.
Apply to new assignment
Starts from the dashboard, not the modal: click Apply, the active classroom's create form opens pre-filled.
Delete
Removes the template. Past assignments stay intact — each got its own copy at apply time (see copy-on-apply). Permanent; no undo.
Personal reflection-prompt templates personalReflectionPromptTemplates
A narrower second library: reflection prompts. Each template is one tab's worth of self-assessment questions — same shape as assignments.selfAssessmentPrompts.
The reflection-prompts editor inside the modal has two controls:
- Load from template… — dropdown, newest first. Picking one replaces the prompts on the active attempt tab.
- Save as template — captures the visible attempt's prompts. Copied by value; later assignment edits don't write back.
Per-teacher scope (ownerUserId). No shared surface.
Source: personalReflectionPromptTemplates.listMine, create, remove. No edit mutation — delete and re-save to change one.
Where templates are stored teacherAssignmentTemplates
One Convex table — teacherAssignmentTemplates — in convex/teacherAssignmentTemplates.ts. Each row:
teacherUserId— owner;by_teacherindex.name,description— labels.title,instructions— assignment-shape fields.stylePreset,maxAttempts,rubric,defaultDueOffsetDays— pre-fill values.createdAt,updatedAt.
Three mutations: create, update, remove. All require teacherStatus === 'verified'; update/remove check ownership.
Starters live in public/app.js as STARTER_TEMPLATES. Never hit Convex, never count against your total, change only on app deploy.
Copy-on-apply — past assignments don't change
Apply copies the template's fields into the new assignment. From there the assignment owns its own rubric, instructions, everything. Edit the template later — the published assignment doesn't move. Delete the template — the assignment is untouched.
The flip side: a typo fix doesn't propagate. Past assignments keep the typo until you edit them directly.
The "All options" demo template
The last starter — All options demo (kitchen sink) — is a tour, not a pattern. Every field the modal supports is populated. Fastest way to see how each section renders for students.
What's in it:
- Markdown body with headings, bold/italic, inline code, block quote, code block, link.
- Starter body — text Red Stet pre-fills into the student's doc.
- Target word count (600–900), pages (2–4), citations (3).
- 4-criterion rubric.
- Four sub-tasks with weights.
- Three reference links.
- Three self-assessment prompts (two required, one optional).
- Peer review, two reviewers, anonymized.
- Two variants —
eslandextended-time.
Apply to a throwaway assignment and walk the modal; apply to a sandbox student account and see the other end. Creating an assignment covers each section in detail.
Sharing surfaces — where templates land for others
Receivers see shared templates in the Shared with you sub-section under Assignment templates. Each row: owner's name, scope ("co-teachers", "department", or "org"), preview with rubric count + peer-review flag.
Two actions per row:
- Import copies into the receiver's library. From there: edit, share onward, or apply.
- Export (down arrow) downloads as JSON for hand-off to another org.
Co-teacher scope fires a bell notification. Department and org scopes are silent — discovered on next visit.