All work
05/HR-tech

HRXpert

Recruitment automation that scores a resume, runs a live voice interview, and grades a developer's GitHub — inside one applicant tracking system a small company can afford.

Domain
HR-tech · recruitment automation
Status
Complete and validated; not publicly deployed
01

The challenge

Recruiters spend an average of 23 hours screening resumes per hire, and it takes roughly 44 days to fill a single role — a cost most small and medium enterprises simply can't absorb. Enterprise recruitment tools price that segment out entirely, with base pricing north of $25,000 a year, while cheaper alternatives cover fragments of the workflow: scheduling, or a basic ATS, but not deep AI assessment.

On top of the cost problem, manual screening is inconsistent and prone to unconscious bias — SHRM research links it to as much as a 30% reduction in workforce diversity.

There was no affordable, unified platform that could screen resumes, run structured interviews and assess technical candidates end to end.

02

What we built

A role-aware platform serving four user types — candidates, recruiters, admin-recruiters and interviewers — through one interface.

  • AI resume scoring — a candidate uploads a resume; the system extracts the text, compares it against the job description with a structured zero-shot prompt, and returns a 0–10 fit score broken down across technical skill match, experience relevance, project quality and communication clarity. Scoring runs asynchronously, so it never blocks the candidate's submission.
  • Real-time AI voice interviewing — a live, browser-based voice interview over WebRTC. The AI transcribes in real time with Whisper, asks adaptive follow-ups based on the resume and prior answers, and speaks back with text-to-speech — then produces a scored, human-readable transcript for the recruiter.
  • GitHub developer evaluation — for technical roles, the platform pulls a candidate's public GitHub activity (languages, project complexity, contribution frequency) and generates a developer fit score against the job requirements.
  • A full ATS with RBAC — job posting and lifecycle management, applicant pipeline tracking, automated notifications, interview scheduling with Google Calendar and Meet, and a billing layer — all gated by role-based access control enforced through RS256-signed JWTs.

The core design principle throughout: AI never makes the final call. Every AI output comes with visible reasoning, and the recruiter keeps override authority at every stage — a decision informed directly by research on candidate trust in automated hiring.

03

Stack

Technology stack, by layer
LayerWhat we used
AI / ML
  • OpenAI for zero-shot resume scoring and conversational interviewing
  • Whisper for real-time speech-to-text
  • TTS for the interviewer's voice
  • structured zero-shot prompting at fixed low temperature for scoring consistency
Frontend
  • Next.js 14 (App Router, React Server Components)
  • React 18
  • Tailwind CSS
  • native WebRTC
Backend
  • NestJS 10 (TypeScript) for core transactional services
  • FastAPI (Python 3.11) for async AI workers
  • MongoDB Atlas
  • Redis
  • RabbitMQ / CloudAMQP for event-driven processing
Infrastructure
  • AWS EC2, including a dedicated real-time interview instance
  • AWS Lambda
  • S3 with pre-signed URLs
  • Vercel
  • Docker with GitHub Actions CI/CD
  • RS256 JWT auth
  • Google OAuth 2.0 SSO
04

Decisions

Decision01

Decoupling AI latency from user-facing responsiveness

LLM calls for resume scoring take 18 seconds and interview scoring up to 42 — unacceptable if a candidate has to wait on that during submission. All AI-heavy work was routed through RabbitMQ as asynchronous events, isolated in dedicated FastAPI workers with no shared state.

That kept synchronous, user-facing APIs under a 320ms P95 even while AI processing ran in the background, and let the AI workers scale independently of the transactional core. It was validated under stress testing at 4x target concurrent load — 200 simultaneous submissions, zero message loss.

Decision02

Validating scoring quality against human judgment, not just functional correctness

It isn't enough for an AI scorer to run. It has to agree with what a human recruiter would decide. We ran a structured evaluation against an experienced HR professional across 73 resumes, computing Cohen's Kappa (0.895 — near-perfect agreement) and Matthews Correlation Coefficient (0.90) rather than a simple accuracy number, which would have been misleading given the class imbalance in shortlist and reject decisions.

Decision03

Proving the bias mitigation actually worked, rather than claiming it

Rather than assert the system was unbiased because names and photos were stripped, we ran a controlled anonymisation study: 111 resumes scored both with and without PII — names, emails, GitHub and LinkedIn, location — using an identical prompt and rubric.

Scores matched within ±1 point on 90.1% of resumes, with near-zero average drift of +0.08 points, exceeding the 85% similarity target. That's evidence the pipeline evaluates qualifications rather than demographic proxies, not just a design intention.

05

Results

0+
Test cases executed, 98%+ pass rate
0.3%
Interview transcript accuracy
Results
MetricResult
AI–human scoring agreement (Cohen's Kappa)0.895 — near-perfect
Bias-mitigation similarity rate90.1% (target ≥85%)
Average score drift from anonymisation+0.08 points
Interview transcript accuracy92.3% (target ≥90%)
API P95 at 50 concurrent users<320 ms (target <500 ms)
End-to-end resume scoring~18 seconds
End-to-end interview scoring~42 seconds
Test cases executed / pass rate420+ / 98%+, zero critical defects
Security scan (OWASP ZAP)No high- or critical-severity vulnerabilities
Stress test200 simultaneous submissions (4x target load), zero message loss
06

Screenshots

HRXpert admin dashboard
Admin dashboard
HRXpert recruiter dashboard
Recruiter dashboard
Job listings inside the recruiter dashboard
Jobs
Job pipeline view
View jobs
Single job detail view
Job detail
Empty create-job form
Create job