Skip to content

Experience flows

Audience: ux, frontend, qa, writing
Status: specced
Owns: UI/UX
Depends on: Lifecycle, Personas, Domain entities

Screen names marked (TBD) are placeholders until UX inventory is complete.

Step Stage / status Screen
Create account Create account
Verify via OTP OTP verify
Login (password / Google) Login, then CAP GET /me + GET /onboarding/mine
Forgot / reset password via OTP Forgot password → OTP → reset
Change password Orchestrator PATCH /auth/change-password
Edit personal contact / address / occupation / accessibility / photo CAP GET/PATCH /me/profile (identity-linked names/DOB/gender/nationality lock after NIN; occupation and accessibility write the candidate onboarding blob; photo is photoAssetId on CapUser — GET also returns resolved photo.url)
Notification channels Orchestrator GET/PUT /notifications/preferences (not nested on CAP profile)
Delete account CAP GET /me/deletion-eligibility then OL POST /auth/delete-account
Complete profile; start NIN verify DRAFT / IN_PROGRESS Profile · Identity verify (TBD)
NIN verified; can submit DRAFT / AWAITING_ACTION Application draft

Product refs: Auth, Identity.

Step Stage / status Screen
Select trade / centre; create draft DRAFT / IN_PROGRESS Application create
Fill wizard (personal SoT, experience preference units, identity, declarations); GET …/progress DRAFT / IN_PROGRESS Application form
Submit (blocked if NIN not verified) CENTRE_REVIEW Submit confirmation (TBD)
Await centre decision CENTRE_REVIEW / AWAITING_ACTION Application status
Amend on feedback CENTRE_REVIEW / ATTENTION_REQUIRED Feedback / chat (TBD)
Pay centre PAYMENT / AWAITING_ACTION Payment (TBD)
Evidence with facilitator EVIDENCE Evidence folder (TBD)
Interview scheduled / attend INTERVIEW / SCHEDULED Interview (TBD)
Consent or appeal INTERVIEW / APPEAL_OPEN Results / appeal chat (TBD)
Track verification & certificate later stages → CERTIFICATION Status · Certificate (TBD)
Step Stage / status Screen
Unsuccessful interview with gaps CLOSED + GAP_TRAINING Outcome (TBD)
View LMS course recommendations Recommendations (TBD)

Refs: Recommendations, LMS.

Step Persona Notes
Onboard centre (name, address, payout) Centre admin Before reviewing applications
Invite staff Centre admin POST /centre/staff; OL ProvisionAccount (generated password mail for new users; “added to centre” for existing). Staff onboarding once (variant: staff). Headers X-CAP-PERSONA + X-CAP-CENTRE-ID.
Assign reviewer / facilitator / IQA / panel Centre staff During CENTRE_REVIEWEVIDENCEINTERVIEW
Accept, request changes, or reject application Reviewer Statuses: APPROVED, ATTENTION_REQUIRED, REJECTED
Open centre dashboard Centre staff KPIs / UTC-year charts; revenue hidden without wallet read
Payments page Centre super_admin GET /centre/payments/summary (all-time net credits; pending = unpaid or failed); GET /centre/payments; GET /centre/wallet; withdraw is a ledger debit. Receipt: GET /applications/{id}/receipt
Centre settings (org) Centre super_admin GET/PATCH /centre/profile (PATCH still logoAssetId after OL POST /storage/upload; GET returns logoAssetId and resolved logo; nested organisation onboarding; registrationNo locked); GET/PUT /centre/pricing (PUT { items[] } atomic)
Personal settings Any persona CAP /me/profile (contact, address, occupation, accessibility, photo); OL prefs / change-password / delete-account
Review applications queue Centre staff GET /centre/applications/summary cards; GET /applications with X-CAP-PERSONA: centre (q, tradeId, type, status, stage, ivApproved, sort submittedAt)
Share application dossier Centre staff (after IV APPROVED) POST /applications/{id}/share-token; viewer GET /shared/applications/{token} (no Bearer). DELETE revokes
Mark certified (off-platform AB) Centre staff when CAP_CENTRE_CERTIFY_BYPASS PATCH /centre/applications/bulk { ids, action: "certify" } — 404 if flag off
Schedule interview Centre staff POST /applications/{id}/interview/schedule (mode, link / useCentreAddress); GET the same path for the current booking
Publish / close job listings Centre admin POST /centre/job-postings; close { status: "closed" } (no “mark as filled”). Shortlist → accepted; server sets filled when occupancy ≥ slot. Delete only if zero applicants
Review retained assessor requests Centre admin Enriched list/detail (sectors, not trade); bulk or single approve/reject (pending only); revoke approved. IV/panel picker: GET /centre/assessors (default approved)
Open Assessors page Centre staff Summary cards + roster (GET /centre/assessors, /summary, /{id}, /{id}/applications). No invite; New Assessor → job postings. Profile read-only
Search directory; start or reply to chat Any authenticated user CAP GET /directory then Orchestrator conversations; UI may hide broadcast for non-admins
Review staff activity Centre staff CAP-local activity cards (name, role, action, UTC time)
Step Notes
Select assessor persona after signup Credentials vetted by platform staff
Open assessor console Summary, assigned apps, calendar (GET /assessor/events), centres
Work assigned applications Facilitator vault review; lead PUT …/interview/forms/{formType}; panel evaluate (+ lead decision/outcome) — Lifecycle
Assigned to centre (one type per centre) POL-09
EV verifies applications (not at own centre) POL-10 · EXTERNAL_VERIFICATION
Step Stage Notes
Assign EV EXTERNAL_VERIFICATION
Issue / record certificate CERTIFICATION POL-06 open
Step Notes
Invite-only onboarding Set password on invite
Vet assessors; assign to centres Before centre work