Variants — differentiated assignments
One assignment, multiple prompt versions, routed by per-student tags. ESL, extended-time, honors stretch — no duplicate assignments, no follow-up DMs. The student opens the assignment and sees the version routed to them.
- What variants solve
- The tag → variant routing model
- Tagging students on the People tab
- Creating a variant on an assignment
- What a variant overrides (and what it doesn't)
- Routing order and the first-match rule
- The default variant — empty target tags
- How the student-side experience differs
- Privacy: what each student can and can't see
- Submissions stay bound to their variant
- Manually overriding a student's variant
- Tag autocomplete
- Common patterns — ESL, honors, extended-time
What variants solve
Every writing class is three classes inside one — students reading at grade level, two below, two above; an IEP student who needs a simpler prompt; an ESL learner who'd write more if the prompt were shorter. Without variants you build three assignments and track which student got which, or send differentiation in a DM (untracked).
One assignment, labelled versions, routing from a tag on each student's enrollment. Your roster is the source of truth.
Variants are part of the assignment. Move the due date or change the rubric — every variant inherits.
honors matchedesl matchedextended-time matchedThe tag → variant routing model
Two pieces: tags on enrollments and target tags on variants. Free-form strings — no enforced vocabulary. Use esl, ell, level-2.
Tags live on the enrollment — the row connecting a student to one classroom. Ava tagged honors in AP Lit isn't tagged in Creative Writing.
Tags normalize on save — trimmed, lowercased, de-duplicated. Matching is lowercase.
honors in Period 4 doesn't affect Period 6.
classroomId · studentUserId · joinedAt · tags: ["esl"]
label: "ESL" · targetTags: ["esl"] · instructionsMd: …
tags and walks each variant's targetTags looking for an overlap. First match wins.
Tagging students on the People tab enrollments.tags
Class → People. Each row has a tag area. Type into + tag, press Enter or comma to commit. Chip saves immediately. × removes.
No cap. A student tagged esl and extended-time matches either variant — see routing order.
Tag hygiene
The biggest cause of broken routing is a typo gap between enrollment tag and variant target. esl vs ELL doesn't match. Tag autocomplete takes the edge off.
Who can see tags
Teachers and co-teachers read and edit. TAs read only. Students never see tags — never on the profile, never in verify UI.
Creating a variant on an assignment assignments.variants
In the New/Edit assignment modal, scroll to Variants. + Add variant. Three fields:
- Label — e.g. ESL, Honors, Extended time. The student sees this as a pill — keep it clarifying, not jargon.
- Routes to students tagged — chip list. Any overlap with the student's tags makes this variant a candidate (OR). Empty list → default variant.
- Overrides — replacement instructions (markdown) and starter body. Blank inherits the base.
↑ / ↓ reorder; × deletes. Variants ship with the assignment on save.
What a variant overrides (and what it doesn't)
Variants are precision tools, not full forks. Overrides:
- Instructions — the markdown prompt. Most variants live here.
- Starter body — pre-filled editor text. Useful for ESL sentence frames.
- Attachments — variants share base attachments.
Shared:
- Title and due date
- Rubric and targets — same standards. A softer rubric per population is a grading-practice conversation.
- Sub-tasks
- Peer-review config
- Attempts cap, late policy, style preset
Routing order and the first-match rule
Red Stet walks variants top-down and stops at the first overlap with the student's tags. No merging — one prompt, not a blend.
Matters when a student has multiple tags. Diego with esl and extended-time sees whichever variant ranks higher.
How to order
Most specific first, most general last. "Severely-modified" at the top, catch-all "ESL" lower, empty-targets default at the bottom.
No tags or no match → base (or default variant — next section).
extended-time, esl gets variant 2 — extended-time is more specific and ranked higher.
The default variant — empty target tags
Empty target tags = catch-all. Matches any student no earlier variant matched.
Use for inverted setups — most of the class on the harder version, a few on the easier one. Two patterns:
- Harder in the base, Standard variant targeting
standard. Works, but requires tagging every standard student. - Easier in the base, Honors default with no targets. Untagged students get Honors. No tagging needed.
Lets the "what most students get" version live outside the base — useful when the canonical artifact should read as a standard prompt.
How the student-side experience differs
The assignment looks normal. One signal: a pill near the top of the info panel — Variant: ESL, Variant: Honors.
Hovering the pill shows the matched tags. Disclosure matters — accommodation policies usually require it. No pill on the base assignment.
Everything downstream — editor, targets, rubric, materials, submit, gradebook — is identical. No chooser; students can't switch versions.
Privacy — what each student can and can't see
- Students don't see other students' variant labels. Diego sees his pill; Ava sees hers. Neither sees the other's content or knows the other is on a different variant.
- Students don't see other students' tags. Teacher/co-teacher/TA only. Even with roster visibility on, tags stay hidden.
The honest caveat
Resolution is server-side. The Convex query reads tags, picks the variant, ships only that variant's content. Other variants stay on the server.
The resolved label travels to the client as resolvedVariantLabel. The content of other variants doesn't.
Use neutral labels — the resolved label is visible to the student. Don't put accommodation specifics ("IEP version") in the label.
Submissions stay bound to their variant submissions.variantId
On first edit, Red Stet stamps the variant id onto the submission. From there, the submission is anchored regardless of routing changes.
Routing is volatile. You can:
- Add or remove an enrollment tag
- Add a new variant mid-flight
- Change a variant's target tags
- Reorder variants
- Edit variant instructions or starter text
None retroactively change what an in-progress student writes against — unless you push an assignment update (see Creating an assignment).
The grade view shows each submission's variant, so you can filter to "ESL variant only" while grading.
variantId: "var_esl_a3f"Captured at first edit. Variant frozen.
esl. Add honors.Diego's submission still bound to ESL variant.
Manually overriding a student's variant assignmentVariantOverrides
The escape valve for one-offs — a student who needs a different variant on a single assignment without restructuring tags.
Gradebook row's kebab → Override variant opens a picker (every variant plus base). Pick, save. The row shows a pill.
Stored per (assignment, student), takes precedence over tag routing. Student sees it immediately; in-flight submissions keep their existing binding. Clearing the override falls back to tag routing.
Tag autocomplete classrooms.listUsedTags
Tag inputs show a <datalist> of every tag in use in the classroom. Pick a suggestion, commit — same chip as a freshly typed tag.
The list is the union of every tag on every enrollment. Updates as tags change.
Kills the silent miss — Diego tagged esl, teacher types ell on a new variant, routing breaks for a week. With autocomplete, esl is the first suggestion.
Common patterns — ESL, honors, extended-time
ESL / multilingual learners
Tag esl. ESL variant: shorter instructions (50-60% the length), simpler sentences. Same rubric and word-count — differentiate scaffolding, not standard. Sentence-frame starters ("In this story, I want to tell you about…") often help more than rewording.
Extended-time / IEP accommodations
Tag extended-time or iep. Same prompt restated as numbered steps, bullets on long paragraphs, requirement front-loaded. Keep the due date; for more time, use a per-student extension, not a variant.
Honors / stretch
Tag honors. Base prompt plus a "Push further" section requiring synthesis, counter-evidence, or meta-reflection.
Related
→ Creating an assignment — every section of the New Assignment modal.
→ Setting up your first class — People tab and roster basics.
→ Co-teachers and TAs — who can edit roster tags.
Hit a routing edge case this doc didn't cover? Email feedback — this doc grows by use.