TalentSim is an AI-assisted interview practice platform built to simulate recruiter-style technical interviews, score spoken responses, and help candidates improve through measurable evidence and coaching feedback.
- Frontend: React + TypeScript + Vite
- Backend: NestJS + Prisma + PostgreSQL
- Auth: JWT with short-lived access tokens and refresh cookies
- AI evaluation: backend-only OpenAI calls with deterministic local fallback
- Resume support: sanitized upload validation and storage
- Interview evidence: transcripts, WPM, filler counts, face-tracking samples, evaluation metadata
flowchart LR
User[Browser / Candidate] --> FE[React Frontend]
FE --> API[NestJS API]
API --> Auth[JWT Auth]
API --> DB[PostgreSQL + Prisma]
API --> AI[OpenAI Provider]
API --> Storage[Supabase Storage or local fallback]
FE --> BrowserCamera[Camera + Mic]
BrowserCamera --> FE
flowchart TD
Upload[Resume upload] --> Validate[Validation + MIME + size check]
Validate --> Store[Storage + DB record]
Session[Interview session] --> Answers[Answer + transcript + metrics]
Answers --> Evaluate[AI evaluation or local fallback]
Evaluate --> Report[Persisted report snapshot]
Report --> Dashboard[Progress / streak / achievements]
Prerequisites:
- Node.js 22+
- npm
- PostgreSQL
- optional Supabase project for resume storage
Copy-Item .env.example .env
Copy-Item backend/.env.example backend/.env
npm install
cd backend
npm install
npx prisma migrate deploy
npx prisma generate
npm run prisma:seedThe seed creates a demo candidate account and a completed interview snapshot so the dashboard/report flows can be explored without real personal data.
Start backend and frontend:
cd backend
npm run start:devnpm run devThe frontend defaults to http://localhost:5173; the backend API defaults to http://localhost:4000/api.
- Frontend:
.env.exampleand.env.production.example - Backend:
backend/.env.example - Required fields include JWT secret, DB URLs, API keys, and allowed frontend origins
Frontend:
npm run lint
npm run test
npm run buildBackend:
cd backend
npm run build
npm test -- --runInBand
npm run lint- No provider API key or service-role secret is shipped to the frontend.
- Access tokens are short-lived; refresh tokens are HTTP-only cookies.
- Resume uploads reject unexpected file types and oversized payloads.
- Audit logs are redacted and exclude tokens, passwords, raw transcripts, and resume payload bodies.
- Ownership checks protect interviews and resume records.
See PROJECT_IMPROVEMENT_PLAN.md for the completed work and the full outstanding execution plan.