Add students.
Add one student at a time.
Click + Add student in the cohort panel header. A modal opens with one email field.
- If the email belongs to a Studio user, the studio inserts a
cohort_membershipsrow immediately and the student appears in the enrolled list. - If the email doesn’t belong to a Studio user, the studio inserts an
allowed_emailsrow with this cohort’s ID pre-assigned. The student appears in the pending list. Once they sign in for the first time (any time, no deadline), they automatically promote to enrolled.
Both paths are idempotent — adding an email that’s already in the cohort is a no-op, not an error.
Bulk-import a roster.
Click Import CSV in the cohort panel header. A modal opens with a drop zone and a paste-text fallback.
Step 1 — Upload
Click Choose CSV file and pick the file from your registrar export, or paste the CSV text into the textarea. The studio reads it on the spot — no upload to a server until you submit. Maximum size is 1 MB, which is around 30,000 students; well above any realistic class.
Step 2 — Auto-detection
The parser looks for an email column in two passes. First pass: an exact (case-insensitive) header match for email, email address, or similar. Second pass: scans the first 25 data rows and picks whichever column has the most values matching the standard email regex (name@domain.tld). Whichever pass finds an email column wins.
Optional: a name column. The parser recognizes name, full name, student name, or PeopleSoft-style NAME. Used for display only.
You don’t configure any of this. The parser just runs.
Step 3 — Preview
Once parsed, the modal shows a preview block:
- Email column — the column name the parser picked.
- Name column — if found.
- Rows in file — total data rows (header excluded).
- Valid emails — how many will actually be imported.
- Skipped (no email) — rows missing or malformed in the email column. Yellow.
- Duplicate emails — same address listed multiple times in the file. Counted once. Yellow.
If Valid emails is 0, your file is wrong. Most likely the email column is missing or the values aren’t real email addresses. Re-export from your registrar with email included.
Step 4 — Submit
Click Import. The studio runs each email through the same single-email logic, in a transaction. When done, a green result panel shows:
- Added to cohort — existing Studio users that got new memberships.
- Pre-assigned (will join on signup) — emails added to the whitelist with the cohort pre-set.
- Already in cohort — addresses that already had memberships. No-ops.
- Already pending — addresses already on the whitelist with this same cohort. No-ops.
- Errors — per-row failures, if any. Up to 5 listed verbatim, the rest summarized.
The cohort panel behind the modal refreshes automatically. Click Done to close.
A 16-student SMU PeopleSoft roster.
SMU registrar export had columns NAME, Student ID, Status, Email address, Grading Basis, Units Taken, Primary Academic Program, Academic Level. 16 data rows.
- Imported the file as-is — no edits.
- Parser detected
Email addressas the email column (header-name match) andNAMEas the name column. - Preview said: 16 rows in file, 16 valid emails, 0 skipped, 0 duplicates.
- Clicked Import. Result: 0 added (none had Studio accounts yet), 16 pre-assigned, 0 errors.
- Closed modal. Cohort panel showed 16 pending rows with yellow chips. Sent invites to all in one click (next page).
Pre-authorize an email outside a cohort.
If you’re an admin and need to authorize an email without attaching it to a cohort — for example, to grant a colleague teacher access — go to /admin, click the Whitelist tab, and add the email there. You can optionally set the initialCohortId on the same row to pin them to a specific cohort. The same allowedEmails table is used; the admin UI just exposes additional fields (initial role, initial policy group) that aren’t available from the teacher cohort flow.
Trash icon, idempotent.
Click the trash icon next to any roster row. Confirms first. The studio removes the cohort membership (for enrolled) and clears the cohort pre-assignment from the whitelist row (for pending). The student keeps their Studio account; only their relationship to this specific cohort is severed.
If they had work in the course already (lesson sessions, comments), that data is retained. The studio doesn’t cascade-delete student work when a cohort membership is removed.
Send the invitations.
Pending students need to know they’ve been added — that’s the next page. 06 / Send invite emails.