Skip to content

Case study · In progress

HireScope

In progress

Read my resume the way a tough interviewer would, then make me defend it.

Most resume tools check keywords and formatting. HireScope reads a resume like a senior interviewer does before a call: what did this person really own, and which big claims have nothing behind them? Then it runs a spoken mock interview on exactly those weak spots.

Steps: read, fit, interview
3
Interviewer personas
3
Hiring pipeline stages
4
Retry when the AI sends broken JSON
1
  • Next.js 16
  • React 19
  • TypeScript
  • Deepgram
  • AWS S3
  • Tailwind
  • Bun

Why I built it

When I prepared for interviews, the feedback I got on my resume was always about fonts, length and keywords. None of it matched what actually happened in the room. A good interviewer does not care that you wrote "scalable". They pick the one line that sounds impressive and ask: what exactly did you decide, and what broke?

So I wanted a tool that reads a resume the same way. It should tell apart "I built" from "I helped with", point at the claims that sound big but have no detail, and then let you practise answering those exact questions out loud before a real interviewer asks them.

Who it is for

  • Candidates who want an honest read of their resume, a fit check against a real job post, and practice on their weak spots.
  • Hiring teams who post a job, share a link, and see applicants ranked by the evidence in their resume instead of by keywords.

How it works

  1. Step 1

    Upload a resume

    PDF or DOCX, straight to S3

  2. Step 2

    Read it like an interviewer

    Skills, real evidence, risky claims

  3. Step 3

    Check a job

    Score each requirement, then a verdict

  4. Step 4

    Practise out loud

    Voice interview on the gaps found

  5. Step 5

    Get a debrief

    Scores with quotes from your answers

One loop: understand the resume, understand the job, find the gap, then practise that gap in a spoken interview.
  1. Web app

    • Candidate hub
    • Resume report
    • Job fit
    • Interview room
    • Hiring pipeline
  2. API routes

    • /api/analyze
    • /api/interview/turn
    • /api/interview-report
    • /api/stt + /api/tts
    • /api/jobs
  3. Services

    • OpenAI-compatible LLM
    • Deepgram voice
    • AWS S3
A Next.js app with a few small API routes. The AI model sits behind one OpenAI-compatible endpoint, and voice goes through Deepgram.

1. Reading the resume

The browser uploads the file directly to S3 using a link that works for 5 minutes, so the file never passes through my server. Files over 10 MB are refused. The server then pulls the text out of the PDF or DOCX and sends it to the model with a long, strict brief.

That brief is really the product. A few of its rules:

  • Every point must come from something actually written in the resume. No invented numbers or companies.
  • "I designed" counts for more than "I worked on".
  • A score of 90 or more needs direct, senior-level evidence. A score under 40 means the resume does not say much, not that the person is bad.
  • Every risky claim comes with the exact follow-up question a sharp interviewer would ask.
  • No filler words like "robust" or "seamless", and no generic praise.

The report shows a short summary, skill depth, the strongest evidence with a quote from the resume, the risky claims, and what to prepare.

2. Checking fit for a job

Paste any job description and the resume is scored against it, one requirement at a time. If a company posted the job with its own list of must-haves, the model has to return exactly those requirements, in the same order. If you paste a random job post, the model pulls out 4 to 7 key requirements itself.

The verdict is one of three: Strong Fit, Possible Fit or Not a Fit. A weak must-have pulls the score down hard. A weak nice-to-have does not. The resume read and the fit check run at the same time, and if only the fit check fails, you still get the resume report.

3. The spoken mock interview

You press record, answer out loud, and press stop. The audio goes to Deepgram for the text, the model writes the interviewer's next line, and Deepgram reads it back to you. If the microphone is blocked, you can type your answers instead.

There are three interviewers to pick from: a founder checking ownership and comfort with chaos, a senior engineer pushing on design and failure cases, and a hiring manager asking about past decisions. Or the interview can focus on one gap found in your resume. The interviewer asks one short question at a time, pushes back when an answer is vague, and wraps up after about six to eight exchanges.

At the end, the full transcript is scored. The debrief has to quote what you really said, and it judges substance over talking a lot. If you barely answered, it says so instead of making up depth.

4. The hiring side

A company posts a job with must-have and nice-to-have requirements and gets a share link. When someone applies through that link, their fit report is added to the job automatically. Applicants move through four stages: New, Reviewing, Shortlisted and Archived. I kept it to four on purpose. A v1 does not need an eight-column hiring board.

Key decisions

The prompt is written like a hiring rubric

Why
The difference between this and a generic resume checker is how it judges, not the UI. Writing clear rules for scores and evidence gives answers you can check against the resume.
Trade-off
The prompts are long, and the quality depends on the model following them. Tests cover how the prompts are built, not how good the answers are.

Check the AI's answer, and retry once

Why
Models sometimes return broken JSON or a wrong value, like a verdict that is not one of the three allowed. The code checks the shape, and if it is wrong, sends the mistake back to the model once and asks for a fixed answer.
Trade-off
A bad first answer costs a second model call and more waiting.

Any OpenAI-compatible model, set in one place

Why
The model's URL, key and name all come from environment variables, so switching providers is a config change, not a code change.
Trade-off
I can only use features every provider shares, so no provider-specific extras.

Record, then send, instead of live streaming

Why
Recording a full answer and sending it once is much simpler to build and debug than a live audio stream, and it works on any browser with a microphone.
Trade-off
It feels less like a real conversation. You have to press stop, and there is a short wait before the interviewer replies.

Keep the candidate's history in the browser for now

Why
There are no accounts yet. Saving the journey in the browser still makes "see my progress" work, and it is shaped so it can move to a real database later.
Trade-off
Clear your browser or switch devices and your history is gone.

What can go wrong

SituationWhat happens
Unreadable fileA clear error asking for a valid PDF, DOCX or TXT
Resume text too shortRejected under 50 characters instead of scoring nothing
AI returns broken JSONRetried once with the mistake shown to the model
Fit check failsThe resume report still comes back, with a note
Microphone blockedYou can type your answers instead
No speech picked upAsks you to try again instead of sending an empty answer
Interview ended before any answerNo report, since there is nothing to score

Status

BuiltNext
Resume read with evidence and risky claimsAccounts and sign-in
Job fit scoring with verdictsA real database for jobs and applicants
Voice mock interview and debriefDraft job requirements from a pasted job post
Hiring pipeline with four stagesLive streaming voice
Progress timeline in the browserTests on the quality of AI answers