AI-powered recruitment dashboard that ranks, analyses, and synthesises candidate applications in real time.
HEpiR connects to the HrFlow.ai API to give HR teams a unified view of every job opening and its applicants. Drop a PDF resume into a job, and the system instantly scores the candidate against the role, generates a structured AI synthesis (strengths, weaknesses, upskilling recommendations), and lets HR attach supplementary documents — interview notes, technical test transcripts, audio recordings — that feed directly back into the scoring model.
- Ranked candidate list — candidates are automatically scored by HrFlow's native matching engine combined with an LLM adjustment layer.
- AI synthesis — structured summary, strengths, weaknesses, upskilling recommendations, and a hire verdict, auto-generated on upload and refreshable on demand.
- Extra documents — attach plain text, PDF, DOCX, or audio files to any candidate; each document is individually scored by the LLM and contributes to the total score.
- 🎙️ Voice Recording — record interview notes directly in the browser with automatic AI transcription (powered by Gemini 2.0 Flash).
- 💬 Interview Question Generator — generate tailored Technical, Behavioral, and Motivation questions based on the candidate's profile and all attached documents.
- ✉️ AI Email Generation — draft personalized recruitment emails (interviews, follow-ups, rejections) using candidate context, with direct "Open in Gmail" integration.
- Recruitment pipeline — customisable stages per job (Screening, Interview, Technical Test, …) with real-time stage tracking and manual score adjustments.
| Endpoint | Usage |
|---|---|
POST /v1/profile/parsing/file |
Parse a PDF resume and create a candidate profile |
GET /v1/profile/indexing |
Fetch a full candidate profile (skills, experiences, tags, metadata) |
PUT /v1/profile/indexing |
Store scores, synthesis, stage, and extra documents in profile tags/metadata |
POST /v1/tracking/indexing |
Link a candidate profile to a job (creates the application) |
GET /v1/tracking/searching |
List all candidates who applied to a given job |
GET /v1/job/indexing |
Fetch a single job's full data |
POST /v1/job/indexing |
Create a new job in the board |
GET /v1/job/searching |
List all jobs in the board |
POST /v1/score/searching |
Compute HrFlow's native matching score between a profile and a job |
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite 5, Vanilla CSS |
| Backend | Python 3.12, FastAPI |
| AI (Grading/Synthesis) | OpenRouter (configurable model) |
| AI (Transcription) | Google Gemini 2.0 Flash |
| Parsing | pypdf, python-docx |
| HR Data | HrFlow.ai API v1 |
| Infra | Docker & Docker Compose |
- Docker & Docker Compose
- An HrFlow.ai account with an API key, source key, and board key
- An OpenRouter API key (or any OpenAI-compatible LLM endpoint)
# Clone the repo
git clone <repo-url>
cd HEpiR-HREvolution
# Copy and fill in credentials
cp .env.example .env
# Edit .env with your actual keys
# Build and start the full stack
docker compose up --build- Frontend → http://localhost:3000
- API / Swagger UI → http://localhost:8080/docs
| Variable | Required | Description |
|---|---|---|
HRFLOW_API_KEY |
Yes | HrFlow.ai API secret key |
HRFLOW_USER_EMAIL |
Yes | HrFlow.ai account email |
HRFLOW_SOURCE_KEY |
Yes | HrFlow.ai source key (profile storage) |
HRFLOW_BOARD_KEY |
Yes | HrFlow.ai board key (job storage) |
LLM_API_KEY |
Yes | OpenRouter (or compatible) API key |
LLM_BASE_URL |
Yes | LLM base URL (default: https://openrouter.ai/api/v1) |
LLM_MODEL |
Yes | Model for grading/synthesis (e.g. nvidia/nemotron-super-49b-v1:free) |
frontend/ React 18 + Vite — dashboard UI
backend/ Python 3.12 + FastAPI — orchestration layer
├── routers/
│ ├── jobs.py job CRUD + stage pipeline
│ ├── candidates.py profile, email generation, file upload
│ ├── ai.py grading, synthesis, transcription, questions
│ └── webhooks.py incoming email parsing & auto-matching
└── services/
├── hrflow.py HrFlow API client
└── llm.py OpenRouter LLM calls
No local database — HrFlow is the single source of truth. Scores, synthesis, and extra documents are stored directly in profile tags and metadata. An in-memory cache layer is used to bridge HrFlow's indexing delay.
- Adrien CAPITAINE — Developer
- Nathan CHAMPAGNE — Developer
- Joris BELY — Developer
