AI-powered career prep — resume feedback, mock interviews, and job matching in one platform
Most job seekers — especially freshers — get almost no real feedback until they're already rejected: a resume vanishes into an ATS black hole, or an interview goes badly with no idea why. Elevra closes that loop. It scores your resume the way an ATS would, runs mock interviews with actual audio/video analysis (not just canned questions), diffs your resume against a real job description, and rolls all of it into a single Career Readiness Index so you know exactly what to fix before you apply — then a companion browser extension auto-fills the application for you once you're ready.
Design note: the backend runs a unified AI client that auto-detects whether it's talking to Gemini or Claude purely from the API key prefix (
AIza…vssk-ant-…), so the same codebase runs on either provider with zero config branching. The interview coach goes further than prompt-and-response: it runs real audio/video analysis (faster-whisperfor speech, MediaPipe + DeepFace + OpenCV for eye contact and sentiment) rather than asking the LLM to guess at delivery from a transcript.
| Resume Analysis | Mock Interview | Job Search |
|---|---|---|
![]() |
![]() |
![]() |
- Live in production at elevraa.me, self-hosted on Azure — not just a local demo
- Provider-agnostic AI client — swaps between Gemini and Claude by key prefix, no config changes needed
- Real audio/video interview analysis — speech-to-text via
faster-whisper, eye contact and sentiment via MediaPipe/DeepFace/OpenCV, not just text-based scoring - Career Readiness Index — a single composite score blending resume quality, interview performance, and skill gaps into one actionable number
- JD gap analysis — paste any job description and get a concrete, prioritized list of what's missing from your resume
- Chrome/Edge extension (Manifest V3) for one-click application autofill, bridged to the web app via a content script
- Full production deployment: Dockerized services behind Caddy (auto TLS), running on an Azure VM with custom domain + DNS
Backend — Python 3.11 · FastAPI (async) · SQLAlchemy · PostgreSQL · Alembic migrations · Google Gemini / Anthropic Claude (auto-detected) · faster-whisper, MediaPipe, DeepFace, OpenCV for interview analysis · Azure Blob Storage
Frontend — React 19 · TypeScript · Vite 6 · Tailwind CSS v4 · React Router v7 · Framer Motion
Extension — Manifest V3, vanilla JS content/background scripts bridged to the frontend
Infra — Docker Compose (backend + Postgres + nginx) · Caddy for automatic HTTPS · Azure VM · Namecheap DNS
Resume & JD intelligence:
- Parses PDF/DOCX resumes, scores ATS compatibility, and extracts a structured skill set
- Diffs that skill set against a pasted job description to produce a gap analysis with concrete next steps
Interview coaching:
- Generates role-specific interview questions
- Captures audio/video responses and runs them through a real analysis pipeline —
faster-whisperfor transcription, MediaPipe/DeepFace for eye contact and facial sentiment, OpenCV for frame processing — rather than scoring delivery from text alone - Produces structured feedback per answer, feeding into the overall Career Readiness Index
Provider abstraction:
ai_client.pydetects the configured provider from the API key format at startup and routes every call through one interface, so switching between Gemini and Claude is a one-line.envchange, not a code change
- Python 3.11+, Node.js 20+, PostgreSQL 15+
- A Gemini (
AIza…) or Anthropic (sk-ant-…) API key - (Optional) RapidAPI key for live job search, DigitalOcean/Azure Blob credentials for file storage
git clone https://github.com/Bharath5626/elevra
cd elevra
cp .env.example .env
cp backend/.env.example backend/.env
# fill in DATABASE_URL, SECRET_KEY, AI_API_KEY at minimum
# Backend
cd backend
python -m venv venv && source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r ../requirements.txt
# Frontend
cd ../frontend
npm installRun both together from the repo root:
python dev.py| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend API | http://localhost:8000 |
| API docs (Swagger) | http://localhost:8000/docs |
| Health check | http://localhost:8000/health |
cp .env.example .env
docker compose up -d
docker compose exec backend bash -c "cd /app/backend && alembic upgrade head"Image includes
ffmpeg,libgl1, andlibglib2.0-0for audio/video analysis.
chrome://extensions→ enable Developer mode- Load unpacked → select the
extension/folder - The Elevra One-Click Apply icon appears in your toolbar, reading your saved profile to auto-fill applications
Routes are registered at root (no /api/v1 prefix by default). Interactive docs at /docs (Swagger) and /redoc.
| Prefix | Module |
|---|---|
/auth |
Register, login, JWT refresh |
/resume |
Upload, parse, score, analyse |
/jd |
Job description gap analysis |
/interview |
Generate questions, submit responses, evaluate |
/jobs |
Live job search |
/cri |
Career Readiness Index |
/roadmap |
AI career roadmap |
/profile |
User profile CRUD |
Full environment variable reference
| Variable | Description | Default |
|---|---|---|
APP_NAME |
Application display name | Elevra |
DEBUG |
Enable debug mode / SQL logging | false |
API_V1_PREFIX |
Optional route prefix (e.g. /api/v1) |
(empty) |
DATABASE_URL |
PostgreSQL async connection string | — |
SECRET_KEY |
JWT signing key (32+ chars) | — |
ALGORITHM |
JWT algorithm | HS256 |
ACCESS_TOKEN_EXPIRE_MINUTES |
Token TTL in minutes | 10080 (7 days) |
AI_API_KEY |
Gemini (AIza…) or Anthropic (sk-ant-…) key |
— |
GEMINI_MODEL |
Gemini model name | gemini-2.5-flash |
CLAUDE_MODEL |
Claude model name | claude-3-5-sonnet-20241022 |
AZURE_STORAGE_CONNECTION_STRING |
Azure Blob Storage connection string | (optional) |
AZURE_STORAGE_CONTAINER |
Blob container name | careerai-media |
FRONTEND_URL |
Allowed CORS origin | http://localhost:5173 |
RAPIDAPI_KEY |
RapidAPI key for JSearch job listings | (optional) |
elevra/
├── backend/app/
│ ├── auth/ # JWT auth, password hashing
│ ├── resume/ # Parser, ATS scorer, skill extractor, embedder
│ ├── interview/ # Question generator, evaluator, audio/video pipeline
│ ├── jd/ # Job description gap analysis
│ ├── jobs/ # Live job search (RapidAPI)
│ ├── cri/ # Career Readiness Index calculator
│ ├── roadmap/ # AI career roadmap generator
│ ├── profile/ # User profile management
│ ├── ai_client.py # Unified Gemini / Claude client
│ └── main.py # FastAPI app, CORS, routers
├── frontend/src/ # React + TypeScript
├── extension/ # Manifest V3 Chrome/Edge extension
├── dev.py # One-command dev launcher
└── docker-compose.yml
Elevra runs in production on an Azure VM (Docker Compose: backend + PostgreSQL + nginx), fronted by Caddy for automatic HTTPS, on a custom domain via Namecheap DNS.
Full step-by-step deployment guide — Azure VM provisioning, Blob Storage setup, Docker Compose deploy, Caddy/TLS config, DNS records, and the managed Azure Container Apps alternative — is in docs/deployment.md.
Quick reference: production deploy commands
# On the VM, after cloning and configuring .env
docker compose up -d --build
docker compose exec backend bash -c "cd /app/backend && alembic upgrade head"
docker compose psAdmin account bootstrap (one-time, after first deploy):
curl -X POST https://your-api-url/admin/init \
-H "Content-Type: application/json" \
-d '{"secret": "YOUR_ADMIN_SECRET", "email": "admin@example.com", "password": "yourpassword", "name": "Admin"}'MIT


