All projects
AI & Multi-Agent Systems · Enterprise Logistics & SaaS · Distributed Backend & APIs

Haira – AI Hiring Platform

Resume screening and AI-led technical interviews

Role
Technical Lead (Backend, AI & Full-Stack)
Client
The Special Character
Decorative cover art for the Haira – AI Hiring Platform case study

An AI hiring platform that parses resumes, scores candidates against a job specification and runs conversational technical interviews. I led the architecture and the team: FastAPI services, LLM agents with function calling, pgvector matching and a Next.js frontend.

  • Designed the whole system: FastAPI services, Celery queues, PostgreSQL data model, authentication and the Next.js frontend.
  • Built AI agent workflows on OpenAI and Claude tool/function calling with strict JSON schemas. Output that fails schema validation is retried instead of reaching downstream steps.
  • Added pgvector embeddings and cosine similarity search to score candidates against job requirements.
  • Streamed interview responses over Server-Sent Events, with conversation state cached in Redis so a dropped connection can resume.
  • Led the backend and frontend teams: sprint planning, design reviews, code review, mentoring, automated tests and CI/CD.
4Agent workflowsResume parsing, job analysis, interview orchestration and conversational AI
AsyncProcessingA job token is returned at once; processing continues in the queue
2Teams ledBackend and frontend engineering, from planning to production releases
  • Python
  • FastAPI
  • AI Agents
  • PostgreSQL
  • pgvector
  • Redis
  • Celery
  • Next.js
  • TypeScript
  • Docker

Problem and objectives

Screening resumes by hand is slow and inconsistent, and it does not scale with application volume. Haira was built to take in resumes, extract structured skills and experience, score each candidate against the job requirements, and run an interactive text or voice interview, with a person reviewing the result instead of doing the first pass.

Architecture

Architecture diagram of Haira's async multi-agent pipeline: FastAPI service, Celery workers, parsing, matching and interview agents, PostgreSQL with pgvector, Redis session state, SSE streaming to the Next.js client.

Diagram: Haira's async multi-agent pipeline.

The backend is a set of asynchronous FastAPI services. A new application returns a job token immediately and the work continues in Celery workers backed by Redis. Resumes are parsed into a strict JSON schema with LLM function calling, then embedded and stored in PostgreSQL with pgvector so matching can combine keyword filters with semantic similarity.

The interview orchestrator runs multi-turn agents with session state held in Redis, and streams model output to the Next.js client over Server-Sent Events so answers appear as they are generated.

Tradeoffs

Every step that makes a decision (scoring a resume, flagging a concern, scoring an answer) returns constrained, schema-validated output. The interview dialogue itself is left open-ended. Mixing those up in either direction, constraining the conversation or freeing the scoring, caused most of the reliability problems during development.

Matching has the same shape. Keyword filters alone missed strong candidates who described a skill in different words, and semantic similarity alone over-ranked resumes that missed hard requirements, so Haira uses both.

Read more

Building Haira: multi-agent resume screening with FastAPI and pgvector