Create an assessment
The five step assessment wizard, every field and rule, the server draft autosave, and the assessment lifecycle.
Create an assessment
Creating an assessment is a guided five step wizard. Your work is autosaved to the server as a draft the moment you name it, so you can leave and return without losing progress.
The five steps
| Step | Name in UI | What you do |
|---|---|---|
| 1 | Configuration | Name, role, duration, schedule window, timezone, languages |
| 2 | Problems | Pick problems from the library or generate variations (up to 5) |
| 3 | Candidates | Add candidate emails (up to 500) |
| 4 | Payment | Review cost, choose wallet or gateway, pay |
| 5 | Send Invites | Review and send invitation emails |
Each step gates the next. You cannot reach Problems without a name, role, valid duration, and at least one language. You cannot reach Payment without selected problems, and you cannot send invites without paying.
Step 1: Configuration
| Field | Rules and defaults |
|---|---|
| Assessment name | Required. Visible to candidates in the invitation. |
| Role title | Required. Shown in invitation emails. |
| Duration (minutes) | Default 45. Allowed range 15 to 300. |
| CRM ID | Optional free text for your own tracking. |
| Invitation company name | Optional. Written back to your Supabase profile. |
| Schedule window | Start and end datetimes. Start must be at least 30 minutes ahead, the gap at least 30 minutes, and the total window at most 21 days. |
| Timezone | Auto detected from your browser, changeable. |
| Programming languages | At least one required. Choose from Python, JavaScript, Java, C++, TypeScript, C, Go, Rust. Defaults to Python and JavaScript. |
Once an assessment is Active, this step is locked and cannot be edited.
Step 2: Problems
Search the shared problem library by title or keyword, filter by difficulty and concept tags, and select up to five problems. You can also generate an AI variation of a problem. See Problems for the details and the important limits.
Step 3: Candidates
Add candidate emails one at a time or in bulk. Bulk import accepts newlines, commas, semicolons, or tabs as separators. Each email is validated, duplicates and invalid entries are rejected, and the total is capped at 500. Candidates added here start in a Pending Invite pending state until you send invitations.
Step 4: Payment
The cost is computed per candidate. If your wallet has credits, they are applied automatically up to the number of candidates, and you can choose to cover the remainder by card or pay the full amount by card. Submitting opens the checkout with the gateway appropriate for your region. See Payments.
Step 5: Send Invites
Review the assessment, problems, candidates, and payment summary. Preview the invitation email, then send. Each candidate receives a unique private link. You can also skip sending and send later from the assessment detail page.
Draft autosave
The wizard continuously saves your draft to the server:
- The first valid name creates the assessment on the server with status
DRAFTand captures the default invitation subject, body, and sender name. - Subsequent changes sync on a 1.5 second debounce (configuration, then problems and candidates in separate effects).
- You can restore a draft later with its draft id.
- The browser also flushes on unload.
Editing is only allowed while the status is DRAFT, AWAITING_PAYMENT, or PAYMENT_EXPIRED. Once Active, the assessment is locked.
Lifecycle
| Indicator | State | Editable? | Visible in list? |
|---|---|---|---|
| Draft | DRAFT | Yes | No (drafts are kept in the drafts dialog) |
| Draft | AWAITING_PAYMENT | No | No |
| Draft | PAYMENT_EXPIRED | Yes (re-editable) | No |
| Active | ACTIVE | No | Yes |
| Completed | COMPLETED | No | Yes |
| Cancelled | CANCELLED | No | Filtered |
Activation is confirmed by a server sent event stream on submit; a 30 second poll acts as a fallback if the stream is interrupted.