You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The AI Interview Simulator is a real-time voice-based interview practice platform that uses Google's Gemini Live API for bidirectional audio streaming. Users can practice job interviews with an AI interviewer that responds naturally in real-time.
Key Characteristics
Real-time audio streaming - No record-then-send, pure live conversation
Server-side orchestration - Spring Boot manages sessions and security
Multi-language support - English and Bulgarian with localized prompts
CV-aware interviews - AI uses uploaded resumes for personalized questions
Automatic grading - Post-interview AI analysis and scoring
1. User speaks → Browser captures 16kHz PCM via Web Audio API
2. Browser → Server → STOMP message to /app/interview/audio (Base64)
3. Server → Gemini → OkHttp WebSocket sends Base64 PCM
4. Gemini → Server → Returns 24kHz audio + transcriptions
5. Server → Browser → STOMP to /user/queue/audio
6. Browser plays → Web Audio API at 24kHz (gapless crossfade scheduling)
CV Processing Flow
1. User uploads → PDF/DOCX file (max 10MB)
2. Browser → Server → POST /api/cv/upload with multipart form
3. Server extracts → Text via PDFBox (PDF) or Apache POI (DOCX)
4. Text included → In system instruction for personalized interview
Interview Session Flow
1. /setup/step1 → User enters name
2. /setup/step2 → User selects position, difficulty, uploads CV
3. /setup/step3 → User selects language and voice
4. /interview → WebSocket connects, interview begins
5. AI greets user → Interview conversation flows
6. AI concludes → Automatic grading triggered
7. /report/{id} → User views detailed feedback
On rate limit or access error → automatically tries next model/key combo
Rate limit tracking is error-based (no hardcoded limits)
Key Features Deep Dive
Voice Selection
Voice ID
English Name
Bulgarian Name
Gender
Algieba
George
Георги
Male
Kore
Victoria
Виктория
Female
Fenrir
Max
Макс
Male
Despina
Diana
Диана
Female
Voice previews available as WAV files for both languages.
Difficulty Levels
Level
Behavior
CV Usage
Chill
Friendly, encouraging, hints provided
Primary focus - conversational about projects
Standard
Professional, balanced questioning
Mixed with technical questions
Stress
Challenging, time pressure, follow-ups
Background context only - deep technical focus
Position-Specific Prompts
The AI tailors questions based on target position:
Java/Backend → OOP, Spring Boot, databases, API design
Frontend → HTML/CSS/JS, React/Vue/Angular, UX
QA Engineer → Testing methodologies, automation
DevOps → CI/CD, cloud, containerization
PM/Product → Leadership, planning, stakeholders
Session Resumption
The Gemini Live API connection supports automatic resumption:
Session handles stored and updated on each message
On disconnect, server attempts automatic reconnection
Audio buffered during reconnection, flushed on resume
GoAway signals trigger proactive reconnection
Interview Auto-Conclusion
The AI naturally concludes interviews after 5-7 questions. Conclusion phrases (English and Bulgarian) are pattern-matched to trigger automatic grading:
// English patterns"thank you for your time""that concludes our interview""we'll be in touch"// Bulgarian patterns"благодаря ви за отделеното време""ще се свържем с вас"
Privacy by Design
The application is designed to collect as little data as possible:
Aspect
Approach
No user accounts
Users are never asked to register — no emails, phone numbers, or passwords collected
No CV file storage
Uploaded CVs are parsed in-memory and immediately discarded — only extracted text is used during the session
No audio storage
Voice is streamed in real-time via WebSocket and never saved to disk or database
No transcript retention
The interview transcript exists only in-memory during the session for grading, then is discarded
Automatic cleanup
SessionCleanupScheduler runs every 6 hours and deletes all sessions + feedback older than 2 weeks
Mode-aware legal pages
Privacy Policy and Terms & Conditions hide API key sections when not in PROD mode
What IS Stored (temporarily)
The only data persisted to the database is the grading report (scores, strengths, improvements, verdict) and basic session metadata (candidate name, position, difficulty). This is automatically deleted after 2 weeks.
Mobile Device Blocking
The MobileDeviceInterceptor detects mobile User-Agent strings (Android, iPhone, iPad, etc.) and redirects them to a /error/mobile-not-supported page. This is intentional — a professional interview simulation requires a desktop environment with a proper microphone and screen.
Admin Panel
Features
Login page at /admin/login with Spring Security form-based authentication
Dashboard at /admin/dashboard showing:
Total sessions (last 2 weeks), sessions today, average score, top position
Paginated session table with filtering by position, difficulty, language
Session duration calculation
Feedback/verdict per session
Password change via POST to /admin/change-password
Default Credentials
Username: admin
Password: noit2026P4$$ (BCrypt-hashed in Flyway migration V3__create_admin_and_cleanup.sql)
⚠️ Change immediately after first deployment via the admin dashboard.