CTO kick-off · Phase 1 only

Assessment — Phase 1

Agency Admin + Student Portal only. An existing agency sends an assessment to one of its students — before the COE, even mid-sales — gets an automatic recommendation, and can convert it into a real visa application in one click.

Scope

✅ In — Phase 1

  • Agency Admin: new "Assessments" section (list + invite)
  • Student Portal: assessment mode — own template, own 3 steps, own copy
  • Backend: the assessment object + its lifecycle
  • Superadmin: per-org feature toggle to enable it
  • Conversion: approved assessment → pre-filled visa application

⏸️ Out — later phases

  • School Admin / school portal (no school surface at all)
  • School decision loop, COE upload in-platform
  • Agency CSV import, school↔agency associations
  • White-label branding per school
  • Quality-by-agency dashboards

Naming decision

AssessmentRECOMMENDED
  • Same word in UI, code, DB and PostHog — one vocabulary end to end (assessment)
  • Works with no school and no COE — valid during the sales process
  • Ties to GSA / "Genuine Student", the actual regulatory language
  • Short, verbs well: "assess this student", "run an assessment"
Pre-qualificationNO
  • ⚠️ "Qualification" means academic credential in education — ambiguous to exactly our audience
  • The "pre-" prefix implies a gate that doesn't exist yet in Phase 1 (no school decision)
  • Diverges from the object name in code
  • Keep it as marketing copy toward schools ("pre-qualify your students"), not as the feature name

The flow, step by step

1Superadmin Enable "Assessments" for the agency org.Not open to everyone — per-org feature toggle. Gated rollout while we learn. NEW flag
2Agency Opens the new "Assessments" section and invites a student.Form = the current student-invite form minus the visa-template step, plus the target school. NEW section
reuses invite form
3System Sends the invitation through the existing Clerk flow.Identical mechanics to today. Only the email copy differs: "complete your assessment", not "start your visa application". Clerk REUSE
new template
4Student Accepts, registers, lands in the OneVisa student app.Same sign-up path as any student today. REUSE
5Student The portal loads in assessment mode — different template, different steps, adapted copy.Not the visa application. Routing is driven by the object type the student was invited to. MODIFY portal
new template
6System On submit → assessment domain event → automatic scoring.Own event, own Celery task. No application workflow fires. NEW scoring
7Agency Notified that the assessment is complete + gets the recommendation."Recommended to apply" vs "risky". Visible in the Assessments list and the detail view. NEW
8Agency Accepts and decides to continue → "Start the visa process in OneVisa?"The conversion moment, in the Assessments list where they already are. NEW
9System Creates a pre-filled visa application + sends a link (no registration).The student already exists — this is a deep link, not a second Clerk invitation. Clicking it drops them into today's visa flow. NEW conversion
visa flow REUSE

Student Portal — the 3 steps

1
Welcome to your assessment

Sets expectations: what this is, ~10 minutes, no documents needed, and that it is not a visa application.

2
The form

The assessment template — its own steps and its own copy, authored in the CMS.

3
Sent — they'll be in touch

"Your assessment has been sent to your agency and the school. They will contact you with the result and next steps." No verdict is shown to the student.

What we build

Agency Admin

ov-admin
  • "Assessments" section: list + detail
  • Invite modal (basic student info + school)
  • Recommendation shown per student
  • "Start visa process" action
  • Section hidden unless the org flag is on

Student Portal

ov-capture-frontend
  • Assessment mode: routing by object type
  • 3 steps + adapted copy
  • Success page with no verdict
  • Student home listing both objects (assessments + visas) under one login

Backend

ov-capture-backend · ov-cms · ov-superadmin
  • assessment object + own status enum + own events
  • Automatic scoring task (Celery)
  • Conversion service → creates the application
  • Per-org feature flag + superadmin toggle
  • Assessment template in the CMS

The two invitations are not the same thing

① Assessment invite (step 3)② Visa link after conversion (step 9)
Student accountDoes not exist yet → registersAlready exists → no registration
MechanismClerk invitation, as todayDeep link / notification — not a Clerk invite
Lands onAssessment mode (3 steps)Today's visa flow, pre-filled
Copy"Complete your assessment""Continue with your visa application"
BuildReuse + new email templateNew — do not reuse the Clerk invite path

⚠️ Worth stating explicitly in the meeting: building ② as a second Clerk invitation is the obvious wrong turn — it would try to re-register an existing student.

Decisions needed in this meeting

Is the automatic scoring in Phase 1, or stubbed?The flow above needs a recommendation at step 7, but the original plan put "the evaluator" as a later block. Options: (a) ship a simple rules-based recommendation now, (b) stub it and have an internal person fill it, (c) pull the full evaluator into Phase 1.
Is the school field required or optional?You want this usable during the sales process — where the school may not be decided yet. Required-school contradicts that use case. Suggest: optional, labelled "intended school".
Does the school receive anything in Phase 1?There is no school surface. The student-facing step 3 says "sent to your agency and the school" — either the school gets an out-of-band email, or that copy should only mention the agency. Pick one.
Who authors the assessment template, and when?It's a CMS template with its own steps. Needs a visa expert to define the questions before the portal work can be tested end to end. Sequencing risk.
Does the conversion carry documents, or answers only?Phase 1 assessment collects declared data with no uploads. Confirm the visa application starts with zero documents attached.
Can a student have more than one assessment?E.g. two schools, or a re-run after a risky result. Affects the list UI and the uniqueness constraints.

Reference

OneVisa · Assessment Phase 1 kick-off · [EP-VC] OV-950 · scope: Agency Admin + Student Portal