Skip to content
alekhya1098Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

JobPilot — AI Interview Agent

A full-stack, personalized AI interview platform. From resume upload to offer letter.

JobPilot is a proof-of-concept for a next-gen AI interview agent that personalizes every question to the candidate's background and the target role — adapting tone in real time, coaching live, and scoring with hallucination checks.


Demo

Live demo credentials (pre-loaded with sample data):

Email:    demo@jobpilot.ai
Password: Demo1234

Quick Start

Prerequisites

1. Clone and configure

git clone <repo-url>
cd jobpilot

cp backend/.env.example backend/.env
# Open backend/.env and set: GROQ_API_KEY=gsk_...

2. Run the backend

cd backend
pip install -r requirements.txt
python seed.py          # loads demo user + sample data
uvicorn app.main:app --reload --port 8000

3. Run the frontend

# new terminal
cd frontend
npm install
npm run dev

Open http://localhost:5173 — log in with the demo credentials above.

4. Run tests

cd backend
pytest tests/ -v

Architecture

┌─────────────────────────────────────────────────────────────────────┐
│                        React 18 Frontend                             │
│                                                                       │
│  Dashboard │ Resume Analyzer │ Interview Room │ Video │ Job Tracker  │
│                                                                       │
│  ┌─────────────────┐  ┌──────────────────┐  ┌──────────────────┐   │
│  │  Zustand Store  │  │  React Query     │  │  react-hot-toast │   │
│  │  (interview,    │  │  (server state)  │  │  (notifications) │   │
│  │   auth state)   │  └──────────────────┘  └──────────────────┘   │
│  └─────────────────┘                                                  │
└──────────────────────────────┬──────────────────────────────────────┘
                                │ REST + SSE streaming
┌──────────────────────────────▼──────────────────────────────────────┐
│                      FastAPI Backend                                  │
│                                                                       │
│  ┌─────────────────────────────────────────────────────────────┐    │
│  │                   LangGraph Agent Layer                      │    │
│  │                                                               │    │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐  │    │
│  │  │ Resume Agent │  │  JD Analyzer │  │Interview Conductor│  │    │
│  │  │              │  │              │  │                  │  │    │
│  │  │ PDF parsing  │  │ Skill gap    │  │ State machine:   │  │    │
│  │  │ Skill extract│  │ Question bank│  │ INTRO→CORE→DONE  │  │    │
│  │  │ Bullet rewrite│ │ Role-specific│  │ Adaptive tone    │  │    │
│  │  └──────────────┘  └──────────────┘  └──────────────────┘  │    │
│  │                                                               │    │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐  │    │
│  │  │ Video Agent  │  │  Evaluator   │  │   Voice Agent    │  │    │
│  │  │              │  │              │  │                  │  │    │
│  │  │ MediaPipe    │  │ STAR scoring │  │ Whisper STT      │  │    │
│  │  │ Eye contact  │  │ Hallucination│  │ OpenAI TTS       │  │    │
│  │  │ Confidence   │  │ check        │  │ ElevenLabs TTS   │  │    │
│  │  └──────────────┘  └──────────────┘  └──────────────────┘  │    │
│  └─────────────────────────────────────────────────────────────┘    │
│                                                                       │
│  SQLite (dev) / PostgreSQL (prod)    Redis (session checkpointing)   │
└─────────────────────────────────────────────────────────────────────┘

Personalization Engine

The core differentiator — every interview is unique to the candidate:

Resume Upload
    │
    ▼
┌─────────────────────────────────────────┐
│           Candidate Profile              │
│  - Level: junior/mid/senior/staff        │
│  - Skills: [Python, AWS, ...]            │
│  - Weak areas: [ML, Mobile, ...]         │
│  - Work history + bullet analysis        │
└──────────────────┬──────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────┐
│           JD Analysis                    │
│  - Required skills                       │
│  - Interview focus areas                 │
│  - Culture signals                       │
│  - Seniority level                       │
└──────────────────┬──────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────┐
│        Personalized Question Bank        │
│  - Role-specific questions               │
│  - Difficulty scaled to candidate level  │
│  - Topics weighted by JD requirements    │
│  - Skips topics candidate clearly knows  │
└──────────────────┬──────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────┐
│         Adaptive Interview Loop          │
│                                          │
│  Answer quality → tone adjustment        │
│  Shallow answer → follow-up question     │
│  Stress signals → supportive mode        │
│  Strong answers → challenging mode       │
│  Real-time coaching hints                │
└─────────────────────────────────────────┘

