AI Interviewer
A real-time interview assistant that screen-share can't see

- Role
- Personal project
- Year
- 2026
- Status
- Shipped
The problem
A Windows desktop application that listens to a live interview, transcribes the interviewer with Whisper, works out which question was actually asked, and drafts a spoken-style answer from your CV and tone guide — in a window excluded from screen capture at the OS level.
Live transcription is the easy half. The hard part is that interviewers don't ask clean questions: they ramble, self-correct, stack three questions into one breath, and trail off. A naive pipeline that treats every sentence as a prompt produces a wall of answers to things nobody asked, arriving too late to be read.

How I built it
Question detection as its own stage
Transcription and answering are separated by a detection stage that decides what the last genuinely unanswered question was — which is not the last sentence, and often not phrased as a question at all. That stage is the difference between a useful assistant and a live transcript with noise attached. There's also a manual override box, because the honest design assumption is that detection will sometimes be wrong.
Invisible to screen capture, by the OS not by a trick
The window calls Windows' `SetWindowDisplayAffinity` with `WDA_EXCLUDEFROMCAPTURE`, so the compositor itself omits it from any capture stream. On Meet, Zoom, Teams or OBS it renders as a black rectangle while staying fully visible on the physical display. This is an OS-level guarantee rather than a heuristic that breaks when the conferencing app updates.
Local transcription, remote generation
Whisper runs locally on the GPU — audio never leaves the machine, and local inference removes the network round-trip that would make transcription lag unusable. Only the detected question text goes out, to OpenRouter, which keeps the model swappable between Gemini Flash, Claude and GPT without touching the pipeline.
Answers in your voice, not the model's
Generation is conditioned on three things: your parsed CV, a `tone.md` voice guide, and the pasted job description. Without the tone guide the output is recognisably model-shaped — balanced, hedged, slightly too fluent to be speech. The guide is what makes an answer sound like something a person would actually say out loud.
Built with
- Python 3.11
- PyQt6
- faster-whisper
- CUDA
- OpenRouter
- Gemini Flash
- pdfplumber
- ReportLab
- Win32 API
Outcome
- Live pipeline: audio capture → local Whisper → question detection → LLM → segmented answer panel
- OS-level capture exclusion verified against Meet, Zoom and Teams
- CV parsed from PDF; sessions exportable to text or PDF afterwards
- Model-agnostic through OpenRouter — Gemini, Claude, GPT and Llama all swap in by config