Start an interview

How this works

The whole thing is one Cloudflare Worker. There is no backend server, no account system, and no database of interviews.

What happens during a turn

your browser │ you speak ──► recording stays local │ ├─► POST /transcribe audio ──► Whisper (Workers AI) ──► text back to you │ the bytes are not written anywhere │ ├─► POST /answer your text ──► a small model reads it and reports │ which ideas it contained, nothing more │ ──► plain TypeScript decides the next question │ └─► next question ──► Aura (Workers AI) reads it aloud D1 database: questions, rubrics, glossary ← written by me, not by you

The adaptive part

Each question has a written rubric and a list of signals — specific ideas a good answer contains. After you answer, a model does one narrow job: tick off which signals you actually hit and give a coarse verdict. It produces no scores and never sees the rubric.

What happens next is ordinary code, not a model: cover the ground well and the level goes up, miss it and the level drops, answer partially and you get pushed on the specific gap. Level moves are capped at one step, no topic can eat the whole interview, and follow-ups cannot spiral. Keeping the judgement in code is what makes a cheap model good enough to run every turn.

Grading

At the end nothing happens until you press Grade my answers. That sends the transcript your browser is holding to a model that scores each answer against that question’s own written anchors, and has to quote you as evidence for every score. Combining those into a level is arithmetic, done in code.

It is a machine grading you against a rubric I wrote. Treat it as a prompt for your own judgement — and if a score has no quote behind it, ignore it.

Privacy

Your answers are never stored. Not in a database, not in object storage, not in logs.

  • Audio never leaves your machine except as the body of one transcription request, and those bytes are discarded when the request ends.
  • The transcript lives in your browser tab (sessionStorage, which dies with the tab). Download it if you want to keep it.
  • The server keeps only routing state — which questions were asked and what level you are at, with no text — in an object that deletes itself when the session ends.
  • Grading is a single stateless request. Nothing is written as a result of it.

The honest caveat: your answers do travel to Cloudflare Workers AI to be processed, because the models run there and not in your browser. They are not retained by this application. If that is not acceptable for something you are about to say, do not say it here.

What it is built on

  • Cloudflare Workers — the whole application.
  • Workers AIwhisper-large-v3-turbo for speech to text, aura-1 for the voice, gpt-oss-120b for reading answers and grading.
  • D1 — holds the question bank and rubrics. Nothing you produce.
  • Durable Objects — one per live interview, holding routing state only, deleted when you finish.
  • Cloudflare Access — in front of everything.

A note on the questions

The bank is hand-written: 28 questions across web, cloud, code review, cryptography, threat modelling and AI security, each at four levels, each with rubric anchors describing what a 0 through a 4 actually looks like. That authoring is the real work here; the code is comparatively simple.

← Start an interview