Red Stet
← Back to Help
Help · For teachers · Tier 3 — Advanced features

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

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.

Ava Chen
tags: honors
Variant: Honors
tag honors matched
Diego Reyes
tags: esl
Variant: ESL
tag esl matched
Ben Kowalski
tags: extended-time
Variant: Extended time
tag extended-time matched
Mira Patel
tags: none
Base assignment
no variant matched, falls through

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

Tags are per-classroom, not per-student-globally. Tagging Ava honors in Period 4 doesn't affect Period 6.
enrollments — one row per student per classroom
classroomId · studentUserId · joinedAt · tags: ["esl"]
assignments.variants — list on the assignment
label: "ESL" · targetTags: ["esl"] · instructionsMd: …
When a student opens the assignment, Red Stet looks at their enrollment's 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.

AC
Ava Chen
[email protected] · joined Aug 28
honors × + tag
DR
Diego Reyes
[email protected] · joined Sep 2
esl × + tag
BK
Ben Kowalski
[email protected] · joined Aug 28
extended-time × + tag

Creating a variant on an assignment assignments.variants

In the New/Edit assignment modal, scroll to Variants. + Add variant. Three fields:

  1. Label — e.g. ESL, Honors, Extended time. The student sees this as a pill — keep it clarifying, not jargon.
  2. Routes to students tagged — chip list. Any overlap with the student's tags makes this variant a candidate (OR). Empty list → default variant.
  3. Overrides — replacement instructions (markdown) and starter body. Blank inherits the base.

/ reorder; × deletes. Variants ship with the assignment on save.

ESL
×
Routes to students tagged: esl
Instructions override
Write a 250-word personal narrative about a moment when you helped someone. Use simple sentences. Include three details you saw, heard, or felt.
Honors
×
Routes to students tagged: honors
Instructions override
Write a 600-word personal narrative that establishes a guiding metaphor in the opening paragraph and returns to it in the close. Synthesize at least one counter-perspective.
+ Add variant

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
ESL
Instructions override
(custom — 250 words, simpler prompt)
Starter body override
(blank — inherit base)
Attachments
(shared with base assignment)
Title, due date, rubric, targets, sub-tasks, attempts, peer review, late policy, style preset — all shared. Override only what you need to change.

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

Order is visible to you, not the student. Students see only their routed variant.
Variant order (top wins on ties)
1. Severe-modified iep-modified
2. Extended time extended-time
3. ESL esl
4. Honors honors
5. Standard default — no tags
A student tagged 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:

  1. Harder in the base, Standard variant targeting standard. Works, but requires tagging every standard student.
  2. 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.

At most one default. Red Stet picks the first empty-targets variant; having two is confusing. For two paths for untagged students, give one a real target tag.
Honors
Routes to: empty — default for everyone unmatched
Instructions override
Write 600 words with a guiding metaphor that returns in the close. Synthesize a counter-perspective.
(base assignment)
Instructions
(the simpler baseline prompt — almost nobody sees this once the default is set)
A default-variant pattern: the canonical assignment reads at the floor, the default variant ships the version most students get.

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.

Personal narrative · final draft
Due Fri, Oct 11 · 11:59 PM
Variant: ESL
Write a 250-word personal narrative about a moment when you helped someone. Use simple sentences. Include three details you saw, heard, or felt.
The pill is the only visible cue. Tooltip on hover shows which of the student's tags matched.

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.

Diego sees:
Variant: ESL
His own tag in the tooltip. The prompt routed to him. That's it.
Ava sees:
Variant: Honors
Her own pill. No knowledge that an ESL variant exists for someone else.
Mira sees:
no pill
Base assignment. No variant exposure at all.
You see:
All variants
The full list in the modal. Who's routed where in the gradebook.

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.

Diego's submission
variantId: "var_esl_a3f"
Captured at first edit. Variant frozen.
You change Diego's tags later
Remove esl. Add honors.
Diego's submission still bound to ESL variant.
Future assignments
Now route to the Honors variant (or wherever the new tag matches).

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.

Ava Chen
honors · variant: Honors override
Diego Reyes
esl · variant: ESL (routed)
Override variant — Ava Chen
Pick which variant Ava sees on this assignment:
Base
ESL
Honors selected
Extended time
Clear override Save

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.

Routes to students tagged
esl
extended-time
ell
Suggestions come from every tag already used in this classroom.

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.

Don't over-tag. If half the class is tagged, routing becomes maintenance. Tag stable needs across multiple assignments; message one-offs.
ESL
Routes: esl ell
Shorter prompt · simple sentences · optional sentence-frame starter.
Extended time
Routes: extended-time iep
Same prompt, numbered steps · bullets · front-loaded requirement.
Honors
Routes: honors
Base prompt plus a "Push further" section — synthesis, counter-evidence.

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.

Back to the help library.

Hit a routing edge case this doc didn't cover? Email feedback — this doc grows by use.