Practice job interviews with a real-time AI interviewer powered by Google Gemini
Features β’ Quick Start β’ Documentation β’ Tech Stack β’ Contributing
|
Have natural, bidirectional voice conversations with an AI interviewer using Google's Gemini Live API. No typing required - just speak! Upload your PDF or DOCX resume. The AI uses it to ask personalized questions about your experience and projects. Interview in English or Bulgarian. The AI adapts its questions and speech to your chosen language. |
Choose from 4 distinct AI voices:
Get detailed performance feedback after each interview:
|
| Level | Style | Best For |
|---|---|---|
| π Chill | Relaxed, CV-focused conversation | Beginners, confidence building |
| βοΈ Standard | Balanced technical + soft skills | General interview prep |
| π₯ Stress | High-pressure, deep technical | Senior roles, tough companies |
The AI tailors questions to your target role:
- Java/Backend Developer β OOP, Spring Boot, databases, API design
- Frontend Developer β HTML/CSS/JS, React/Vue/Angular, UX
- QA Engineer β Testing methodologies, automation, SDLC
- DevOps Engineer β CI/CD, cloud, containerization
- Project/Product Manager β Leadership, planning, stakeholders
# Clone the repository
git clone https://github.com/dkirichev/interviewSimulator.git
cd interviewSimulator
# Start with Docker Compose
docker-compose up -d
# Open in browser
open http://localhost:8080π See Docker Deployment Guide for detailed instructions.
Prerequisites:
- Java 21+
- PostgreSQL 14+
- Maven 3.9+
- Gemini API Key (free from Google AI Studio)
# Clone and navigate
git clone https://github.com/dkirichev/interviewSimulator.git
cd interviewSimulator
# Set up environment variables
export DB_HOST=localhost
export DB_PORT=5432
export DB_NAME=interview_simulator
export DB_USERNAME=postgres
export DB_PASSWORD=your_password
export GEMINI_API_KEY=your_api_key
export APP_MODE=DEV
# Build and run
./mvnw spring-boot:runπ See Local Setup Guide for detailed instructions.
| Document | Description |
|---|---|
| π Local Setup Guide | Complete local development setup |
| π³ Docker Guide | Production deployment with Docker |
| ποΈ Architecture | System design, privacy model, and admin panel |
| π API Reference | REST and WebSocket endpoints |
| π€ Contributing | How to contribute to the project |
|
Spring Boot 4 |
Java 21 |
PostgreSQL |
Gemini AI |
Thymeleaf |
Docker |
Backend:
- Spring Boot 4.0.0 with WebSocket/STOMP
- Spring Security
- Flyway database migrations
- OkHttp for Gemini WebSocket client
- Apache PDFBox & POI for CV parsing
- Thymeleaf for server-side templating
Frontend:
- Vanilla JavaScript (minimal, ~1,500 lines)
- Thymeleaf templates with i18n support
- Tailwind CSS (via CDN)
- Web Audio API for audio capture/playback
AI:
- Gemini 2.5 Flash (real-time audio conversations)
- Gemini 3 Flash (interview grading)
| Mode | API Key | Use Case |
|---|---|---|
| DEV | Backend provides key | Local development, testing |
| PROD | User provides own key | Production deployment |
| REVIEWER | Multi-key rotation (server) | Competition judges, demos |
In PROD mode, users are prompted to enter their free Gemini API key. This keeps hosting costs at zero while giving each user their own rate limits.
In REVIEWER mode, the API key modal is hidden and the server uses multiple pre-configured keys with automatic model fallback rotation. This is designed for competition judges who shouldn't have to set up API keys.
This project is built with a privacy-by-design philosophy:
| Principle | Implementation |
|---|---|
| No user accounts | Users are never required to register or create accounts β minimizing collected personal data |
| No CV/resume storage | Uploaded CV files are parsed for text in-memory and immediately discarded. The file is never saved to disk or database |
| No audio storage | Voice recordings are streamed in real-time and never persisted |
| No transcript retention | Interview transcripts are not permanently stored β they exist only during the session for grading purposes |
| Automatic data cleanup | A scheduled task runs every 6 hours and deletes all interview session reports older than 2 weeks |
| Mobile device blocking | Mobile phones and tablets are redirected away from the app via a server-side interceptor β a professional interview requires a desktop environment with a proper microphone |
| Mode-aware legal pages | Privacy Policy and Terms & Conditions adapt their content based on the app mode (DEV/PROD/REVIEWER), so users only see information relevant to their context |
The application includes a password-protected admin panel at /admin:
- Dashboard with interview session statistics (total sessions, today's sessions, average score, top position)
- Session browser with filtering by position, difficulty, and language
- Pagination for navigating through sessions
- Password management β change the admin password from the dashboard
β οΈ Default admin credentials:
Username:admin
Password:noit2026P4$$Change this immediately after first login via the admin dashboard password change form.
The admin panel is secured via Spring Security with form-based authentication at /admin/login.
Coming soon - screenshots of the setup wizard, interview screen, and report page
We welcome contributions! Please see our Contributing Guide for details on:
- π Reporting bugs
- π‘ Suggesting features
- π§ Submitting pull requests
- π Code style guidelines
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
This means you can:
- β Use the software for any purpose
- β Change the software to suit your needs
- β Share the software with anyone
- β Share the changes you make
As long as you:
- π Include the original license
- π State significant changes made
- π Make source code available when distributing
- Google Gemini for the amazing AI models
- Spring Boot for the robust framework
- Tailwind CSS for beautiful styling
Made with β€οΈ for interview prep enthusiasts
β Star this repo β’ π Report Bug β’ π‘ Request Feature
