A fully local , AI interview platform that evaluates candidates based on their actual resume — no cloud APIs, no data leaks.
Getting Started · Features · Architecture · API Reference · Contributing
|
Questions are dynamically generated from the candidate's uploaded resume — covering real projects, skills, and experience. No generic trivia. |
Powered by Llama 3.2 (3B) running locally via Ollama, the AI conducts fluid, multi-turn technical interviews that adapt based on responses. |
|
After the interview, a detailed performance report is generated with scores, strengths, weaknesses, and a hire/no-hire recommendation. |
Everything runs on your machine. Your resume data never leaves your device — no external API calls, no cloud storage, no tracking. |
|
Report generation runs in a background thread so the UI stays responsive — no frozen screens or loading spinners blocking the experience. |
Handcrafted with glassmorphism, mesh gradients, micro-animations, and modern typography — zero CSS frameworks, pure craftsmanship. |
| Layer | Technology | Purpose |
|---|---|---|
| Backend | Python 3.11+, FastAPI, Uvicorn | REST API, CORS, static file serving |
| PDF Parsing | pdfplumber | Resume text extraction from PDF |
| HTTP Client | httpx | Async communication with Ollama |
| Validation | Pydantic v2 | Request/response data validation |
| AI Engine | Ollama + Llama 3.2:3b | Local LLM inference |
| Frontend | HTML5, CSS3, Vanilla JS | Zero-dependency UI |
| Icons | Lucide Icons (CDN) | Modern icon set |
| Typography | Google Fonts (DM Serif Display, Plus Jakarta Sans) | Premium typefaces |
┌─────────────────────────────────────────────────────────────┐
│ BROWSER CLIENT │
│ ┌──────────┐ ┌───────────────┐ ┌──────────────────┐ │
│ │ Landing │──▶│ Interview │──▶│ Report │ │
│ │ Page │ │ Chat UI │ │ Dashboard │ │
│ └──────────┘ └───────────────┘ └──────────────────┘ │
└──────────────────────────┬──────────────────────────────────┘
│ HTTP (REST)
┌──────────────────────────▼──────────────────────────────────┐
│ FASTAPI SERVER (:8000) │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ /api/upload │ │ /api/chat │ │ /api/report │ │
│ │ resume │ │ message │ │ generation │ │
│ └──────┬──────┘ └──────┬──────┘ └───────┬─────────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌───────▼─────────┐ │
│ │ Resume │ │ Prompt │ │ Session │ │
│ │ Parser │ │ Builder │ │ Store (TTL) │ │
│ └─────────────┘ └──────┬──────┘ └─────────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ Ollama │ │
│ │ Client │ │
│ └──────┬──────┘ │
└──────────────────────────┼──────────────────────────────────┘
│ HTTP (:11434)
┌───────▼───────┐
│ OLLAMA │
│ llama3.2:3b │
└───────────────┘
ResumeInterview/
│
├── 📂 backend/ # FastAPI application
│ ├── main.py # App entry point, CORS & static mount
│ ├── requirements.txt # Python dependencies
│ ├── 📂 routes/ # API endpoint handlers
│ │ ├── __init__.py
│ │ ├── upload.py # POST /api/upload — resume upload
│ │ ├── chat.py # POST /api/chat — interview Q&A
│ │ └── report.py # GET /api/report — fetch report
│ └── 📂 services/ # Business logic layer
│ ├── __init__.py
│ ├── resume_parser.py # PDF text extraction
│ ├── prompt_builder.py # LLM prompt construction
│ ├── ollama_client.py # Ollama HTTP client
│ └── session_store.py # In-memory session management
│
├── 📂 frontend/ # Static frontend (served by FastAPI)
│ ├── index.html # Landing page
│ ├── interview.html # Interview chat interface
│ ├── report.html # Report dashboard
│ └── 📂 assets/
│ ├── 📂 js/ # Page-specific JavaScript
│ │ ├── landing.js
│ │ ├── interview.js
│ │ └── report.js
│ └── 📂 styles/ # Page-specific stylesheets
│ ├── landing.css
│ ├── interview.css
│ └── report.css
│
└── README.md # ← You are here
| Requirement | Version | Download |
|---|---|---|
| Python | 3.11+ | python.org |
| Ollama | Latest | ollama.com |
| Git | Latest | git-scm.com |
git clone https://github.com/your-username/ResumeInterview.git
cd ResumeInterview# Download the Llama 3.2 model (~2GB)
ollama pull llama3.2:3b
# Verify Ollama is running (default: http://localhost:11434)
ollama servecd backend
# Create and activate virtual environment
python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
# Install dependencies
pip install -r requirements.txtuvicorn main:app --reload --port 8000🌐 http://localhost:8000
Tip
The backend serves the frontend as static files — no separate frontend server needed!
For frontend-only development, use VS Code Live Server on port 5500. API calls target http://localhost:8000/api.
┌──────────────┐ ┌──────────────────┐ ┌─────────────────┐ ┌──────────────────┐
│ LANDING │────▶│ UPLOAD RESUME │────▶│ AI INTERVIEW │────▶│ VIEW REPORT │
│ PAGE │ │ + Job Title │ │ (~10 turns) │ │ Dashboard │
└──────────────┘ └──────────────────┘ └─────────────────┘ └──────────────────┘
| Step | Action | Details |
|---|---|---|
| 1 | Explore | Browse the landing page to learn about the platform |
| 2 | Upload | Drag & drop your PDF resume and enter a target job title |
| 3 | Interview | Answer AI-generated questions in a real-time chat interface |
| 4 | Report | View your comprehensive performance dashboard with scores & recommendations |
Upload a PDF resume and start a new interview session.
| Parameter | Type | Description |
|---|---|---|
file |
File |
PDF resume file (multipart form) |
job_title |
string |
Target job position |
Response 200 OK
{
"session_id": "uuid-string",
"message": "Resume uploaded successfully",
"first_question": "Based on your experience with..."
}Send a candidate's answer and receive the next interview question.
| Parameter | Type | Description |
|---|---|---|
session_id |
string |
Active session identifier |
answer |
string |
Candidate's response |
Response 200 OK
{
"question": "Can you elaborate on...",
"is_complete": false,
"turn": 3
}Retrieve the generated interview performance report.
Response 200 OK
{
"status": "completed",
"report": {
"overall_score": 78,
"strengths": ["..."],
"weaknesses": ["..."],
"recommendation": "Hire"
}
}- 🔐 Authentication & user accounts
- 💾 Persistent database storage (PostgreSQL / SQLite)
- 📄 Support for DOCX and TXT resume formats
- 🌍 Multi-language interview support
- 📈 Historical performance tracking & analytics
- 🎙️ Voice-based interview mode
- 🐳 Docker containerization
- ☁️ One-click cloud deployment
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Important
Please ensure your code follows the existing project conventions and includes appropriate tests.
This project is licensed under the MIT License — see the LICENSE file for details.
Built with ❤️ using FastAPI, Ollama & Vanilla JS
If this project helped you, consider giving it a ⭐