A full-stack AI-powered mock interview platform that generates role-specific interview questions using Gemini AI, evaluates your answers, and provides structured feedback with scoring.
Most interview preparation is passive — reading answers, watching videos. PrepPilot makes it active. You describe the role, get tailored questions, answer them (by voice or text), and receive AI feedback on each answer instantly.
Backend
- Java 21 + Spring Boot 3.5
- Spring Security + JWT Authentication
- Spring Data JPA + Hibernate
- PostgreSQL
- Gemini AI API (google-generativelanguage)
Frontend
- React 18 + Vite
- Tailwind CSS
- Axios
- React Router DOM
- User registration and login with JWT-based authentication
- Create mock interviews by specifying job position, description, and experience level
- AI-generated interview questions tailored to the role
- Answer via voice (Web Speech API) or text
- Per-answer AI feedback with rating out of 10
- Dashboard showing all past interviews
- Feedback page with average score across all answers
PrepPilot/
├── backend/# Spring Boot REST API
│ └── src/main/java/com/preppilot/backend/
│ ├── controller/
│ ├── service/
│ ├── model/
│ ├── repository/
│ ├── security/
│ ├── dto/
│ └── exception/
└── frontend/# React + Vite
└── src/
├── pages/
└── api/
- Java 21
- Node.js 18+
- PostgreSQL
- Gemini API key (aistudio.google.com)
- Clone the repo
- Create PostgreSQL database:
CREATE DATABASE preppilot;- Run the schema:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE mock_interviews (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
job_position VARCHAR(100) NOT NULL,
job_description TEXT NOT NULL,
experience_level VARCHAR(50) NOT NULL,
questions_json TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE user_answers (
id BIGSERIAL PRIMARY KEY,
interview_id BIGINT REFERENCES mock_interviews(id) ON DELETE CASCADE,
question TEXT NOT NULL,
user_answer TEXT,
ai_feedback TEXT,
ai_rating INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);- Copy
backend/src/main/resources/application.properties.exampletoapplication.propertiesand fill in your values - Run:
cd backend
./mvnw spring-boot:runBackend starts on http://localhost:8080
cd frontend
npm install
npm run devFrontend starts on http://localhost:5173
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register | No | Register new user |
| POST | /api/auth/login | No | Login and get JWT |
| POST | /api/interviews | Yes | Create interview + generate questions |
| GET | /api/interviews | Yes | Get all user interviews |
| GET | /api/interviews/{id} | Yes | Get single interview |
| POST | /api/interviews/answer | Yes | Submit answer + get AI feedback |
| GET | /api/interviews/{id}/answers | Yes | Get all answers for interview |
See backend/src/main/resources/application.properties.example for all required configuration values.