Features

Core

  • Resume Analyzer — Parse PDF/TXT, extract skills, score against JD, suggest STAR-method bullet rewrites
  • AI Interview Conductor — LangGraph stateful agent with adaptive questioning, tone adjustment, and follow-up generation
  • Real-Time Coaching — Live tips during the interview (STAR method reminders, metric suggestions)
  • Post-Interview Report — Detailed scorecard with radar chart, per-question breakdown, improvement suggestions
  • Job Tracker — Kanban board (Wishlist → Applied → Interviewing → Offer)
  • Interview History — Browse all past sessions with search and filters
  • Interview Replay — Replay any session with playback controls and per-message scoring

Voice & Video

  • Voice Mode — Speak your answers via Web Speech API, transcribed by OpenAI Whisper
  • TTS Playback — Interviewer speaks questions aloud (OpenAI TTS / ElevenLabs)
  • Video Screening — Record video answers, analyzed for eye contact, confidence, and engagement via MediaPipe

AI Quality

  • Hallucination Check — Verifies the AI never asks about skills not on the resume
  • Consistency Score — Measures how consistent the AI's scoring is across runs
  • Score Trend — Dashboard shows improvement over multiple sessions
  • Soft Skills Analysis — Confidence, specificity, executive presence, storytelling scores
  • Peer Benchmarking — Percentile ranking against other candidates

Recruiter Mode

  • Create shareable interview templates
  • Collect candidate submissions with pass/fail thresholds
  • View full reports for each candidate

Tech Stack

Layer Technology
Frontend React 18, TypeScript, Tailwind CSS, Zustand, React Query
Backend Python 3.11+, FastAPI, LangGraph, LangChain
LLM Groq (Llama 3.3) · OpenAI GPT-4o · Anthropic Claude
Voice OpenAI Whisper (STT) + OpenAI TTS / ElevenLabs
Video MediaPipe FaceMesh, OpenCV
Database SQLite (dev) / PostgreSQL (prod)
Rate Limiting SlowAPI
Deploy Docker Compose + Nginx (HTTPS)

API Reference

Interactive docs at http://localhost:8000/docs

POST /api/auth/register          Register new user
POST /api/auth/login             Login

POST /api/resume/upload          Parse resume (PDF/TXT)
GET  /api/resume/user/{id}       List user's resumes
POST /api/resume/{id}/match-jd   Score resume vs job description
POST /api/resume/{id}/rewrite-bullets  AI bullet rewrites

POST /api/interview/sessions     Create interview session
POST /api/interview/sessions/{id}/message   Send answer
GET  /api/interview/sessions/{id}/stream-message  SSE streaming
GET  /api/interview/sessions/user/{id}  List all sessions

POST /api/evaluation/sessions/{id}/evaluate  Generate report
GET  /api/evaluation/sessions/{id}/report    Get report
GET  /api/evaluation/users/{id}/insights     Cross-session insights

POST /api/video/sessions/{id}/upload  Upload video answer
GET  /api/video/{id}                  Get analysis results

POST /api/voice/transcribe       STT (Whisper)
POST /api/voice/synthesize       TTS

Environment Variables

See backend/.env.example for the full list. Only GROQ_API_KEY is required.

# Minimum to run everything
GROQ_API_KEY=gsk_...

# Optional — enables voice features
OPENAI_API_KEY=sk-...

Docker (Production)

# Standard HTTP
docker-compose up

# HTTPS (required for video/microphone in production)
./nginx/gen-cert.sh
docker-compose -f docker-compose.https.yml up

What Makes JobPilot Different

Feature Existing Tools JobPilot
Scope Interview only Full job search funnel
Personalization Generic questions Resume + JD + behavior-aware
Feedback Post-session only Real-time coaching
Voice Rare Built-in Whisper STT + TTS
Video None Eye contact + confidence scoring
Job tracking Separate tool Integrated Kanban
Tone adaptation None Stress-aware (3 modes, automatic)
Hallucination check None Built-in consistency scoring
Recruiter tooling None Template creation + candidate tracking

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages