Candidate Flow

Device Check

Pre-interview camera and microphone verification to ensure a smooth live session.

Before joining the live interview, candidates complete a device pre-check to verify that their camera and microphone are working correctly. This prevents technical issues mid-interview and sets audio levels for the AI interview agent.

Page: /interview/pre-check/:token

The pre-check page verifies three requirements before enabling the Start Interview button:

CheckStatusRequirement
CameraPass / FailgetUserMedia video stream accessible
MicrophonePass / FailgetUserMedia audio stream accessible, non-zero level detected
BrowserPass / FailWebSocket support (all modern browsers pass)

Check Flow

text
/interview/pre-check/abc123token
  │
  ├── Request camera + microphone permissions
  │     └── navigator.mediaDevices.getUserMedia({ video: true, audio: true })
  │
  ├── Show live camera preview (muted)
  │
  ├── Analyze audio level via AnalyserNode
  │     └── Pass if RMS > threshold over 3 seconds
  │
  ├── All 3 checks pass → "Start Interview" button enabled
  │
  └── POST /candidate-access/abc123token/start
        └── { x-session-token: sessionToken }
        └── Response: { sessionId, tenantId, wsUrl }
        └── Navigate → /interview/<sessionId>

POST /candidate-access/:token/start

Called after all device checks pass. Creates the live session and returns the WebSocket URL and session ID needed to connect to the Vert.x edge.

bash
curl -X POST http://localhost:3009/api/v1/candidate-access/abc123token/start \
  -H "x-session-token: session-jwt-token"
Response 201
{
  "sessionId": "session-uuid",
  "tenantId": "tenant-uuid",
  "wsUrl": "ws://localhost:8080"
}

Device Check States

StateIconAction Available
Not testedGray circleTest Device button
TestingSpinnerNone (in progress)
PassGreen checkRetest button
FailRed XFix & Retry button

Permission Denied Handling

If the browser blocks camera/microphone access, the page shows actionable instructions specific to the browser (Chrome, Firefox, Safari).

BrowserFix Instructions
ChromeClick the lock icon in the address bar → Allow camera and microphone
FirefoxClick the shield icon → Permissions → Allow camera and microphone
SafariSystem Preferences → Privacy & Security → Camera/Microphone → Allow

sessionStorage Written

typescript
// After start call succeeds, written by the pre-check page
sessionStorage.setItem('interview_tenant_id', data.tenantId);

// Navigate to live interview
router.push(`/interview/${data.sessionId}`);
The pre-check page does not record any video or audio. The camera preview is rendered locally only (muted, no upload). Audio level analysis happens in-browser via the Web Audio API.
Was this page helpful?