InterviewCopilot is a local AI-powered interview coach built with Flask. It helps job candidates practice real interview questions by generating spoken-style model answers tailored to a saved profile and target role.
- Save a candidate profile with skills, experience, projects, target role, and additional context
- Generate spoken interview answers from OpenAI or DeepSeek LLM providers
- Stream answers in real time via server-sent events
- Pre-generate answers for faster playback
- Store interview history in a local SQLite database
- Review past questions, AI answers, and notes in the history view
- Hot-swap provider/model configuration without restarting the server
- Health checks and generation logging included
- Python 3.11+
pipinstalled- OpenAI or DeepSeek API key
cd InterviewCopilot
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCreate a .env file in the project root with at least one provider API key:
OPENAI_API_KEY=your_openai_api_key
# or
DEEPSEEK_API_KEY=your_deepseek_api_keyOptional environment variables:
LLM_PROVIDER:openaiordeepseek(default:deepseek)LLM_MODEL: model name to use for the selected provider- OpenAI:
gpt-5.4-mini - DeepSeek:
deepseek-v4-flash,deepseek-v4-pro
- OpenAI:
PORT: web server port (default:8080)
Example .env:
OPENAI_API_KEY=sk-...
LLM_PROVIDER=openai
LLM_MODEL=gpt-5.4-mini
PORT=8080python app.pyThen open:
http://localhost:8080
If you want to use the app from another device such as a phone or tablet, start ngrok after the Flask server is running:
ngrok http 8080Then open the forwarding URL shown by ngrok in your mobile browser.
- The app automatically initializes
interviews.dbon first run. - Logs are written to
logs/generation.log. - Frontend templates are served from the
template/folder.
GET /api/profile— retrieve saved profile dataPOST /api/profile— update profile dataGET /api/llm-config— view active provider/model settingsPOST /api/llm-config— change provider/model at runtimePOST /api/generate-answer— request a generated answerPOST /api/prepare-answer— pre-generate answer for a questionGET /api/llm-health— check provider/model health and latencyGET /api/interviews— list saved interview sessionsPOST /api/save-interview— save an interview session recordDELETE /api/delete-interview/<id>— remove a saved interview
- The app keeps a short in-memory history of recent Q&A to improve answer variation.
interviews.dbstores profile snapshots alongside each saved interview.- If the active LLM provider fails, the app can fall back to the configured OpenAI model.
This repository does not include a license file. Add a license if you plan to share or publish the project.
