Inspiration
We came up with the idea for this project because we are both preparing for interviews in different fields, but we both still have to prepare for behavioral, and different technical interviews. We figured that if we could input what the role we are going for is, and then have an entire mock interview for it made up on the fly customized to our own situation, that it could be really helpful for nearly everyone who has a job that has intensive interview processes.
What it does
Technically lets you put in your information relative to your resume, the job you are looking for, the company you are looking for, and the role you are looking for into a custom-made behavioral and technical interview. After you do the interview, you can then get feedback on how you responded as well.
How we built it
We built Technically as a Next.js web app with a glassmorphism UI powered by Tailwind CSS and Framer Motion. The core loop works like this: the user speaks into their mic, the browser's Web Speech API transcribes it in real time, the transcript is sent to Groq (running Llama 3.3 70B) which generates the interviewer's response, and ElevenLabs converts that response into natural-sounding speech that plays back through the browser. The whole conversation feels like talking to a real person.
On the backend, we have four API routes: /api/chat for the AI conversation, /api/tts for text-to-speech, /api/transcribe as a fallback, and /api/grade for post-interview evaluation. The grading system is multi-stage — it parses the transcript into Q&A pairs, grades each one individually against role-specific rubrics (we built separate rubrics for SWE and PM roles with detailed scoring anchors), aggregates the scores with weighted averages, and runs a consistency check to catch inflated or contradictory scores.
For the technical phase, we built six different environments that render based on the role: a code editor for software engineering, a spreadsheet for data analysts, a financial modeling sheet for finance, a whiteboard with a PM checklist for product managers, a simulated terminal for DevOps, and a case notepad for consulting. The UI uses a custom glass component system (GlassCard, GlassButton, GlassAutocomplete) on top of an animated nebula background.
Challenges we ran into
The biggest challenge was real-time voice latency. Getting the loop of speech-to-text, LLM response, and text-to-speech to feel conversational (under 2-3 seconds round-trip) required careful engineering. We originally planned to use the Gemini API for everything, but hit free-tier rate limits quickly, so we pivoted to Groq for LLM inference since its speed on Llama 3.3 70B is significantly faster.
The Web Speech API was also unreliable — it silently disconnects after periods of silence, which kills the mic mid-interview. We had to build an auto-restart mechanism that detects unexpected onend events and spins up a new recognition instance, with a counter to bail out after too many retries.
Getting the grading system to be fair and consistent was harder than expected. Early versions would inflate scores when there wasn't enough evidence, or penalize candidates for topics that simply weren't covered in the interview. We solved this by introducing evidence strength tracking, assessment confidence levels, and a separate consistency-check pass that flags score/explanation mismatches.
Accomplishments that we're proud of
We're proud that the interview genuinely feels real. The voice conversation is natural, the transitions from behavioral to technical are smooth, and the feedback is specific and actionable — not generic platitudes. The multi-stage grading pipeline with rubric anchors, per-question evaluation, weighted aggregation, and consistency checking produces scores that actually make sense.
We're also proud of the breadth — six different technical environments, two full rubric systems (SWE and PM with 10+ categories each), drill-down practice mode after the interview, score comparison across attempts, and a polished dark glassmorphism UI with animated backgrounds. All of this built during a hackathon.
What we learned
We learned that voice UX is fundamentally different from text UX. When you're generating audio, you can't use markdown, bullet points, or long paragraphs — the AI has to speak in short, natural sentences. Prompt engineering for spoken conversation is its own discipline.
We also learned how much thought goes into fair grading. It's easy to build a system that spits out a number, but building one that distinguishes "the candidate gave a weak answer" from "the question didn't cover this topic" requires careful rubric design, evidence tracking, and multiple validation passes.
Finally, we gained a deep appreciation for how many edge cases exist in browser audio APIs. Between mic permission flows, silent disconnections, codec differences across browsers, and audio playback timing, real-time voice apps are harder than they look.
What's next for Technically
- Resume upload — personalize questions based on the candidate's actual experience, and add a Resume Consistency scoring category.
- More fields — expand beyond SWE, PM, data, finance, consulting, and DevOps to cover design, marketing, and more.
- Sandboxed code execution — run candidate code in Docker containers so the code editor can actually execute and test solutions.
- Practice mode improvements — let users drill specific categories (e.g. "just practice STAR answers" or "just do system design") without doing a full interview.
- Multi-round interviews — simulate full interview loops with different interviewers and styles (phone screen, onsite, hiring manager).
Log in or sign up for Devpost to join the conversation.