
Desktop
Tough Round AI
A desktop and web platform that runs realistic AI mock interviews with live speech and multi-model feedback.
toughround.com
4
AI providers orchestrated
2
Surfaces, one codebase
Live
Speech in and out
The challenge
A mock interview only helps if it feels real, which means low-latency speech in both directions, an interviewer that adapts to the answer it just heard, and feedback specific enough to act on. No single AI provider is best at all of that, and candidates wanted a desktop app that behaved like a native tool rather than a browser tab.
Our solution
We built one React + Vite front end shipped as both a web app and a packaged desktop app, over a Nest.js API that orchestrates several providers behind a single internal contract — Gemini, OpenAI, and Anthropic for reasoning and feedback, Deepgram for speech, and Google Cloud for supporting services. Sessions, transcripts, and scoring live in Neon Postgres through TypeORM; Redux holds live session state so a dropped connection does not lose an interview in progress.
The results
Candidates run spoken mock interviews that adapt as they answer and get structured feedback afterwards, on desktop or in a browser from the same codebase. Because model access sits behind one internal boundary, providers can be swapped or added without touching the interview flow.
Client
Project type
Discipline
What we did
Related services
toughround.com
Technology
What it's built on
The stack behind this build, grouped by the concern it owns.
Frontend
Backend
Data & storage
AI & speech
Integrations
Delivery
How it ships
Hosting, source control, and the release path from a merged branch to production.
Frontend hosting
Vercel
Backend hosting
Railway
Desktop distribution
GitHub Releases
Source control
GitHub
Frontend hosting
Vercel
Backend hosting
Railway
Desktop distribution
GitHub Releases
Source control
GitHub
Engineering & operations
The parts you only see from the inside
Environments, flags, tooling, and the safeguards that keep a live platform shippable.
Multi-provider AI layer behind one internal contract — providers are swappable
Desktop builds distributed and auto-updated through GitHub Releases
Live session state held client-side so a dropped connection does not lose an interview
Gallery