An interview simulation platform that uses Large Language Models (LLMs) to conduct realistic technical and behavioural interviews and provide detailed feedback. https://vdhaya-interview-simulator.com
- Backend: FastAPI-based Python server (interview API, evaluation, health checks). Lives in
backend/. - Frontend: React application (interview UI, analytics). Lives in
frontend/. - Documentation: See
docs/for architecture, AI tools, and research notes.
- Real-time interview simulation with LLM-powered interviewer
- Comprehensive feedback scoring and analysis
- Analytics dashboard for performance tracking
- Support for various technical interview formats
- CORS, health checks, Azure and Docker deployment support
# From repo root
pip install -r requirements.txt
cd backend
# Copy .env.example to .env, set DATABASE_URL (and optionally SECRET_KEY, AWS_*)
# alembic upgrade head # if using DB
uvicorn app.main:app --host 0.0.0.0 --port 8000- API: http://localhost:8000
- Docs: http://localhost:8000/docs
- Health: http://localhost:8000/health
cd frontend
npm install
npm run devGET /,GET /health– health and statusGET /api/interview/– sample interview questionsPOST /api/interview/evaluate– evaluate an answerGET /api/interview/types– available interview types
From project root:
docker build -f backend/Dockerfile -t llm-interview-simulator .
docker run -p 8000:8000 llm-interview-simulatorFrom project root, build the frontend into backend/app/static and deploy the backend:
./scripts/deploy-eb-fullstack.shThe UI uses same-origin /api/... calls (VITE_API_BASE_URL empty in that build).
Set DATABASE_URL in the EB environment (Configuration → Software → Environment properties) to your RDS PostgreSQL URL. Each deploy runs alembic upgrade head in the container entrypoint.
Migrations stuck (tables missing but older tables exist): If the DB was created without Alembic (or alembic_version is empty while users / interview_sessions already exist), upgrade head from scratch fails with “already exists”. Fix once from your laptop (same DATABASE_URL as EB):
cd backend
export DATABASE_URL='postgresql://...' # RDS URL from EB
alembic stamp b2c3d4e5f6a7 # last revision before daily_visits + calendar; adjust if your schema differs
alembic upgrade headThen confirm user_daily_visits and user_calendar_events exist. Redeploy afterward so future upgrades apply normally.
- App Service: Connect repo, set startup command
python startup.py, setPORT=8000and other env vars. - Container: Build/push image to ACR, then deploy container (see Azure docs).
Backend uses a .env file in backend/ (e.g. PORT, ENVIRONMENT, DATABASE_URL, SECRET_KEY, AWS_*). Copy backend/.env.example to backend/.env.
pip install pytest pytest-asyncio
cd backend && pytest tests/- Port 8000 in use:
lsof -ti:8000 | xargs kill -9 - Import errors: Run from repo root or
backend/; ensure deps:pip install -r requirements.txt - Use http://localhost:8000/docs for interactive API testing
See the docs/ directory for detailed documentation.
This project is licensed under the MIT License - see the LICENSE file for details.