Talent Radar
A self-reliant tool for navigating modern recruitment.
Version: 1.0
Date: April 2025
1. Introduction
1.1 Purpose
Hiring is repetitive. Talent Radar handles the monotony. It reads resumes, learns from job descriptions, matches intent, and prepares interviews. It works quietly and efficiently—designed to shrink time and surface relevance.
1.2 Scope
Included:
- Parsing resumes, extracting signal from noise.
- Matching human potential to job descriptions using vector mathematics.
- Generating questions for interviews.
- Updating real-time status using Redis.
- Connecting with ecosystems like Odoo, WhatsApp, and email.
Not Included:
- Payroll.
- Onboarding.
- Multi-user dashboards.

1.3 Stack
Component | Technology |
---|---|
Backend | FastAPI (AI), Django (Admin) |
Storage | PostgreSQL |
Vector Storage | Pinecone, Milvus DB |
Queue | Redis |
Intelligence | TogetherAI, Sentence Transformer Embeddings |
Integrations | Odoo CRM |
2. Shape of the System
2.1 Overview
Resume Drop → FastAPI → Pinecone/Milvus (Vectors) ↘ PostgreSQL (Metadata) ↘ Redis Queue → Django Admin → Odoo / Email
2.2 Breakdown
- Resume Ingestion: Accepts files, extracts text, generates embeddings.
- Matching Engine: Compares job and resume vectors, ranks by closeness.
- Queue Manager: Handles retries, tracks state, avoids duplication.
- Admin Interface: Visual CRUD, sends data to external systems.
3. Functionality
3.1 Resume Processing
ID | Requirement | Details |
---|---|---|
FR-01 | Parse files | PyPDF2, docx2txt |
FR-02 | Store embeddings | Pinecone + PostgreSQL |
FR-03 | Batch mode (100+) | Async queue |
3.2 Matching
ID | Requirement | Details |
---|---|---|
FR-04 | JD Embeddings | Sentence Transformer |
FR-05 | Rank relevance | Pincone cosine > 0.85 |
FR-06 | Export top picks | Odoo PATCH |
3.3 Interview Prep
ID | Requirement | Details |
---|---|---|
FR-07 | Generate questions | Prompted metaai/llama-70b-turbo |
FR-08 | Deliver via Email | IMTP |
4. Constraints
Category | Requirement | Implementation |
---|---|---|
Performance | 50 resumes/min | FastAPI + Redis |
Security | Encrypt PII | AES-256 + Django Fernet |
Scaling | 10K resumes/day | Kubernetes |
Usability | Training < 30 min | Minimal Admin Panel |
5. Endpoints
POST /api/v1/pipeline/resume-store POST /api/v1/pipeline/resume-analyzer GET /api/v1/webhook/receiver?task_id=<ID>
POST /api/candidates/ GET /api/job-roles/<id>/analyze
6. Data Shapes
SQL Models
Candidate: resume: file raw_text: text metadata: JSON JobRole: description: text embeddings: binary
Vector Store (Qdrant)
{ collection: "resumes", vector: [1536 floats], payload: { candidate_id: 43, skills: ["python", "ml"] } }
7. Failure Plans
Failure | Resolution |
---|---|
Parser crash | Retry → DLQ |
Agent limits | Backoff 10→60s |
Odoo down | Cache, then sync |
8. Deployment
docker-compose.yml: fastapi django qdrant
CI/CD: GitHub Actions → AWS ECS
9. Observability
- Latency: P99 < 5s
- Accuracy: A/B test vs HR manual
- Tools: Prometheus + Grafana, Sentry
Talent Radar observes, learns, and then steps back.