Vettor AI is an AI-powered interview preparation platform that helps candidates practice realistic technical interviews, analyze resumes, measure performance, and refine their answers with targeted feedback.
It combines a React frontend, an Express/MongoDB backend, Firebase authentication, and Razorpay payments to deliver a full interview practice workflow:
- Sign in with Google
- Upload and analyze a resume
- Generate interview questions tailored to a role, experience level, and interview mode
- Submit answers and receive AI-generated scoring and feedback
- Review interview history and detailed reports
- Purchase credits when additional interview sessions are needed
Live application: https://vettorai-1.onrender.com
Vettor AI is designed to simulate a realistic interview loop rather than a generic question bank.
The platform supports structured mock interviews that are informed by:
- Candidate role
- Years of experience
- Interview mode
- Resume content
- Skills and projects
- Historical interview performance
The system then evaluates responses across multiple dimensions, including:
- Confidence
- Communication
- Structure
- Depth
- Correctness
That evaluation is persisted so users can review past interviews, compare progress over time, and identify recurring gaps.
- AI-generated mock interviews tailored to role and experience
- Resume upload and analysis using PDF parsing
- Structured question generation for interview sessions
- Per-answer scoring with detailed feedback
- Final interview reports with question-wise breakdowns
- Interview history with status, score, and timestamps
- Resume-to-job-description fit score
- Skill roadmap generation
- Offer probability and interview intelligence analysis
- Answer optimization and coaching flows
- Authentication with Firebase Google Sign-In
- JWT-backed protected backend routes
- Credit-based access control for interviews
- Razorpay-powered credit purchases
- Responsive modern UI
- Export-friendly report generation on the client
Users can start a guided mock interview based on their target role and experience. The backend generates exactly five interview questions per session and stores the session for later review.
Uploaded resumes are parsed into text and analyzed to support interview generation and fit scoring. This allows the platform to tailor both the interview flow and the feedback context.
Each answer is scored using multiple evaluation axes. Once the interview is finished, the platform calculates a session-level result and exposes a detailed report with question-level scores.
The feature layer also includes:
- Resume and job-description fit scoring
- Skill roadmap recommendations
- Offer probability analysis
- Adaptive interview intelligence
- Answer optimization and coaching
Interviews consume credits. Users can buy additional credits through Razorpay after completing payment verification.
The project is organized as a two-part application:
client/- React + Vite frontendserver/- Express API with MongoDB persistence
The client uses:
- React 19
- Vite
- Tailwind CSS
- Framer Motion
- Redux Toolkit
- React Router
- Firebase Auth
- Recharts
- jsPDF and html2canvas for report-oriented UI features
The server uses:
- Node.js
- Express
- MongoDB with Mongoose
- JWT authentication
- Multer for file uploads
- PDF.js for resume parsing
- Razorpay for payments
- CORS with origin allow-listing
The backend exposes the following functional areas:
POST /api/auth/googleGET /api/auth/logoutGET /api/user/current-user
POST /api/interview/analyze-resumePOST /api/interview/generate-questionsPOST /api/interview/submit-answerPOST /api/interview/finishGET /api/interview/get-interviewGET /api/interview/report/:id
POST /api/feature/fit-scorePOST /api/feature/skill-roadmap
POST /api/payment/orderPOST /api/payment/verify
POST /api/ai/autopilot/follow-upPOST /api/ai/autopilot/coachingPOST /api/ai/autopilot/synthesisPOST /api/ai/offer-intelligence/analyzePOST /api/ai/optimizer/optimizeGET /api/ai/intelligence/profile
- React
- Vite
- Tailwind CSS
- Framer Motion
- Redux Toolkit
- React Router DOM
- Firebase
- Recharts
- jsPDF
- html2canvas
- Node.js
- Express
- MongoDB
- Mongoose
- JWT
- Multer
- PDF.js
- Razorpay
- CORS
- Render deployment
- HTTP-only cookie session handling
- Environment-based configuration
- Node.js 18 or newer
- MongoDB database
- Firebase project for Google authentication
- Razorpay account for payments
git clone https://github.com/dev-koushal/VettorAI.git
cd VettorAIInstall server dependencies:
cd server
npm installInstall client dependencies:
cd ../client
npm installCreate server/.env:
PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
CLIENT_URLS=http://localhost:5173
RAZORPAY_KEY_ID=your_razorpay_key_id
RAZORPAY_KEY_SECRET=your_razorpay_key_secretCreate client/.env:
VITE_FIREBASE_API_KEY=your_firebase_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_firebase_auth_domain
VITE_FIREBASE_PROJECT_ID=your_firebase_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_firebase_storage_bucket
VITE_FIREBASE_MESSAGING_SENDER_ID=your_firebase_messaging_sender_id
VITE_FIREBASE_APP_ID=your_firebase_app_id
VITE_API_BASE_URL=http://localhost:5000Note: the exact client variables used in the app may vary slightly depending on the Firebase and API configuration in your local setup.
Start the backend:
cd server
npm run devStart the frontend:
cd client
npm run devThe client is typically available on Vite's default local port, and the server runs on the port defined in server/.env.
- The user signs in with Google through Firebase.
- The frontend sends the Firebase-authenticated user details to the backend.
- The backend verifies the user and issues a JWT session.
- The JWT is stored in an HTTP-only cookie.
- Protected routes validate the session before allowing access.
This approach keeps authentication state server-validated while avoiding client-side token exposure.
The application stores interview sessions in MongoDB and uses the stored records to power:
- Interview history
- Detailed reports
- Average score calculations
- Historical performance context for AI features
- Offer intelligence and optimization flows
The credit system is also persisted server-side so that interview access remains tied to the user account.
- HTTP-only cookies for session handling
- CORS allow-listing for approved client origins
- JWT-based protected APIs
- Firebase-based authentication entry point
- Payment signature verification before credit allocation
- Server-side ownership checks for interview and optimization actions
Users upload a resume, extract structured resume context, and use that context to drive targeted interview generation.
The system generates interview questions, tracks responses, scores each answer, and computes a final session score.
Users revisit previous interviews, inspect question-wise performance, and optimize weaker answers using the AI coaching layer.
If the credit balance is insufficient, users can create a Razorpay order, complete payment, and receive added credits after verification.
Potential next steps for the product include:
- Voice-based interview practice
- Richer analytics dashboards
- More granular progress tracking
- Company-specific interview playbooks
- Additional export formats for reports
- Expanded adaptive difficulty controls
VettorAI/
|-- client/
| |-- src/
| |-- dist/
| `-- package.json
|-- server/
| |-- controllers/
| |-- routes/
| |-- models/
| `-- package.json
`-- README.md
Kaushal Yadav
Full Stack Developer
MIT License