AI Interview Platform — Design Doc

A two-sided, multimodal system that automatically runs a candidate through an AI-conducted interview, evaluates them, and moves them through stages — serving both candidates practicing and companies screening. Builds directly on the voice stack, multimodal fusion, and LLM-serving work in the companion docs.
0 · Thesis & the hard problems 1 · System architecture (diagram) 2 · The interview as a state machine (diagram) 3 · The live session — multimodal capture 4 · Evaluation — the LLM-as-judge core 5 · Content: adaptive question generation 6 · Two-sided: candidate vs company 7 · Rubrics, scoring & calibration 8 · Integrity, fairness & anti-cheat 9 · Data model & the session record 10 · Scale, cost & the scheduler 11 · Build order (thin slice first) 12 · Risks & open questions

0 · Thesis & the hard problems

An AI interview platform is three systems glued by a state machine: (1) a real-time multimodal session (conduct the interview), (2) an evaluation engine (score it fairly and defensibly), and (3) a content engine (generate/adapt the questions). The "automatically moves you through" part is a pipeline/state machine gating stage→stage. The model calls are the easy 20%; the hard parts are fair evaluation, integrity, and the live multimodal capture.
What it reuses from the companion docs
The live session is the voice stack + event-time fusion. The evaluator + content engine are LLM-serving (inference server / router). The pipeline is a state machine over a persistent session record. The scale story is the resource scheduler. This doc is mostly composition of pieces already designed.

1 · System architecture

Candidate client mic/cam/code · WebRTC+WS Company console rubrics · results · replay Gateway auth · RBAC ORCHESTRATOR interview state machine stage gating / advance drives session + eval + content per stage the "moves you through" SESSION engine voice stack + fusion STT→LLM→TTS · turn-taking EVAL engine LLM-as-judge + rubric multi-judge · calibrated CONTENT engine adaptive question gen + bank LLM serving router + batched inference (§ infer) model tiers Session record transcript+signals, event-time Question bank + rubrics Results / audit scores + evidence everything writes the session record
blue = candidate-side · green = company-side / serving · purple = the orchestrator (state machine) · teal = stores

The shape: a gateway (auth/RBAC — candidate vs company) → an orchestrator that runs the interview state machine and drives three engines (session, eval, content) → all sharing one LLM-serving layer and writing one session record. Same three-tier instinct as the LLM router: stateless control plane (orchestrator) over stateful engines/stores.

2 · The interview as a state machine — the "moves you through" core

"Automatically moves you through" = a state machine per session. Each stage has an entry gate, a live phase, and an evaluation gate that decides advance / branch / end. The orchestrator owns it; it's the spine of the product.
Intake role, level, consent Warm-up calibrate, ease in Core rounds coding / design / behavioral Adaptive probe deepen where signal is weak Score + gate advance / branch / end Report candidate: coaching Decision company: score+evidence weak/ambiguous signal → loop back & probe
purple = live interview stages · green = terminal gate · orange = the adaptive loop-back

3 · The live session — multimodal capture (reuses the voice stack)

The live phase of each stage is a real-time multimodal session — this is the voice-stack + fusion problem, with an evaluator subscribed to the timeline.

The interviewer/evaluator split — keep them separate
Two different LLM roles on one session: the interviewer (real-time, latency-critical, drives the conversation) and the evaluator (can be async, deliberate, multi-pass, sees the whole transcript). Don't fuse them — the interviewer optimizes for a natural low-latency exchange; the evaluator optimizes for a fair, defensible score. Different prompts, models, latency budgets, even.

4 · Evaluation — the LLM-as-judge core — the hard problem

An LLM judge is noisy, position-biased, verbosity-biased, and gameable. A raw "score this answer 1–10" is not hire-grade. The engine's job is to make the judgment reliable, evidence-linked, and calibrated.

The techniques that make it defensible

