Features β’ Architecture β’ Installation β’ API Reference β’ Deployment
NextHire is an intelligent, end-to-end career preparation platform that leverages AI/ML to help job seekers optimize their resumes, practice for interviews, and ace technical assessments. The platform combines advanced NLP techniques with Google's Gemini AI to provide personalized feedback and recommendations.
Job seekers often struggle with:
- Understanding what ATS (Applicant Tracking Systems) look for
- Identifying skill gaps between their resume and job requirements
- Preparing effectively for technical interviews
- Building ATS-friendly resumes
NextHire addresses these challenges through:
- Hybrid ATS Analysis: Combines BERT embeddings with fuzzy matching for accurate skill extraction
- AI Mock Interviews: Gemini-powered interviews with real-time feedback
- Smart Mock Tests: Auto-generated assessments based on job descriptions
- Resume Builder: Multiple ATS-friendly templates with PDF export
| Feature | Description |
|---|---|
| π ATS Resume Analyzer | Hybrid scoring using BERT semantic similarity + fuzzy matching |
| π€ AI Mock Interview | Voice-enabled interviews with Gemini AI analysis |
| π Mock Assessments | JD-based MCQ tests with detailed explanations |
| π Resume Builder | 4 ATS-friendly templates with photo support & PDF export |
| π Learning Resources | Curated resources via YouTube & Serper API |
| π Dashboard | Track progress, scores, and interview history |
| π Google OAuth | Secure authentication with Google Sign-In |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NEXTHIRE PLATFORM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ β
β β β β β β β β
β β FRONTEND β β BACKEND β β ATS SERVICE β β
β β (React) βββββΊβ (Node.js) βββββΊβ (Python) β β
β β β β β β β β
β β β’ Vite β β β’ Express.js β β β’ Flask β β
β β β’ Tailwind CSS β β β’ Mongoose β β β’ spaCy β β
β β β’ Framer Motion β β β’ JWT Auth β β β’ Transformers β β
β β β’ Shadcn/UI β β β’ Multer β β β’ PyMuPDF β β
β β β β β β β β
β ββββββββββ¬ββββββββββ ββββββββββ¬ββββββββββ ββββββββββ¬ββββββββββ β
β β β β β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β EXTERNAL SERVICES β β
β ββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬ββββββββββββββββββββββ€ β
β β MongoDB β Gemini AI β Google β YouTube/Serper β β
β β Atlas β API β OAuth 2.0 β APIs β β
β ββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββ΄ββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sequenceDiagram
participant U as User
participant F as Frontend
participant B as Backend
participant A as ATS Service
participant DB as MongoDB
U->>F: Upload Resume + JD
F->>B: POST /api/analyze
B->>A: Forward files to Flask
A->>A: Extract text (PyMuPDF)
A->>A: spaCy NER + PhraseMatcher
A->>A: BERT Semantic Matching
A->>A: Fuzzy String Matching
A->>A: Calculate Hybrid Score
A-->>B: Return Analysis JSON
B->>DB: Save Analysis Record
B-->>F: Return Results
F-->>U: Display Score & Feedback
sequenceDiagram
participant U as User
participant F as Frontend
participant B as Backend
participant G as Gemini AI
participant DB as MongoDB
U->>F: Select JD & Start Interview
F->>B: POST /api/mockinterview/create
B->>DB: Fetch JD Details
B->>G: Generate Questions (Gemini 2.5)
G-->>B: Return 8 Questions
B->>DB: Save Interview Session
B-->>F: Return Questions
loop For Each Question
F->>U: Display Question (TTS)
U->>F: Voice Response (Web Speech API)
F->>B: POST /submit-response
B->>DB: Save Transcript
end
F->>B: POST /complete
B->>G: Analyze All Responses
G-->>B: Return Detailed Feedback
B->>DB: Save Analysis
B-->>F: Return Results
F-->>U: Display Feedback & Score
sequenceDiagram
participant U as User
participant F as Frontend
participant B as Backend
participant G as Gemini AI
participant DB as MongoDB
U->>F: Select JD + Question Count
F->>B: POST /api/mocktest/create
B->>DB: Fetch JD & Skills
B->>G: Generate MCQs (Gemini 2.5)
G-->>B: Return Questions + Options
B->>DB: Save Test Session
B-->>F: Return Exam Data
U->>F: Answer Questions
F->>B: POST /api/mocktest/submit
B->>G: Evaluate Answers
G-->>B: Return Scores & Explanations
B->>DB: Save Attempt
B-->>F: Return Results
F-->>U: Display Score & Feedback
| Technology | Purpose |
|---|---|
| React 18 | UI Framework |
| Vite | Build Tool |
| Tailwind CSS | Styling |
| Framer Motion | Animations |
| Shadcn/UI | Component Library |
| Axios | HTTP Client |
| React Router | Navigation |
| Web Speech API | Voice Recognition/TTS |
| html2pdf.js | PDF Generation |
| Technology | Purpose |
|---|---|
| Node.js | Runtime |
| Express.js | Web Framework |
| MongoDB | Database |
| Mongoose | ODM |
| JWT | Authentication |
| Multer | File Upload |
| Axios | API Calls |
| Google Auth | OAuth 2.0 |
| Technology | Purpose |
|---|---|
| Flask | Web Framework |
| spaCy | NLP Processing |
| Sentence Transformers | BERT Embeddings |
| RapidFuzz | Fuzzy Matching |
| PyMuPDF | PDF Parsing |
| scikit-learn | Cosine Similarity |
| Transformers | NER Models |
| Service | Purpose |
|---|---|
| Google Gemini 2.5 | AI Question Generation & Analysis |
| YouTube Data API | Learning Resources |
| Serper API | Web Search for Resources |
| Google OAuth | User Authentication |
nexthire/
βββ frontend/ # React Frontend
β βββ src/
β β βββ components/ui/ # Shadcn UI Components
β β βββ pages/ # Page Components
β β β βββ Home.jsx
β β β βββ Login.jsx
β β β βββ AtsAnalysis.jsx
β β β βββ MockTest.jsx
β β β βββ MockInterview.jsx
β β β βββ ResumeBuilder.jsx
β β β βββ Resources.jsx
β β β βββ Dashboard.jsx
β β βββ styles/ # CSS Styles
β β βββ App.jsx # Main App
β βββ package.json
β
βββ backend/ # Node.js Backend
β βββ Controllers/
β β βββ analyzeController.js
β β βββ mockTestController.js
β β βββ mockInterviewController.js
β β βββ resumeController.js
β βββ models/
β β βββ User.js
β β βββ JD.js
β β βββ MockTest.js
β β βββ MockInterview.js
β β βββ Resume.js
β βββ routes/
β βββ middleware/
β βββ index.js
β
βββ ats-skill-analyzer/ # Python ATS Service
β βββ app/
β β βββ main.py # Flask App
β β βββ extractor.py # Skill Extraction
β β βββ matcher.py # Skill Matching
β β βββ semantic_matcher.py # BERT Matching
β β βββ data/ # Skill Datasets
β βββ requirements.txt
β βββ run.py
β
βββ README.md
- Node.js 18+
- Python 3.10+
- MongoDB (local or Atlas)
- Google Cloud Console account (for OAuth)
- Gemini API key
git clone https://github.com/tharun2107/nexthire.git
cd nexthirecd backend
npm installCreate .env file:
MONGO_URI=mongodb+srv://your-connection-string
JWT_SECRET=your-jwt-secret
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GEMINI_API_KEY=your-gemini-api-key
ATS_SERVICE_URL=http://localhost:5000Start backend:
npm start
# Server runs on http://localhost:5001cd ats-skill-analyzer
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Mac/Linux
pip install -r requirements.txt
python -m spacy download en_core_web_smStart ATS service:
python run.py
# Server runs on http://localhost:5000cd frontend
npm installCreate .env file:
VITE_API_URL=http://localhost:5001
VITE_GOOGLE_CLIENT_ID=your-google-client-idStart frontend:
npm run dev
# App runs on http://localhost:5173| Endpoint | Method | Description |
|---|---|---|
/auth/google |
POST | Google OAuth login |
| Endpoint | Method | Description |
|---|---|---|
/api/analyze |
POST | Analyze resume against JD |
/api/jd |
POST | Create new JD |
/api/jd |
GET | Get all JDs |
| Endpoint | Method | Description |
|---|---|---|
/api/mocktest/create |
POST | Generate new test |
/api/mocktest/submit |
POST | Submit test answers |
/api/mocktest/history |
GET | Get test history |
| Endpoint | Method | Description |
|---|---|---|
/api/mockinterview/create |
POST | Start new interview |
/api/mockinterview/submit-response |
POST | Submit answer |
/api/mockinterview/complete |
POST | Complete & get analysis |
/api/mockinterview/history |
GET | Get interview history |
| Endpoint | Method | Description |
|---|---|---|
/api/resume/create |
POST | Save resume |
/api/resume |
GET | Get all resumes |
/api/resume/:id |
GET | Get resume by ID |
/api/resume/update/:id |
PUT | Update resume |
/api/resume/delete/:id |
DELETE | Delete resume |
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Vercel β β Render β β Render β
β (Frontend) ββββββΆβ (Backend) ββββββΆβ (ATS/Python)β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β
βΌ
βββββββββββββββ
β MongoDB β
β Atlas β
βββββββββββββββ
cd frontend
vercel --prod- Create Web Service on Render
- Connect GitHub repository
- Set root directory:
backend - Build command:
npm install - Start command:
node index.js - Add environment variables
- Create Web Service on Render
- Set root directory:
ats-skill-analyzer - Build command:
pip install -r requirements.txt && python -m spacy download en_core_web_sm - Start command:
gunicorn -w 2 -b 0.0.0.0:$PORT run:app
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Frontend: ESLint + Prettier
- Backend: Standard Node.js conventions
- Python: PEP 8
This project is licensed under the MIT License - see the LICENSE file for details.
Tharun Kudikyala
- GitHub: @tharun2107
- LinkedIn: Tharun Kudikyala
- Email: tharunkudikyala@gmail.com





