Semantic Resume Screening Β· Skill Gap Analysis Β· AI Interviews Β· Multimodal Evaluation
Career Connect AI is a full-stack recruitment automation platform that replaces manual resume screening with an AI-driven pipeline. It uses Doc2Vec embeddings, GPT-4.1 semantic reasoning, and upcoming multimodal analysis (emotion, speech, identity) to give HR teams objective, data-backed hiring decisions β and gives candidates a personalised roadmap to close their skill gaps.
| Module | Feature |
|---|---|
| π Auth | JWT-based register/login, role-based access (Candidate / HR / Admin) |
| π Resume Upload | PDF & DOCX parsing, Doc2Vec embedding on upload |
| πΌ Job Descriptions | HR creates JDs with title, description & required skills; auto-embedded |
| π§ Semantic Matching | Doc2Vec cosine similarity + GPT-4.1 hybrid score (FR-4.1, 4.4) |
| π¨ Match Score UI | Circular progress rings, colour-coded tier (Green / Amber / Red) (FR-4.2) |
| π Skill Overlap | Matched, missing, and extra skills (FR-4.3) |
| π Recruiter View | Sortable and filterable ranked candidate table (FR-4.5) |
| πΊοΈ Skill Gap Analysis | AI-detected missing skills with impact ranking (FR-5.1, 5.3) |
| π Learning Recommendations | GPT-4.1 course names, topic descriptions, estimated time (FR-5.2) |
| π Smart Article Redirect | Start Learning opens best GPT-chosen tutorial in new tab |
| β Progress Tracking | Mark skills In Progress / Completed; full event history (FR-5.4) |
| π€ AI Interview | Dynamic JD-contextualised question generation via GPT-4.1 RAG |
| Module | Status |
|---|---|
| π Emotion Analysis | DeepFace integration during interview β planned |
| π Speech Analysis | Librosa + RAVDESS tone/sentiment β planned |
| π‘οΈ Anti-Cheat Engine | YOLOv8 multi-person detection + tab-switch guards β planned |
| πͺͺ Identity Verification | Face-match against uploaded ID β planned |
| π PDF Reports | ReportLab evaluation reports β planned |
| π¨ Event-Driven Pipeline | RabbitMQ / Kafka for async processing β planned |
| π³ Containerisation | Docker + Kubernetes deployment β planned |
graph TB
subgraph FE["Frontend - React + Vite + Tailwind"]
UI_Auth[Auth Pages]
UI_Dashboard[Dashboard]
UI_Match[Resume Match]
UI_Interview[AI Interview]
UI_Reports[Reports]
end
subgraph BE["Backend - FastAPI"]
API[REST API port 8000]
subgraph Routers["Routers"]
R_Auth["auth"]
R_Resume["resume"]
R_JD["jd"]
R_Match["match"]
R_Interview["interview"]
R_Rec["recommendations"]
R_HR["hr"]
end
subgraph AIServices["AI Services"]
SVC_AI["ai_service.py - GPT-4.1"]
SVC_D2V["doc2vec_service.py"]
SVC_GEM["gemini_service.py shim"]
end
subgraph CoreLayer["Core"]
SEC["security.py - JWT"]
CFG["config.py - Settings"]
MODELS["models.py - ORM"]
end
end
subgraph Storage["Storage"]
DB[(SQLite or PostgreSQL)]
FS[Doc2Vec Artifacts]
end
subgraph ExtAI["External AI"]
GHAI["GitHub AI - GPT-4.1"]
end
FE -->|HTTP + JWT| API
API --> Routers
Routers --> AIServices
Routers --> CoreLayer
AIServices --> GHAI
AIServices --> SVC_D2V
CoreLayer --> MODELS
MODELS --> DB
SVC_D2V --> FS
sequenceDiagram
participant C as Candidate
participant API as FastAPI
participant D2V as Doc2Vec
participant GPT as GPT-4.1
participant DB as Database
C->>API: POST resume upload PDF or DOCX
API->>D2V: Extract text and infer embedding
D2V-->>API: 100-dim vector
API->>DB: Store resume and embedding
C->>API: POST match with resumeID and jobID
API->>DB: Fetch both embeddings
API->>API: Compute cosine similarity
API->>GPT: Semantic reasoning prompt
GPT-->>API: score 0 to 100
API->>API: hybrid = cosine 70pct + GPT 30pct
API->>GPT: ai_skill_recommendations for missing skills
GPT-->>API: courses and descriptions
API->>DB: Persist SkillRecommendation rows
API-->>C: hybridScore + tier + skillOverlap + recommendations
sequenceDiagram
participant C as Candidate
participant API as FastAPI
participant GPT as GPT-4.1
participant DB as Database
C->>API: POST interview start with jobID and experience
API->>GPT: ai_generate_question with JD context
GPT-->>API: contextual first question
API->>DB: Store session and transcript
API-->>C: sessionID and firstQuestion
loop Each answer turn
C->>API: POST interview answer with transcript
API->>GPT: ai_generate_question with history
GPT-->>API: next contextual question
API-->>C: nextQuestion
end
C->>API: POST interview end
API->>API: create evaluation for session
API-->>C: evalID and estimatedReady
Career-Connect-AI/
βββ src/
β βββ pages/
β β βββ ResumeMatch.tsx # Full matching and skill gap UI
β β βββ InterviewSelection.tsx
β β βββ Dashboard.tsx
β β βββ Reports.tsx
β β βββ Profile.tsx
β βββ context/AuthContext.tsx
β βββ lib/api.ts
β βββ index.css
β
βββ backend/
βββ app/
β βββ main.py
β βββ models.py
β βββ schemas.py
β βββ db.py
β βββ deps.py
β βββ security.py
β βββ ai_service.py # GPT-4.1 unified service
β βββ doc2vec_service.py
β βββ gemini_service.py
β βββ utils.py
β βββ core/config.py
β βββ artifacts/
β βββ routers/
β βββ auth.py
β βββ resume.py
β βββ jd.py
β βββ match.py
β βββ interview.py
β βββ evaluation.py
β βββ recommendations.py
β βββ report.py
β βββ dashboard.py
β βββ history.py
β βββ profile.py
βββ requirements.txt
βββ .env
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite, TypeScript, Tailwind CSS, Lucide Icons |
| Backend | FastAPI, Uvicorn, Python 3.11+ |
| Database | SQLite (dev) / PostgreSQL (prod) via SQLAlchemy |
| AI β Primary | GPT-4.1 via GitHub AI Inference |
| AI β Embeddings | Doc2Vec (Gensim) |
| AI β Fallback | TF-IDF cosine similarity |
| Auth | JWT (python-jose) + bcrypt (passlib) |
| File Parsing | PyPDF2, python-docx |
- Python 3.11+, Node.js 18+
- A GitHub PAT with model access
git clone https://github.com/Shreyyy07/Career-Connect-AI---Major-Project1.git
cd Career-Connect-AI---Major-Project1cd backend
python -m venv venv
venv\Scripts\activate # Windows
pip install -r requirements.txtCreate backend/.env:
DATABASE_URL=sqlite+pysqlite:///./career_connect_ai.db
JWT_SECRET=your-secret-key-here
CORS_ORIGINS=http://localhost:5173
GITHUB_TOKEN=github_pat_xxxxxxxxxxxx
GITHUB_AI_ENDPOINT=https://models.github.ai/inference
GITHUB_AI_MODEL=openai/gpt-4.1python -m uvicorn app.main:app --reload
# API: http://localhost:8000
# Swagger: http://localhost:8000/docscd ..
npm install
npm run dev
# App: http://localhost:5173| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/auth/register |
Register user |
POST |
/api/v1/auth/login |
Login and get JWT |
POST |
/api/v1/resume/upload |
Upload PDF or DOCX |
POST |
/api/v1/jd/upload |
Create JD (HR only) |
POST |
/api/v1/match |
Run hybrid AI match |
GET |
/api/v1/hr/matches |
Recruiter ranked view |
GET |
/api/v1/recommendations/{id}/resource-url |
GPT article URL |
POST |
/api/v1/recommendations/{id}/status |
Update learning status |
POST |
/api/v1/interview/start |
Start AI interview |
POST |
/api/v1/interview/answer |
Submit answer and get next question |
POST |
/api/v1/interview/end |
End session and trigger evaluation |
GET |
/api/v1/health |
Health check |
All in backend/app/ai_service.py with graceful offline fallbacks:
| Function | Purpose | Fallback |
|---|---|---|
ai_semantic_score() |
ResumeβJD match score 0 to 100 | TF-IDF cosine |
ai_generate_question() |
Dynamic interview question from JD | Static question bank |
ai_evaluate_answer() |
Score answer quality | 50.0 default |
ai_skill_recommendations() |
Courses, descriptions, time estimates | Empty list |
ai_find_resource_url() |
Best tutorial URL for a skill | Google search URL |
User βββββββββββ¬βββββ Resume (embedding_csv)
ββββββ JobDescription (embedding_csv, skills_csv)
ββββββ InterviewSession ββ Evaluation
ββββββ Assessment
ββββββ SkillRecommendation ββ SkillRecommendationEvent
- Bearer JWT required on all endpoints except
/auth/* - Passwords hashed with bcrypt
- Role-based access:
candidate|hr|admin - CORS restricted to configured origins
MIT β see LICENSE for details.
Built with β€οΈ by Shreyyy
β Star this repo if you find it useful!