TechniqueWhat it fixes
Rubric-anchored scoringscore against explicit per-dimension criteria with worked anchors ("a 3 looks like…"), not a vibe. Cuts variance hugely.
Evidence-linked verdictsevery score must cite transcript spans ("claimed X at 04:12"). No score without evidence → auditable + harder to hallucinate.
Multi-judge + aggregateN independent judges (diverse prompts/models); take median / require agreement. Adversarial verify for high-stakes — the review-workflow pattern.
Structured outputforce a schema (dimension → score → evidence → confidence), not prose — parse-safe, comparable across candidates.
Decouple dimensionsscore correctness, communication, depth separately — don't let a well-spoken wrong answer score high (or vice-versa).
Human-in-the-loop for the marginauto-advance the clear pass/fail; route the ambiguous band + all final decisions to a human. AI triages, humans decide the close calls.
The framing that matters
The AI's output is evidence for a decision, not the decision — especially company-side, where a wrong reject is costly and possibly unlawful. Position the eval engine as "structured, evidence-linked assessment that a human ratifies," not "the AI decides who gets hired." That's both better product and better risk posture.

5 · Content — adaptive question generation

6 · Two-sided — candidate vs company, one engine

Same session/eval/content engines; the two sides differ in what they get out and what they configure.

Candidate (practice)Company (screen)
Goalimprove — coaching, not gatekeepingdecide — reliable signal + evidence
Outputformative feedback, model answers, drill planrubric scores, transcript, replay, recommendation
Evaluator tonegenerous, teaching, shows the fixstrict, calibrated, defensible, bias-controlled
Configurestarget role/level, weak areasstage graph, rubrics, thresholds, compliance settings
Integrity barlow (only cheating themselves)high (auditable, anti-cheat, fair)
The flywheel (why two-sided is strategically strong)
Candidate practice sessions generate labeled data (questions, answers, outcomes) that calibrates the company-side evaluator; company rubrics define what candidates should practice. Each side improves the other — the same engine, two funnels, a compounding data advantage. (Mirrors the model-improvement loop, but for interview signal.)

7 · Rubrics, scoring & calibration

8 · Integrity, fairness & anti-cheat — product-critical, not afterthought

Anti-cheat (candidate gaming the eval)

Fairness (the eval not harming candidates)

This is where the product lives or dies
A coding platform is a commodity; a fair, defensible, auditable evaluation is the hard, valuable part. The integrity/fairness layer isn't compliance overhead — it's the moat and the thing that makes companies trust the score.

9 · Data model & the session record

One session record is the source of truth (same instinct as the voice-stack session store — transport-agnostic, event-time, durable):

Session record (sketch)
Session { id, candidate, company, role, level, rubric_version, state (current stage + history), consent, integrity_flags }
→ Timeline[] { event_time, source (stt/prosody/code/chat), speaker, payload } — the fused, append-only capture
→ Evaluations[] { stage, dimension, score, evidence_spans[], judge_id, confidence, rubric_version } — evidence-linked
→ Decision { outcome, human_ratified_by, timestamp } — the ratification trail

10 · Scale, cost & the scheduler

11 · Build order — thin slice first

  1. Text mock interview, one stage, candidate-side. Typed Q&A + LLM interviewer + rubric-anchored eval + feedback. No voice, no state machine, no company side. Proves the eval core (the hard part) cheaply.
  2. The state machine. Multi-stage with gates/advance, durable + resumable. Now it "moves you through."
  3. Adaptive content. Bank + probe stage picking next question by signal.
  4. Company side. Rubric config, results/replay console, human-in-the-loop ratification, audit trail.
  5. Calibration + fairness harness. Ground-truth agreement, bias testing, drift monitoring — before any real hiring use.
  6. Voice. Add the live spoken session (voice stack) — biggest lift, so last; text validated everything else first.
  7. Multimodal (code/screen, video). Fusion timeline, integrity signals.
  8. Scale. Router, tiering, self-host, realtime capacity reservation.
Why text-first, voice-last
The evaluation engine is the hard, valuable part and it's fully testable in text. Voice is the biggest engineering lift and adds latency/turn-taking complexity that's orthogonal to whether your scoring is fair and calibrated. Prove the score, then make it spoken. (The opposite order — voice first — is the classic trap: a slick spoken demo over a scoring engine you can't defend.)

12 · Risks & open questions

Companion docs: voice stack · multimodal fusion · inference serving · concurrency · memory models. This platform is largely their composition under an interview state machine.