Skip to content
RA — Rohit Agnihotri, home
Resume ↓

Techjockey Recruit · Hiring platform · 2026 · Live · 10 min read

An AI-assisted hiring platform with a voice interviewer in the browser

How do you give every applicant a structured, scored first-round interview within hours of applying, without a recruiter on the phone?

Techjockey Recruit replaces the 15–20 minute phone screen with an AI voice interview that candidates take in the browser, then writes the scored, transcribed result straight into a full applicant tracking system. Pipeline, interviews, offers, analytics, referrals and admin all live in the same product.

Techjockey Recruit home page at swiftcandidate.com, with View Open Roles and Track My Application buttons and a Recruiter Portal link (opens full size in a new tab)
Home page: swiftcandidate.com

At a glance

From application to first signal, not days
Minutes
Manual phone screen per candidate, now run by AI
15–20 min
For leadership, plus 9 exportable reports
15 KPIs
Staff roles × permissions
9 × 13
Role
Built end to end: product, design and engineering
Context
Self-directed; internal hiring system, live at swiftcandidate.com
Format
Live product
Stack
React 18 · TypeScript · Vite · Node 22 · Supabase · OpenAI Realtime · Cartesia · GPT-4o-mini · Tailwind · Vitest · Playwright

The problem

Mid-market tech hiring runs on a job board, a spreadsheet, a mailbox and a WhatsApp thread. The slow part is the first-round phone screen: 15–20 minutes per candidate, asking the same six questions (notice period, current CTC, expected CTC, location, role fit, communication), and half of those calls go unanswered. Applications pile up faster than a small team can call them, good candidates go cold in the queue, and no two screens are scored the same way. Techjockey Recruit replaces that round with an AI voice interview that writes straight into a full applicant tracking system: the pipeline, the scorecard and the candidate's record.

How a hire moves through Recruit

From job description to the company's HR records, in one system. Along the way, anyone working on the job can move a candidate ahead, reject them or close the job. Closing first shows what is still going on (candidates, interviews, unused interview links, open offers), then winds it all down.

  1. Write the JD

    A hiring manager or recruiter drafts the role, openings, experience and pay range.

  2. Approve it

    Department head, then founder, then an admin assigns recruiters. A company setting, off by default.

  3. Open the job

    Listed on the careers page. A confidential job stays off it and off job boards.

  4. Take in candidates

    Careers page, referral, job board or a recruiter (up to 100 at once). Duplicates are refused.

  5. Score the résumé

    0–100 against the JD. A pass gets Priya's link; the rest wait for a person in Resume Review.

  6. Talk to Priya

    A one-time voice interview in the browser, about 12 minutes. A scored call moves them to Screening.

  7. Interview with the team

    Google Meet or Microsoft Teams links, reminders a day and an hour before, one scorecard per interviewer.

  8. Clear the checks

    Documents, references, background check, and a test if the role needs one, before any offer.

  9. Make the offer

    Approved by the HR head and a founder, then sent with a secure link and an accept-by date.

  10. Prepare to join

    Resignation letter, then the old employer's acceptance, then a laptop and access from IT.

  11. Confirm joining

    HR confirms day one once every item on the joining checklist is done.

  12. Hand off to HR records

    An admin sends the new joiner to the company's HR records system. The salary isn't stored again.

How I built Priya

Six product decisions behind the AI interviewer, from the bet to where it stands today. The schematics are illustrative; every number on them comes from the product's code and documentation.

  1. The bottleneck was the first-round phone screen, not sourcing. The bet: everyone who clears a résumé check gets a voice interview with Priya, taken in the browser on their own time within a day of the invite. Voice, because it shows what a résumé can't: how someone communicates. And because the call is the costly step, a cheap résumé-vs-JD gate runs first.

    Product bet

    From the spec
    1. 01AppliesCareers page or a job board, with a résumé
    2. 02Résumé parsedThe application form fills itself in
    3. 03Résumé vs JD gateScore 0–100 · pass mark 60, adjustable by an admin

      Pass → interview invite by email

      Fail or can't score → a recruiter moves them ahead or rejects

    4. 04Talk to PriyaUp to 15 minutes in the browser, any time within 24 hours
    5. 05Scored screen in the pipelineTranscript, subscores, a recommendation

    The voice call is the expensive step, so the cheap check runs first. Fails nobody acts on close after 5 days; a résumé the model couldn't score always waits for a person.

  2. Priya's instructions read like an interviewer's rulebook, not a script: one short question per turn, start easy and push hard only after a strong claim, and never state a fact the candidate didn't clearly say. She mirrors Hindi or Hinglish, stops at once if a candidate wants to quit, and never promises a job. The server enforces the clock.

    Interview design

    From the spec
    1. Easy: current role
    2. Medium: experience, tools, fit
    3. Hard: only after a strong claim
    4. Recovery: ease back

    Difficulty through the call · heights illustrative

    • One question per turn

      About 30 words at most, then wait for the answer.

    • Two per sub-topic, then move on

      Probe a strong claim once; never interrogate.

    • Never state an unconfirmed fact

      Only repeat back what the candidate clearly said.

    • Didn't catch it? Ask once

      Two garbled answers in a row: close warmly, don't guess.

    The clock: 15 minutes at most, aiming for about 12

    1. 11 min Time is short: collect what's missing
    2. 13 min Close now
    3. 15 min The server ends the call
  3. OpenAI Realtime listens: it transcribes, detects turns and handles interruptions, and replies in text. Cartesia speaks that text, which keeps Priya's voice under control and swappable. Turn detection waits for the candidate: a faster setting replied into thinking pauses and stacked questions, so Priya now pauses slightly longer before she speaks.

    Voice & latency

    Schematic
    1. Candidate

      Talks in the browser; no app, no scheduled call

    2. OpenAI Realtime listens

      Transcribes, detects turns, handles interruptions; replies in text

    3. Cartesia speaks

      Turns the text into Priya's voice

    Barge-inThe candidate cuts in, the reply is cancelled, and any of Priya's audio still on its way is dropped by a sequence check.

    • Not: One model that listens and speaks

      Realtime listens, Cartesia speaks

      Control of Priya's voice and persona; the voice can change without touching the conversation.

    • Not: Reply at the first pause

      Wait until the candidate is done

      Gives up: a slightly longer pause before Priya replies. Buys: no question fired into a thinking pause.

    If the browser drops, the call waits 30 seconds for it to reconnect, then saves the answers so far as a partial screen.

  4. The model writes an evidence-only assessment of the transcript and returns four subscores. The server, not the model, weights them and derives the verdict from fixed thresholds, so the rating and the "strong yes" can never contradict each other. A candidate who answered fewer than three times gets no score at all.

    Scoring

    To scale
    1. Transcript
    2. Assessment
    3. 4 subscores, 0–100
    4. Server: rating + verdict

    Fixed weights for the rating

    JD fit
    40%
    Experience depth
    30%
    Communication
    15%
    Role & CTC fit
    15%

    The verdict comes from the rating, never from the model

    1. 0No

    2. ≥ 45Maybe

    3. ≥ 65Yes

    4. ≥ 80Strong yes

    Too short to judge
    Fewer than 3 answers from the candidate: saved as partial, with no score.
    Traceable
    Each score records the prompt version and model that produced it.
  5. Before the mic opens, the candidate is told the call is recorded and scored by AI, that a person decides, and that they can ask for a recruiter call instead. Recruiters can watch live; the candidate never sees the transcript or the score. A screen never rejects anyone, and Priya learns from past calls only through lessons a person approves.

    Guardrails

    From the spec

    Priya and the scoringRecommend

    A recruiterDecides

    Before
    • Consent screen before the mic opens: recorded, transcribed and scored by AI
    • A person makes the decision
    • The candidate can ask for a recruiter call instead, at no cost to them
    During
    • Recruiters can watch the transcript live
    • The candidate never sees the transcript or the score
    • Résumé and answers are data, never instructions
    After
    • A screen moves a candidate to review, never to rejection
    • Lessons from calls reach Priya only once a person approves them
    • Every prompt change is saved as a version that can be restored
  6. The product is live and the voice interview has been verified on a limited number of calls, not yet at volume. The plan is a staged rollout with a recruiter watching the first pilot calls, judged on hours from application to a scored first signal. Every call already logs its tokens, voice characters and length, so cost per screen can be measured.

    Status

    From the spec
    1. BuiltDoneLive at swiftcandidate.com; voice verified on a limited number of calls

    2. Internal alphaPlanRecruiters interview each other and 5 friendly candidates

    3. PilotPlanOne role for 4 weeks; a recruiter watches the first 10 calls live

    4. TunePlanPriya's prompt, and the gate's pass mark from recruiter overrides

    5. Roll outPlanDefault first round for non-leadership roles; leadership stays human

    How it will be judged

    North star:
    Median hours from application to a scored first signal · target under 24 h
    Quality:
    Offer acceptance and shortlist acceptance must not fall
    Honesty:
    Calls too short to score, tracked as a defect

How the résumé score works

The cheap check in front of the expensive call. The résumé is scored 0–100 against the JD. When the JD doesn't set a requirement (say, no salary range), that part is left out and the others count for more, so nobody is scored against something the role never asked for. The pass mark is 60 unless the company changes it.

PartWeightCounted when
Role and experience relevance30Always
Skills30Always
Experience within the JD's range20The JD sets a minimum or maximum
Notice period within the JD's limit10The JD sets a notice period
Current CTC within the JD's salary range10The JD sets a salary range

What happens after the score

  • Pass — the interview link goes out by email, and by WhatsApp when the company has switched it on. Someone the company hired before skips the automatic interview; a recruiter reviews them.
  • Fail or can't score — the candidate waits in Resume Review. "Move ahead" records who decided and why; "Reject" needs a reason.
  • Nobody acts for 5 days — every morning at 8, failed résumés nobody moved ahead are rejected automatically. The company can change the number of days.
  • Couldn't be scored — never rejected automatically. A résumé the model couldn't read always waits for a person.

A tour of the product

Ten surfaces, one system.

  1. Recruiter dashboard

    Scoped by role: you see the requisitions you actually own.

  2. Pipeline

    Drag candidates through guarded stages: applied → screening → interview → selected → offer → hired.

  3. AI screening queue

    Every voice screen with its score, JD-fit % and recommendation. Calls in progress can be watched live.

  4. Candidate profile

    Transcript, subscores, documents, interviews, messages and a full activity log in one place.

  5. Offer flow

    Payroll-accurate CTC breakup, approval by two people and a generated offer letter, with salary encrypted end to end.

  6. Analytics & reports

    15 leadership KPIs with period-on-period change and drill-down, plus 9 exportable reports that can be emailed on a schedule.

  7. Candidate portal

    Status, interviews, offer, document checklist and two-way messaging, so candidates aren't left waiting in silence.

  8. Public careers page

    Apply with a résumé; the form fills itself in from it.

  9. Employee referrals

    Reference codes, status tracking and bonus eligibility, without showing the candidate's personal details to the referrer.

  10. Admin & access control

    9 staff roles and 13 permissions. Confidential sections can only be granted to admins.

What's in the box: highlights

  • Job-description approval chain (draft → department head → founder → admin). Only the people involved are notified, and every bypass is logged. Changing the title, openings, level or budget mid-approval sends the JD back to draft and clears earlier approvals.
  • "Close job" first shows what is still going on, then rejects candidates still in progress with the reason "Position closed" (the person closing can keep them), cancels upcoming interviews, switches off unused interview links and withdraws offers not yet accepted.
  • Pipeline board that blocks stale updates: an old browser tab can't quietly overwrite someone else's stage change.
  • Interview scheduling that creates Google Meet or Microsoft Teams links, handles reschedules and sends reminders 24 hours and 1 hour before.
  • A permanent stage history: every move records who made it, when and why, and the profile shows time spent in each stage.
  • Offers with eligibility rules enforced in the database, a per-company CTC breakup engine and versioned offer-letter templates.
  • Multi-company: a platform owner can set up more companies, each fully isolated and carrying its own branding.

Offer checks, in three tiers

Not every rule should be a wall. All the checks run when an offer is created and sent for approval; later steps re-check only the hard stops, so an offer already being approved isn't held up by a smaller issue. Once it is sent for approval, pay and terms are locked, and dates change only through "Change dates", with a reason.

TierWhat triggers it
Always stops itThe candidate is rejected, already hired, or still at Applied or Screening. Another offer is already in progress for the application. Do-not-hire. The job is closed, filled or dissolved.
Stops it unless an admin gives a reasonStill at Interview, not yet selected. The job is paused. Documents, background check or test not done. An offer in progress or accepted for another job. All openings filled. An interviewer's latest verdict is Strong No Hire.
Warning onlyNo scorecard submitted yet. A missing scorecard never stops an offer.

Guardrails: product decisions, not defaults

This system holds salary data and decides who gets hired, so these rules were designed in deliberately rather than left at defaults.

DecisionHow it works
The system enforces the rules, not the screenEvery rule is checked again behind the scenes, so hiding a button is never the only protection. Where only a screen can check something, that is written down. Example: offering above the approved budget needs a written reason, but only screens can check it, because the system can't read locked pay.
Separation of dutiesNobody approves their own JD, at any step. Whoever approved a JD as department head can't also approve it as founder or skip the founder. On offers, the founder step can't be taken by whoever approved as HR head. Skipping a founder needs a note and a proof file, and the founder is told.
Salary locked and encryptedOffer pay, the candidate's current salary and the job's approved budget are locked. The system can lock them but can't read them; only people an admin gives the company's salary key can unlock them, on their own screen, with their passphrase. The candidate's current salary is used only to score the résumé, never shown as a number. Offer emails carry a secure link, never figures, and emailed reports leave salary out.
What candidates never seeThe written record of their AI interview, and whether they are marked do-not-hire: the careers page only says it can't accept the application. Employees who refer someone see a simple status, never the candidate's contact details.
Rejection email exactly onceA rejected candidate gets one rejection email: never a duplicate, and none at all if they are reopened first. Withdrawn candidates never get one.
Company isolationEach company's jobs, candidates, files and settings are walled off in the database itself. A candidate who applies to two companies is two separate records, and neither company sees the other's. A test fails the build if server code bypasses the company check.
Role-based access9 staff roles × 13 permissions. Analytics, reports and team management can only be granted to admins; nobody can give themselves extra access, and only the owner can make someone an owner.
A history nobody can editEvery stage move records who, when and why, and the JD approval history is kept the same way. Both can only be added to, never changed.
Notification scopingNotifications go only to the people working on that job. Approvers had stopped reading them because they were pinged about every candidate in the company.

Architecture

The single-page app reads and writes Postgres directly through Supabase, with row-level security as the authorization boundary. A Node server handles what a browser can't be trusted with or can't do: the voice session, provider API keys, notifications across users, scheduled jobs and file parsing. The database has gone through 138 migrations and can be rebuilt from scratch from one consolidated script.

Stack

LayerChoice
FrontendReact 18, TypeScript, Vite 6, React Router 7, Tailwind 4, shadcn/ui, Recharts
BackendNode 22, Express 4, WebSockets, Helmet, rate limiting
DataSupabase: Postgres, row-level security, Auth, Storage, Realtime
VoiceOpenAI Realtime (speech-to-text, turn-taking, interruptions) + Cartesia Sonic (text-to-speech)
AIGPT-4o-mini for résumé parsing, JD-fit scoring and post-call evaluation
CommsSendGrid (email), Gupshup (WhatsApp)
TestingVitest (frontend logic, server routes, scheduled jobs, voice, company isolation) and Playwright browser journeys
CI/CDGitHub Actions (build, tests, server syntax check); Docker

Where it stands

  • Feature-complete across screening, pipeline, interviews, offers, analytics, referrals and admin. Runs in containers behind a reverse proxy.
  • Multi-company is live, with per-company offer letters, salary structures and platform defaults for new companies.
  • Integrations that need partner credentials (job boards, WhatsApp and the HR records system) are built behind adapters and switched off until keys are supplied.
Techjockey Recruit sign-in: pick the Recruiter, Employee or Candidate portal, with a list of recruiter features on the left (opens full size in a new tab)
One sign-in, three portals: recruiter, employee, candidate
Techjockey Recruit careers page listing open roles with search and team filters (opens full size in a new tab)
Public careers page: apply with a résumé

Want to talk through this?