Inspiration

The night before my first engineering interview I knew my story by heart, but I had never said it out loud to three people whose job was to push back. When the first question came, the answer came out vague. Nobody told me why it did not land.

Most students are in the same place. Hiring now takes about 20 interviews per hire, up from 14 in 2021. A coach who will actually push back costs around $207 an hour, and the free practice tools are shutting down. I wanted the practice room I did not have.

What it does

HardTalk puts you in the room before the real thing. You pick what you are preparing for: a job interview, the Q&A after a pitch, a debate, or a hard talk at work. The brief shows who is in the room and what each person will ask about. Then you talk out loud to a panel of AI interviewers, each with their own face, voice and line of questioning, with live captions for everyone.

When the conversation ends you get a scorecard on four skills, each built on a named framework such as STAR, SBI, SPIN Selling or Toulmin. Every score above 1 has to quote something you actually said, and you get one better line to try. You retry and see the change side by side, including which interviewers you won over.

In my demo, my vague first answer scored 9 out of 16 and nobody in the room was convinced. On the retry I owned the failure and gave the numbers, scored 16 out of 16, and won over all three.

With Pro you can bring the real one: paste the job posting you are applying to, your pitch, or the motion, and HardTalk builds the panel for that exact moment.

How I built it

The app is Expo with React Native and TypeScript in strict mode. The voices come from an ElevenLabs agent over WebRTC, with one voice per interviewer. A small Hono server holds every provider key, mints short lived voice tokens, grades transcripts, checks safety and drafts panels, so no key ever reaches the app.

The grader is always a different model family from the interviewers, so it never marks its own roleplay. It runs on Claude, or for free on a local open model through any OpenAI compatible API. Code, not the model, checks every quote against the transcript, and a score whose quote was never said drops to 1.

Rubrics, scenarios and prompts live in YAML so anyone can read them without reading code. The repo has 1,391 passing tests, and a mock mode runs the whole loop with no keys and no network in about a minute.

How it uses RevenueCat

There is one entitlement, pro. The paywall opens at only two real boundaries: starting a fourth graded session, and building your own panel. Its copy is filled in for that moment through custom variables, so at the session limit it names the conversation you are practising and your score on it so far. A customer info listener unlocks Pro the moment the purchase lands, with no restart, and Restore Purchases is on the home screen and the paywall. Plans are Weekly at $2.99 for the week before one real conversation, Monthly at $4.99 and Annual at $29.99, all below the education category median in RevenueCat's own report.

Challenges I ran into

Making scores people can trust. A language model will happily invent a quote, so I built an evidence gate in code that rejects anything that was never said.

Keeping people safe. A practice tool must never ignore real distress, so a stop word ends any session at once, and distress checks run on every line on the device and again on the server, never scored.

Keeping it affordable for students, which is why the grader can run on a free local model and there is a weekly plan.

Accomplishments I'm proud of

A real session on a real phone, from a vague first try to a perfect retry, with a working RevenueCat purchase in the middle. Scores that always show their evidence. A full path that works with a screen reader and no audio.

What I learned

Grounding matters more than clever prompts. The most useful thing a grader can do is show you the exact words that cost you points, and the hardest part of building it was making sure those words are real.

What's next

Getting it into the hands of students before placement season, adding more scenarios for each track, measuring the grader on gold sets for every track, and shipping on iOS.

Built With

Share this project:

Updates

Submission history