2025-02-12 20:00:57 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# CV / Resume Jobdesc Compatibility Checker
 
							 
						 
					
						
							
								
									
										
										
										
											2025-02-12 19:45:34 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								This project is a Flask-based web service that allows users to upload their resumes in PDF format and compare them against a given job description. The application uses Google's Gemini AI to analyze compatibility and provide a score out of 100.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-02-12 19:58:42 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< img  src = "https://pub-29cbef3ae01c408e9477a8e34bb4a9ef.r2.dev/2025/02/CV_score.jpg" > 
							 
						 
					
						
							
								
									
										
										
										
											2025-02-12 19:57:08 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-02-12 19:45:34 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								## Features
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Upload a resume in PDF format
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Analyze compatibility against a provided job description
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Convert PDF to images for AI processing
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Secure API with CSRF protection and reCAPTCHA validation
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Rate-limiting to prevent abuse
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Uses Flask-Limiter, Flask-WTF, and Flask-CORS for security enhancements
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Deletes uploaded files after processing
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Requirements
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Before running the application, ensure you have the following dependencies installed:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Python 3.8+
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Flask
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Flask-WTF
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Flask-CORS
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Flask-Limiter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  PyMuPDF (fitz)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  pdf2image
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Pillow
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  Google Generative AI SDK
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  python-dotenv
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  requests
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  markdown
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Install dependencies using:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```sh
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								pip install -r requirements.txt
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Environment Variables
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Create a `.env`  file in the root directory and configure the following:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```ini
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								GOOGLE_API_KEY=< your_google_api_key > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								UPLOAD_FOLDER=uploads/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								MAX_FILE_SIZE=4194304  # 4MB limit
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								SECRET_KEY=< your_secret_key > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								RATE_LIMIT=1 per 10 seconds
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								RECAPTCHA_SECRET_KEY=< your_recaptcha_secret_key > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								RECAPTCHA_SITE_KEY=< your_recaptcha_site_key > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								CORS_ORIGIN=< your_allowed_origin > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FLASK_RUN_HOST=0.0.0.0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								FLASK_RUN_PORT=49465
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Usage
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								### Running the Application
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Start the Flask server:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```sh
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								flask run --host=0.0.0.0 --port=49465
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								or
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```sh
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								python app.py
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								### API Endpoints
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#### `GET /`
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Returns the upload page with reCAPTCHA integration.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#### `POST /`
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Accepts form data with a job description and a PDF resume.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  **Parameters:**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  -  `g-recaptcha-response` : Required for reCAPTCHA verification.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  -  `text_input` : The job description.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  -  `file` : A valid PDF file (max 4MB).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  **Response:**
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ```json
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "summary": "Resume compatibility summary",
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "score": 85
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  -  Returns a compatibility summary and a score (0-100).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  -  If reCAPTCHA fails, returns `{ "error": "reCAPTCHA verification failed." }` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  -  If the PDF is invalid, returns `{ "error": "Invalid or potentially harmful PDF." }` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Security Features
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  **CSRF Protection**: Uses `Flask-WTF`  for CSRF token validation.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  **Rate Limiting**: Limits users to 1 request per 10 seconds.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  **reCAPTCHA**: Ensures human users.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  **PDF Sanitization**: Checks for JavaScript, embedded files, and potential security threats.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-  **Secure Headers**: Implements X-Frame-Options, Content-Security-Policy, and other security headers.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Deployment
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								To deploy this application in development mode, use:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```sh
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								flask run --host=0.0.0.0 --port=49465
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								or
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```sh
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								python app.py
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								You can also deploy it using Docker, Nginx, or cloud services like AWS, Google Cloud, or Heroku.