The AI-powered hiring platform that replaces the entire interview pipeline — from resume screening to final selection — with a single, autonomous system.
👆 See the full platform in action — live AI interviews, autonomous agent, proctoring & more
Interview Quasar is a full-stack platform with two parallel product surfaces:
- For Candidates — Practice with a real-time AI interviewer powered by Gemini 3.1 Flash Live API (voice-to-voice), get STAR-scored evaluations, built-in code editor, emotion analysis, and an AI career coach.
- For Recruiters — Post jobs, auto-screen resumes with AI, run proctored MCQ + AI interview rounds, and deploy an autonomous hiring agent that advances, rejects, or escalates candidates based on configurable thresholds — with zero manual intervention.
Most "AI interview" tools are glorified chatbots. Quasar is a complete agentic system where:
| Traditional Process | Interview Quasar |
|---|---|
| Recruiter manually reviews 200 resumes | AI screens every resume against JD in real-time — ranked by match % |
| Schedule interviews with human interviewers | AI conducts live voice interviews 24/7, with live coding rounds |
| Recruiter manually advances each candidate | Autonomous agent advances, rejects, or escalates — recruiter sets goals once |
| No proctoring, easy to cheat | Full proctoring: fullscreen lock, tab-switch detection, devtools blocking, multi-face detection via MediaPipe |
| Static report cards | Live emotion analysis (confidence, stress, nervousness, eye contact), filler word detection, STAR scoring, skill vector tracking |
| One evaluation dimension | 6-axis STAR scoring + 6 category scores + speech metrics + emotion data = comprehensive evaluation |
|
Tech Stack |
Real-time face analysis powered by MediaPipe FaceLandmarker with 52 ARKit blendshapes:
| Metric | How It Works |
|---|---|
| Confidence Score | Weighted composite: smile (30%) + attention (35%) + inverse stress (20%) + eye contact (15%) |
| Attention Score | Head pose deviation — penalizes yaw/pitch away from camera |
| Stress Detection | Brow tension + nose sneer + mouth frown + cheek puff blendshapes |
| Nervousness | Rolling variance of jaw + brow activity over 4-second window |
| Eye Contact | Gaze deviation + head-pose facing detection |
| Blink Rate | Blink event counting with 60-second sliding window |
| Head Pose Compass | Live pitch/yaw/roll visualization from facial transformation matrix |
| Multi-Face Detection | Confirms ≥2 faces for 5 consecutive frames → proctoring violation |
GPU-accelerated (WebGL2 delegate, CPU fallback), runs at 5 fps analysis rate with ~5ms/frame.
Full-stack proctoring with 9 violation types — active during MCQ tests and AI interviews:
fullscreen_exit → critical | right_click → warning
tab_switch → critical | copy_paste → warning
devtools_open → critical | keyboard_shortcut → warning
multiple_faces → critical | multi_monitor → warning
print_screen → warning |
- Auto-termination: Session ends after 5 critical violations or trust score ≤ 0
- Trust Score: Starts at 100, decays per violation (critical: -5, warning: -2)
- Batched API: Violations are queued client-side and flushed in batches (250ms debounce)
- Keyboard blocking: Blocks Ctrl+C/V/X, F12, Ctrl+Shift+I/J/C, PrintScreen, Alt+Tab, Ctrl+P/S/U
The flagship feature — an event-driven agentic orchestration layer that automates the entire hiring funnel:
Recruiter sets goal: "5 finalists by Friday, 70% screening threshold"
↓
Agent takes over and runs autonomously:
↓ Candidate applies → AI screens resume → Agent checks score
├── Score ≥ 70% → AUTO-ADVANCE to MCQ
├── Score 66.5-70% → ESCALATE (borderline — recruiter decides)
└── Score < 66.5% → AUTO-REJECT
↓ MCQ completed → Agent checks percentage → advance/reject/escalate
↓ Tech interview → Agent checks STAR score + AI confidence → advance/escalate
↓ HR interview → Agent checks score → select as finalist or escalate
↓
Agent only contacts recruiter for:
• Borderline scores (within configurable margin)
• Proctoring violations
• Low AI confidence (STAR variance > 2.0)
• Finalist target reached
• Deadline approaching
Architecture:
| Component | Purpose |
|---|---|
agentDecisionEngine.js (659 lines) |
Pure logic — threshold evaluation, borderline detection, STAR variance analysis |
agentService.js (409 lines) |
Orchestrator — executes decisions, transitions statuses, sends emails |
agentScheduler.js (366 lines) |
3 cron jobs: pipeline poll (60s), daily digest (9 PM IST), deadline check (9 AM IST) |
AgentConfig model |
Stores goals, thresholds, escalation rules per job |
AgentEvent model |
Full audit log — every autonomous decision with scores and reasoning |
AgentDigest model |
Daily summary reports for recruiter email digest |
Key Design Decisions:
- Fire-and-forget hooks — Agent hooks in controllers never block the HTTP response
- Safety-first — If the agent crashes, manual pipeline works exactly as before
- Dual processing — Instant hooks + 60-second safety poller ensures nothing is missed
- Threshold cascading — Agent config → Job config → System defaults
- Human-in-the-loop — Agent escalates instead of deciding on uncertain cases
Context-aware career advisor with real-time job search capability:
- Intent detection: AI classifies if the user is asking about jobs
- Database search: Queries active job postings with text + regex matching
- Profile-aware: Injects user's interview scores, skill vectors, GitHub projects, LeetCode stats
- SSE streaming: Progressive response rendering
Syncs and enriches candidate profiles from external platforms:
| Platform | Data Synced |
|---|---|
| GitHub | Profile, all non-forked repos (with per-repo language byte breakdown), top languages by LOC, project descriptions, stars, topics |
| LeetCode | Total solved (Easy/Medium/Hard), global ranking, contest rating, languages used, advanced/intermediate/fundamental skill tags |
All data is transformed into a platformContext text block injected directly into AI prompts — the interviewer knows your actual projects and asks questions about them.
25 badges, 10 levels, XP system, streaks:
Session complete: +20 XP | Pass (≥6.5): +30 XP
Excellent (≥8.0): +20 XP | 7-day streak: +30 XP bonus
Duration bonus: +5 per 10 min
Badges: First Step, Consistent, Dedicated, Centurion, High Achiever,
Perfect Ten, Comeback Kid, On Fire, Week Warrior, Fortnight,
Unstoppable, Domain Explorer, Polymath, Face the Panel,
Clean Speaker, Speed Demon, Measured, Rising Star,
Interview Master, XP Farmer, Night Owl, Early Bird,
Resume Analyst, JD Whisperer
Upload a resume and compare it against any job description:
- Match score (0-100) with weighted criteria (skills 40%, experience 30%, education 15%, suitability 15%)
- Matched vs missing skills breakdown
- Recommendation: Shortlist / Review / Reject
┌───────────────────────────────────────────────────────────────────┐
│ FRONTEND (Vite 8 + React 19 + TypeScript) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Landing Page │ │ Candidate │ │ Recruiter Shell │ │
│ │ (Framer + │ │ • Interview │ │ • Dashboard + Stats │ │
│ │ Lenis + │ │ • Coach Chat│ │ • Job CRUD + Pipeline │ │
│ │ OGL) │ │ • Progress │ │ • Agent Config Panel │ │
│ │ │ │ • MCQ Tests │ │ • Escalation Panel │ │
│ │ │ │ • Profile │ │ • Applicant Detail View │ │
│ │ │ │ • Gamify │ │ • Activity Feed │ │
│ └──────────────┘ └──────────────┘ └──────────────────────────┘ │
│ │ WebSocket │ REST API │
└─────────────────────────┼────────────────────┼────────────────────┘
│ │
┌─────────────────────────┼────────────────────┼────────────────────┐
│ BACKEND (Express 5 + Node.js) │
│ ┌──────────────┐ ┌────┴──────┐ ┌──────────┴──────────────────┐ │
│ │ WebSocket │ │ REST API │ │ Agent Scheduler (node-cron) │ │
│ │ Handler │ │ 21 ctrl │ │ • Poll (60s) │ │
│ │ ↕ Gemini │ │ 4 routes │ │ • Digest (21:00 IST) │ │
│ │ Live API │ │ 9 models │ │ • Deadline (09:00 IST) │ │
│ └──────────────┘ └──────────┘ └──────────────────────────────┘ │
│ │ │
│ ┌──────────────────────┴────────────────────────────────────────┐ │
│ │ Services Layer │ │
│ │ • geminiService (Live API) • resumeScreeningService │ │
│ │ • agentDecisionEngine • agentService │ │
│ │ • gamificationService • emailService (6 templates) │ │
│ │ • platformSyncService • mcqGeneratorService │ │
│ │ • groqService • storageService (MinIO) │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │ │
└─────────────────────────┼─────────────────────────────────────────┘
│
┌───────────┴───────────┐
│ MongoDB + MinIO │
│ (12 collections) │
└───────────────────────┘
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript, Vite 8, Framer Motion, Tailwind CSS 4, shadcn/ui, Lenis (smooth scroll), OGL (WebGL), Monaco Editor |
| Backend | Node.js, Express 5, Mongoose 8, WebSocket (ws), node-cron |
| AI / ML | Gemini 3.1 Flash Live API (@google/genai), Groq API (gpt-oss-120b), MediaPipe FaceLandmarker |
| Database | MongoDB Atlas |
| Storage | MinIO (S3-compatible) for resume PDFs |
| Auth | JWT (access + refresh tokens), Google OAuth 2.0, GitHub OAuth 2.0, bcrypt |
| Nodemailer with branded HTML templates (6 agent templates + system emails) | |
| PDFKit (interview report generation), pdfjs-dist (resume parsing) | |
| Deployment | Nginx reverse proxy, systemd services, SSL/TLS |
quasar-backend/src/
├── controllers/ # 21 controllers (auth, jobs, pipeline, agent, eval, coach, proctoring...)
├── services/ # 8 services (gemini, agent engine, gamification, email, platform sync...)
├── models/ # 13 Mongoose models (User, Session, Application, AgentConfig, AgentEvent...)
├── routes/ # 4 route files (api, auth, candidate, recruiter)
├── websocket/ # WebSocket handler + Gemini Live API bridge
├── middleware/ # Auth, rate limiting, validation
├── config/ # Environment configuration
└── utils/ # Logger (Winston + Morgan with color coding)
quasar-frontend/src/
├── components/ # 34 shared components + 7 candidate + 6 recruiter
├── hooks/ # 5 custom hooks (useInterviewSession, useProctoring, useAudioProcessor...)
├── landing/ # 8 landing page sections (Hero, Features, HowItWorks, CTA...)
├── lib/ # API client, auth state machine, utilities
├── workers/ # Web Workers for audio processing
└── types/ # TypeScript interfaces
- Node.js ≥ 18
- MongoDB (local or Atlas)
- MinIO (or any S3-compatible store)
- Gemini API key (for live interviews)
- Groq API key (for evaluations and coaching)
git clone https://github.com/your-username/Project_Quasar.git
cd Project_Quasar
# Backend
cd quasar-backend
npm install
# Frontend
cd ../quasar-frontend
npm installCreate quasar-backend/.env:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/quasar
JWT_SECRET=your-secret-key
JWT_REFRESH_SECRET=your-refresh-secret
# AI
GEMINI_API_KEY=your-gemini-key
GROQ_API_KEY=your-groq-key
# Storage (MinIO)
MINIO_ENDPOINT=localhost
MINIO_PORT=9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET=quasar-resumes
# Email (for agent notifications)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
SMTP_FROM=Interview Quasar <noreply@quasar.ai>
# OAuth (optional)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
FRONTEND_URL=http://localhost:5173# Terminal 1 — Backend
cd quasar-backend
npm run dev
# Terminal 2 — Frontend
cd quasar-frontend
npm run devOpen http://localhost:5173.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register with email/password |
| POST | /api/auth/login |
Login (returns JWT) |
| POST | /api/auth/refresh |
Refresh access token |
| GET | /api/auth/google |
Google OAuth |
| GET | /api/auth/github |
GitHub OAuth |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/sessions/start |
Start interview session |
| POST | /api/sessions/:id/evaluate |
Evaluate transcript (STAR + category scoring) |
| GET | /api/sessions/:id/report |
Download PDF report |
| POST | /api/coach/chat |
AI career coach (SSE stream) |
| GET | /api/candidate/jobs |
Browse published jobs |
| POST | /api/candidate/jobs/:id/apply |
Apply with resume |
| Method | Endpoint | Description |
|---|---|---|
| CRUD | /api/recruiter/jobs |
Job posting management |
| GET | /api/recruiter/jobs/:id/applicants |
View applicant pipeline |
| POST | /api/recruiter/jobs/:id/mcqs/generate |
AI-generate MCQ questions from JD |
| Method | Endpoint | Description |
|---|---|---|
| PUT | /api/recruiter/agent/:jobId/config |
Configure agent goals & thresholds |
| POST | /api/recruiter/agent/:jobId/start |
Activate agent |
| POST | /api/recruiter/agent/:jobId/pause |
Pause agent |
| GET | /api/recruiter/agent/:jobId/events |
Activity feed (paginated) |
| GET | /api/recruiter/agent/:jobId/events/escalations |
Pending escalations |
| POST | /api/recruiter/agent/:jobId/events/:eventId/resolve |
Resolve escalation (advance/reject) |
| Name | Role |
|---|---|
| Surendra Singh Chouhan | Backend Developer |
| Yadveer Singh Pawar | Full-Stack Developer |
| Ratan Tiwari | Full-Stack Developer |
| Uday Khare | Backend Developer & DeveOps Engineer |
Built with 🧡 for innovation — powered by Gemini, driven by purpose.