At a glance
- A conversational agent that talks to each candidate and captures their details as structured data, not prose
- Resume intelligence that reads every CV format and turns it into a scored, structured review
- Both AI steps write into one unified candidate profile before a human ever sees it
Before Hireflow, hiring data lived in scattered forms and spreadsheets with no single candidate view. Recruiters retyped details from every CV by hand, and early screening was a manual time sink that relied more on gut feel than on structured comparison.
The bigger the applicant pool grew, the more that manual step cost. Every resume needed a human to read it, judge it, and re-enter it somewhere comparable. Every candidate conversation needed a form that either asked too little or asked too much, with no way to adapt to what the candidate actually said.
A structured-data problem, not a screening problem
The core issue wasn't that recruiters made bad judgment calls. It was that judgment never had clean data to work with. A static form returns whatever the candidate types, unstructured and inconsistent. A resume upload returns a PDF or DOCX that still has to be read, one at a time, by a person.
There was no governed intake either. Candidate-supplied information had no sanitization step, no structured schema, and no protection against a candidate steering the process by what they typed. The gap between an application and a comparable, trustworthy record wasn't a workflow gap. It was structural.
Every stage the funnel depends on is connected into one profile:
| Stage |
Sources |
What we track |
| Conversational Intake |
Anthropic Claude SDK |
Skills, experience, salary expectation, work mode, notice period |
| Resume Intelligence |
Cloud storage (PDF, DOCX) |
Fit score, reason, explicit highlights and gaps |
| Screening |
Rule-based checks + AI fit-review |
Deterministic pass/fail, then AI review only when warranted |
| Candidate Profile |
Unified record |
Single source of truth feeding the hiring pipeline |
| Pipeline |
Event-driven state machine |
Ordered processing, retries, dead-lettering |
Why the standard answer didn't fit
The instinctive fix is a longer application form and a recruiter who reads every resume that comes in. That works at low volume. At real volume, forms return messy free text a system can't compare across candidates, and manual resume review means the most expensive part of hiring, human judgment, gets spent on data entry instead.
Hireflow didn't need a longer form or a faster reader. They needed AI that captured structured data at the point of intake, with every answer validated before it reached a recruiter, and a screening step that spent AI cost only on candidates who'd already cleared a deterministic bar.
What Orbit built
The architecture runs on one constraint: every AI output returns validated, structured data, never free text a human has to interpret or clean up.
- A conversational application agent built on forced structured output, each turn is a forced tool call that returns both the candidate-facing reply and the structured fields collected so far
- Context-aware conversation that reasons over the job description and recent exchange, prompting the candidate to upload a resume or add a LinkedIn profile when needed
- Hardened against prompt injection, candidate input is sanitized and passed as a separate system message, so a candidate can't hijack the agent's instructions
- Resume intelligence that extracts text from any format and returns a fixed shape, a fit score, a reason, and explicit highlights and gaps, with a score threshold gating who advances
- Cost-aware screening, where the heavier AI fit-review only runs after a candidate clears the deterministic rule-based check first
- Both AI steps writing into one unified candidate profile, which then enters a deterministic, event-driven pipeline with ordered processing, retries, and dead-lettering
Tech Stack
TypeScript, Hono, SvelteKit, Drizzle ORM, PostgreSQL (Neon), Anthropic Claude SDK, GCP Cloud Run, Terraform, GitHub Actions.
How the rollout happened
1. Built the conversational agent first
The forced tool-call schema was defined before a single conversation ran live, carrying both the candidate-facing reply and the structured fields collected so far, plus a flag for when the agent has enough to finish.
2. Hardened it against bad input
Candidate-supplied information was sanitized and isolated into its own system message rather than concatenated into the prompt, closing off the one obvious way a candidate could try to steer the agent's instructions.
3. Added resume intelligence alongside it
CV extraction was built to run concurrently across formats, with Claude returning a fixed, parseable shape every time, and a rule-based screen added first so the heavier AI review only runs on candidates worth the cost.
4. Unified everything into one profile
Both AI steps were wired to write into the same candidate record, which then feeds a deterministic, event-driven pipeline, so the funnel view and the underlying data can never quietly disagree.
Unified everything into one profile
Both AI steps were wired to write into the same candidate record, which then feeds a deterministic, event-driven pipeline, so the funnel view and the underlying data can never quietly disagree.
What changed for the team
Before, every resume needed a recruiter to read it and re-type it somewhere comparable, and every candidate conversation ran through a static form that couldn't adapt to what someone actually said.
- Candidates have a guided conversation instead of a static form, and their answers arrive as structured data
- Every resume gets a scored, structured review the moment it's uploaded, in any format
- AI review spend tracks genuine candidates, not every application that comes in
- Recruiters spend their time on judgment calls, not data entry
- The funnel and the underlying records can never silently disagree, since every state transition is deterministic and auditable
The data was always there, buried in resumes and conversations nobody had time to structure by hand. Orbit built the layer that captures it, scores it, and hands it to a recruiter ready to act on.