Admin UI
Interview Management
Recruiter-facing features for the interview detail page: pipeline progress timeline, candidate invite sending, and manual assessor trigger.
The interview detail page (/admin/interviews/:id) provides a full view of an interview lifecycle. Three recruiter tools are built into this page: the Pipeline Progress timeline, the Send Invite action, and the Trigger Assessment button.
Pipeline Progress Timeline
Every interview detail page shows a Pipeline Progress card in the right sidebar. It displays the four lifecycle phases of an interview — Planning, Approval, Interview, and Assessment — with a real-time status indicator derived from the current workflow state.
| Phase | Active When | Done When |
|---|---|---|
| Planning | RECEIVED, INFO_NEEDED, VALIDATING_SKILLS, GENERATING_PLAN | PENDING or any later state |
| Approval | PENDING | APPROVED, SCHEDULED, IN_PROGRESS, COMPLETED, ASSESSED |
| Interview | IN_PROGRESS | COMPLETED, ASSESSMENT_PENDING, ASSESSED |
| Assessment | ASSESSMENT_PENDING or COMPLETED (no assessment yet) | Assessment record present |
The timeline automatically reflects INFO_NEEDED (HITL waiting state) by showing a sub-label under Planning. Rejected interviews show the Approval phase in red. The Run ID is displayed above the timeline for cross-referencing with agent logs.
Send Invite
The Send Invite button appears in the action bar at the top of the detail page whenever the interview has a candidateEmail set. Clicking it opens a dialog that shows the candidate details and sends the invite.
| Field | Behavior |
|---|---|
| Candidate email | Must be set on the interview — button is hidden if email is missing |
| Token | Generated on first send (64-byte hex). Reused on subsequent sends — same link. |
| Branded candidate email via configured SMTP sender | |
| Link format | {YOUR_APP_URL}/interview/join/:token |
| Token expiry | 7 days from generation (not from each send) |
| Copy link | After sending, the dialog shows the link with a Copy button for manual sharing |
The invite dialog also shows the interview link after sending so recruiters can copy it manually if needed (e.g. to paste into a Slack message). Clicking Send Again reuses the same token and resends the email — no new token is generated.
POST /api/v1/interviews/:id/invite. It requires the interview:update permission. See the Interviews API reference for the full response schema.Trigger Assessment
The Trigger Assessment button appears in the action bar when:
- The interview has a session ID (interview was conducted)
- No assessment record exists yet
- The workflow state is not PENDING or PENDING_ASSESSMENT
This is useful when the Assessor Agent failed silently after the interview ended — for example, if the assessor pod was unavailable when the interview.completed Kafka event was published. Clicking the button calls POST /api/v1/a2a/interview/:id/retrigger-assessment which creates a new Assessor Agent run for the completed session.
Interview Detail Sections
| Section | Visible When | Description |
|---|---|---|
| Hero card | Always | Candidate name, position, level, email, skills, assessment score if available |
| Pipeline Progress | Always | Four-phase timeline in right sidebar derived from workflow state |
| Info Needed alert | workflowState = INFO_NEEDED | Missing fields list with link to complete info |
| Plan Approval | workflowState = PENDING | Approve / Reject buttons for the generated plan |
| AI Assessment | Assessment exists | Full assessment: summary, strengths/weaknesses, competency scores, question-level breakdown |
| Interview Plan | Plan exists | Full plan: competencies, questions, skills coverage, must-have/nice-to-have criteria |
| Transcript | Session exists and assessment has transcript | Full conversation transcript with question mapping |
| Status sidebar | Always | Status badge, timestamps, IDs, approval info, score summary |