Calibrating portfolio

000

Selected work

Voice AI · Adaptive systems / 2026

InterviewLab

Building an adaptive interviewer without giving the model unrestricted control.

RoleSole designer & developer
FocusReal-time voice · Deterministic routing · Evidence-grounded feedback
StackReact, Node.js, WebSocket, PostgreSQL, Prisma, LangGraph, Deepgram, Groq
InterviewLab live technical interview with an adaptive AI interviewer

01 / The problem

Complexity should live in the system,not in the experience.

A useful mock interviewer must react to the candidate, but an autonomous model can repeat itself, skip rubric coverage, or close unpredictably.

02 / System flow

From input to a reliable outcome.

01Live client

Capture

React streams PCM audio through an authenticated WebSocket.

02Voice layer

Transcribe

Deepgram provides speech-to-text, the conversational loop, and text-to-speech.

03Decision layer

Evaluate

A LangGraph director evaluates complete answer turns and owns interview state.

04Persistence

Report

PostgreSQL stores transcripts, assessments, coverage, and the final report.

03 / Decisions that shaped the build

01Engineering choice

LLM judgment, deterministic control

The model scores answer evidence; explicit code decides follow-up, harder, new-topic, or wrap-up routing.

02Engineering choice

End-of-turn over fixed timers

Deepgram thinking events flush pause-separated transcript fragments as one answer before evaluation.

03Engineering choice

Single voice WebSocket

Native barge-in and one round trip were prioritized over independently orchestrating STT, LLM, and TTS.

04 / Reliability

Designed for imperfect conditions.

05 / Reflection

“The strongest architecture boundary was letting AI judge meaning while ordinary code controlled sequence, limits, and recoverability.”
Explore selected work