AI-powered candidate screening that reasons about candidates like a senior engineer — not just keyword matching.
| Feature | How It Works |
|---|---|
| Adversarial Detection | Cross-validates listed skills against project evidence. Catches keyword stuffing and AI-generated content. |
| 8-Dimension Scoring | Evaluates skill depth (not presence) across technical depth, production experience, stack alignment, and 5 more dimensions. |
| Growth Trajectory | Analyzes career progression — a fast-learning fresher can outrank a stagnating mid-level. |
| Candidate Q&A | RAG-powered chat: ask "Who has the deepest RAG experience?" and get cited answers. |
| Interview Questions | Generates questions that target each candidate's specific weak spots — not templates. |
| Bias Audit | Score distributions by university, location, and experience level. Every decision is logged and auditable. |
Pipeline: Parse JD → Parse Resumes → Score (8 dims) → Rank → Interview Qs → Vector Ingest
cp .env.example .env # add your GOOGLE_API_KEY
make docker-up # starts PostgreSQL, Redis, API, Frontend- API: http://localhost:8000/docs
- Frontend: http://localhost:8501
make install # install deps
docker compose up postgres redis -d # start DB + cache
make api # start backend (port 8000)
make frontend # start frontend (port 8501)| Endpoint | Method | Description |
|---|---|---|
/api/v1/upload |
POST | Upload JD text + batch resumes (PDF/DOCX) |
/api/v1/screen/{job_id} |
POST | Start the screening pipeline |
/api/v1/screen/{job_id}/status |
GET | Poll pipeline progress |
/api/v1/candidates/{job_id} |
GET | Ranked candidate list |
/api/v1/candidate/{id} |
GET | Full candidate detail (scores, flags, questions) |
/api/v1/chat |
POST | RAG Q&A with citations |
/api/v1/questions/{id} |
GET | Personalized interview questions |
/api/v1/report/{job_id}/bias |
GET | Bias audit report |
Each candidate is scored 0–10 on 8 dimensions with chain-of-thought justifications:
- Technical Depth — system design, architecture patterns, algorithm complexity
- Project Complexity — production systems vs toy projects
- Stack Alignment — match with the JD's required technologies
- Production Experience — deployment, monitoring, incident response evidence
- Learning Velocity — speed of adopting new technologies
- Documentation Quality — how clearly the resume communicates achievements
- Domain Relevance — industry and domain experience match
- Communication Clarity — ability to articulate technical decisions
composite = weighted_average(8 dimension scores)
growth_bonus = velocity_score × 0.15
adversarial = (1 − authenticity) × −2.0
hireiq_score = clamp(composite + growth_bonus + adversarial, 0, 10)
| Layer | Technology |
|---|---|
| Orchestration | LangGraph |
| LLM | Google Gemini 2.5 Flash |
| Vector DB | ChromaDB (cosine similarity) |
| Embeddings | Sentence-Transformers (all-MiniLM-L6-v2) |
| PDF Parsing | PyMuPDF + pdfplumber |
| Backend | FastAPI (async) |
| Database | PostgreSQL 16 |
| Cache | Redis 7 |
| Frontend | Streamlit |
| Storage | Local disk (S3 optional) |
src/
├── agents/ # 5 AI agents (parser, scorer, ranker, interview, chat)
├── api/ # FastAPI route handlers
├── models/ # SQLAlchemy ORM models
├── orchestrator/ # LangGraph state machine + node functions
├── schemas/ # Pydantic request/response models
├── services/ # Business logic layer
├── tools/ # PDF parser, adversarial detector, vector store, etc.
└── utils/ # Logging, embeddings, file handler
frontend/
├── app.py # Streamlit entry point
└── pages/ # 6 pages (upload, dashboard, detail, chat, questions, audit)
tests/ # pytest test suites
MIT
