A AI-powered mock interview app that listens to your voice, transcribes in real time, and responds as an interviewer using Claude. Supports multiple modes including deep interview, English tutoring, and casual conversation practice.
- Voice input — speak your answer, the app transcribes via Whisper
- AI interviewer — Claude responds as a senior engineer interviewer
- Multiple modes — Job Interview, Deep Interview, English Tutor, Friend
- Hardcore mode — relentless follow-up drilling on every answer
- Suggested answer — generates a strong answer on your behalf
- Answer review — get detailed feedback on your last answer
- Assessment — pass/fail evaluation with score and breakdown
- Local TTS — interviewer speaks back using Piper (no cloud TTS)
- LLM flexibility — switch between Claude API or local Ollama
- Python 3.11
- macOS (uses
sounddevicefor mic input) - Ollama (optional — for local LLM mode)
git clone https://github.com/Rsor99/ai-interview
cd ai-interviewpython3.11 -m venv venv
source venv/bin/activatepip install -r requirements.txtcp .env.example .envEdit .env and fill in your values:
ANTHROPIC_API_KEY=your_anthropic_api_key_here
HF_TOKEN=your_huggingface_token_here
CANDIDATE_NAME=Your NameANTHROPIC_API_KEY— get one at console.anthropic.comHF_TOKEN— get one at huggingface.co/settings/tokens (needed for first-time voice model download)CANDIDATE_NAME— your name, used by the AI when referring to you
source venv/bin/activate
python app.pyOpen http://localhost:5001 in your browser.
The first run will automatically download the Piper TTS voice model (~65 MB) from HuggingFace.
| Mode | Description |
|---|---|
| Job Interview | Senior engineer mock interview. One question at a time, grammar + technical feedback after each answer. |
| Deep Interview | Structured interview using an ordered question set from prompts/deep_interview_questions.json. |
| English Tutor | Conversational English practice with gentle grammar corrections. |
| Friend | Casual chat practice with an American friend persona. |
Available in Job Interview — the AI drills deep into every answer with follow-ups. No "no worries", just relentless but professional pressure.
Edit utils/llm.py:
PROVIDER = "claude" # or "ollama" for local inferenceFor Ollama, make sure Ollama is running and the model is pulled:
ollama pull phi3:mediumEdit prompts/deep_interview_questions.json — add, remove, or reorder questions.
Edit utils/tts.py:
_MODEL_PATH = "voices/en_US-ryan-high.onnx"Browse available Piper voices at rhasspy/piper-voices on HuggingFace. Update _HF_FILES in tts.py to match your chosen voice.
Edit utils/stt.py:
WhisperModel("small", ...) # options: tiny, base, small, mediumLarger models are more accurate but slower.
ai-interview/
├── app.py # Flask server — all routes and WebSocket handlers
├── utils/
│ ├── llm.py # Claude / Ollama LLM backend
│ ├── stt.py # Whisper speech-to-text
│ ├── tts.py # Piper text-to-speech (auto-downloads model)
│ └── audio.py # Mic recording via sounddevice
├── prompts/
│ ├── interview.md # Job Interview system prompt
│ ├── deep_interview.md # Deep Interview system prompt
│ ├── english_tutor.md # English Tutor system prompt
│ ├── friend.md # Friend system prompt
│ └── deep_interview_questions.json # Ordered question set for Deep Interview
├── templates/
│ ├── index.html # Main interview UI
│ └── debug_stt.html # STT debug tool
├── voices/ # Piper voice models (auto-downloaded, gitignored)
├── .env.example # Environment variable template
├── requirements.txt # Python dependencies
└── LICENSE # MIT License
MIT — free to use, modify, and distribute. See LICENSE.