Skip to content

Repository files navigation

IO

InterviewOS

AI-powered mock interview practice — pick a role, answer a real question, get structured feedback in seconds.

Live Demo Next.js TypeScript Tailwind CSS Supabase Clerk Groq Vercel License


What is InterviewOS?

InterviewOS is a self-paced mock interview tool for engineers, product managers, and data scientists who want structured feedback rather than a generic "good answer" from a practice partner. You pick a track, receive a real question drawn from your unanswered pool, type or speak your answer, and get a 1–10 score across three dimensions — correctness, clarity, and edge-case depth — with written justification per dimension. A dashboard tracks score trends over every session so you can see yourself improve across attempts.

Live demo → interviewos.tanisheesh.in


What you get

  • Voice input — speak your answer via the browser's Web Speech API; the live transcript is editable before you submit
  • AI evaluation — Groq runs llama-3.3-70b-versatile to score answers 1–10 on correctness, clarity, and edge-case handling, with written notes per dimension
  • Progress dashboard — Recharts line chart of score trends, per-role filtering, and full attempt history with summaries
  • Smart question cycling — already-answered questions are skipped automatically; cycles back when the pool is exhausted
  • Live results — evaluation scores appear in real time via Supabase Realtime without a page reload

Stack

Layer Tech
Framework Next.js 16 · App Router · Turbopack · TypeScript 7
Auth Clerk (custom UI — no Clerk pre-built components)
Database Supabase Postgres
Realtime Supabase Realtime (postgres_changes on evaluations)
AI Groq — llama-3.3-70b-versatile
Voice Web Speech API (browser-native)
Charts Recharts
Styling Tailwind CSS v4
Validation Zod (API inputs + LLM response schema)
Hosting Vercel

Engineering Decisions

Why Groq over the Anthropic API or OpenAI? Groq's inference latency on Llama 3.3-70b is consistently under 5 seconds for a 1 KB answer, which makes the evaluation feel live rather than batched. The free tier is sufficient for a portfolio demo without burning API credits on every visitor.

Why Supabase Realtime instead of polling? Polling would add unnecessary load and feel laggy. Supabase's postgres_changes channel fires immediately on INSERT to evaluations, so the score panel appears while the HTTP response is still in-flight — both paths race and the first one wins, preventing a double-render via a scoredRef guard.

Why Clerk over Supabase Auth? Clerk gives better session UX with zero effort and a cleaner token model. The tradeoff is that Supabase's RLS can't use auth.uid() directly — Clerk JWTs are passed into Supabase Realtime via setAuth(), and a supabase JWT template ensures auth.jwt() ->> 'sub' returns the Clerk user ID in policies.

What would you do differently in v2? Add server-sent evaluations (streaming) so the score card builds incrementally. Also replace the ad-hoc question pool with a curriculum system that surfaces weak-dimension questions first — the data is already in the dashboard but not yet used to drive question selection.


Docs

Document Description
PRD Product requirements — goals, user stories, non-goals
Architecture System design, data flow, component breakdown
Decisions Every major technical decision and why
Setup Local dev setup, env vars, deployment

Author

Tanish Poddartanisheesh.in · LinkedIn · GitHub

About

AI mock interview tool that scores answers 1–10 on correctness, clarity, and edge-case depth — results delivered live via Supabase Realtime.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages