Case study · In progress
HireScope
In progressRead 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
Step 1
Upload a resume
PDF or DOCX, straight to S3
Step 2
Read it like an interviewer
Skills, real evidence, risky claims
Step 3
Check a job
Score each requirement, then a verdict
Step 4
Practise out loud
Voice interview on the gaps found
Step 5
Get a debrief
Scores with quotes from your answers
Web app
- Candidate hub
- Resume report
- Job fit
- Interview room
- Hiring pipeline
API routes
- /api/analyze
- /api/interview/turn
- /api/interview-report
- /api/stt + /api/tts
- /api/jobs
Services
- OpenAI-compatible LLM
- Deepgram voice
- AWS S3
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
| Situation | What happens |
|---|---|
| Unreadable file | A clear error asking for a valid PDF, DOCX or TXT |
| Resume text too short | Rejected under 50 characters instead of scoring nothing |
| AI returns broken JSON | Retried once with the mistake shown to the model |
| Fit check fails | The resume report still comes back, with a note |
| Microphone blocked | You can type your answers instead |
| No speech picked up | Asks you to try again instead of sending an empty answer |
| Interview ended before any answer | No report, since there is nothing to score |
Status
| Built | Next |
|---|---|
| Resume read with evidence and risky claims | Accounts and sign-in |
| Job fit scoring with verdicts | A real database for jobs and applicants |
| Voice mock interview and debrief | Draft job requirements from a pasted job post |
| Hiring pipeline with four stages | Live streaming voice |
| Progress timeline in the browser | Tests on the quality of AI answers |