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 β