Enrolling students
Students are enrolled into a stream, not invited per assessment. Once they are on the list, the schedule sends them what they need.
Adding students
One at a time — email and name, optionally phone, age, previous experience and who referred them.
Bulk import — the usual way to start a cohort, and the two paths behave differently at the ceiling:
- Adding a student individually is all or nothing: if it would exceed the limit, it is refused.
- Bulk import fills to capacity. A 300-row list against 200 remaining places imports 200 and reports the rest as errors, rather than rejecting the whole file.
That is deliberate — a cohort list assembled from someone else's spreadsheet should not fail entirely because it ran ten rows long. The result tells you how many were processed, how many succeeded, and the row number and email of each failure, so you can fix the remainder and re-import without hunting.
If you set allowed email domains on the stream, rows outside those domains fail here, which is the point: a typo in a supplied list surfaces as a rejected row instead of a student who never receives anything.
Student statuses
| Status | Meaning |
|---|---|
| Invited | Enrolled, not yet started |
| Active | Working through the programme |
| Completed | Finished the programme |
| Selected for interview | Moving to the next stage |
| On hold | Paused, still enrolled |
| Withdrawn | Left voluntarily |
| No show | Never started |
| Unreachable | Email is not getting through |
| Disqualified | Removed for cause |
| Rejected | Not proceeding |
Each change records the reason, who changed it and when.
Most statuses are administrative bookkeeping. Disqualified and Rejected are judgements about a person, so write the reason as if the student will read it — with a cohort this size, one of them eventually will ask.
Email delivery
Each student carries a delivery status, a failure reason and a bounce count. Streams run for weeks on addresses supplied in advance, so a wrong address is not a small problem: the student silently receives nothing and shows up as a No Show at the end.
Check for delivery failures after the first send, not after the first deadline. That is the moment the problem is still cheap to fix, and the bounce count is the fastest way to spot a whole batch of bad addresses from one source.
CVs
Students can be asked to upload a CV through their own link. PDF and Word documents are accepted.
Upload requires explicit consent, recorded with a timestamp. This is a real GDPR consent, not a checkbox for show: a CV is a substantial amount of personal data about someone who is not your employee, and you are the controller of it.
The stored file is never exposed through the API — only the original filename, size and upload time are returned.
GOTCHA: CVs are outside the candidate retention sweep. The automatic anonymisation described in Account and security covers hiring candidates; student records and their CVs are a separate regime and are not expired by it. If you run recurring cohorts, decide your own deletion schedule and apply it — nothing does it for you.
Individual students
Each student has their own page with their details, their result on every test in the stream, their notes and their status history.
This is the view to use before making a decision about someone. The cohort table shows a single score, and a single score cannot distinguish a student who was strong throughout from one who was excellent twice and absent once — which is a difference the missing-test policy may be hiding.