A full-stack application that extracts text from resumes and job descriptions, then uses Google's Gemini AI to generate personalized interview questions.
- File Upload Support: Upload resume and job description files in multiple formats (.txt, .pdf, .doc, .docx)
- Text Extraction: Extract raw text from various document formats
- AI Question Generation: Generate personalized interview questions using Google Gemini AI
- Categorized Questions: Questions are categorized by type (technical, behavioral, experience) and difficulty
- Clean UI: Modern, responsive React frontend
- Python 3.8+
- React 19.1+
- Google Gemini API Key
-
Navigate to the server directory:
cd server
-
Create and activate a virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
-
Set up environment variables:
cp .env.example .env
Then edit
.env
and add your Gemini API key:GEMINI_API_KEY=your_actual_api_key_here
-
Start the FastAPI server:
python main.py
The server will run on
http://localhost:8000
-
Navigate to the client directory:
cd client
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
The React app will run on
http://localhost:5173
- Go to Google AI Studio
- Sign in with your Google account
- Create a new API key
- Copy the API key to your
.env
file
GET /health
- Health checkPOST /extract-text
- Upload files and generate questions (main endpoint)
- Open the React app in your browser
- Upload a resume file and a job description file
- Click "Generate Questions"
- The app will:
- Extract text from both files
- Send the extracted text to Gemini AI
- Generate personalized interview questions
- Display the questions with categories and difficulty levels
questions-generation/
├── server/
│ ├── services/
│ │ ├── text_extraction_service.py
│ │ └── gemini_ai_service.py
│ ├── main.py
│ ├── requirements.txt
│ ├── .env.example
│ └── .env
├── client/
│ ├── src/
│ │ ├── App.jsx
│ │ ├── App.css
│ │ └── main.jsx
│ ├── package.json
│ └── vite.config.js
└── README.md
The main endpoint returns:
{
"resume": "extracted resume text...",
"job_description": "extracted job description text...",
"generated_questions": {
"questions": [
{
"id": 1,
"question": "Question text",
"category": "technical",
"difficulty": "medium",
"focus_area": "Python programming"
}
],
"summary": {
"total_questions": 10,
"technical_questions": 4,
"behavioral_questions": 3,
"experience_questions": 3
}
},
"success": true
}
- If the Gemini API key is missing or invalid, the app will still extract text but won't generate questions
- Unsupported file formats will show an error message
- Network errors and parsing errors are handled gracefully
- Backend: FastAPI, Python, Google Generative AI
- Frontend: React, Vite
- File Processing: PyPDF2, python-docx
- AI: Google Gemini 1.5 Flash
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request