A powerful web application that automatically tailors your resume to match any job description perfectly. Upload your resume, paste a job description, and let the AI find missing points and enhance your resume to achieve a 100% match.
- Smart Analysis: Automatically analyzes job descriptions to extract key requirements, skills, and qualifications
- Resume Parsing: Supports PDF, DOCX, and TXT resume formats
- Gap Detection: Identifies missing points in your resume compared to job requirements
- Web Search Integration: Provides intelligent suggestions and examples for missing skills
- Interactive UI: Easy-to-use interface to specify where to add missing points
- Resume Generation: Creates an updated resume with all enhancements in PDF, DOCX, or TXT format
- Section Mapping: Intelligently maps missing points to appropriate resume sections
- Python 3.8 or higher
- pip (Python package manager)
- Clone the repository:
git clone https://github.com/RepoRoots/JobResumeChanger.git
cd JobResumeChanger- Install required dependencies:
pip install -r requirements.txt- Start the Flask server:
python app.py- Open your web browser and navigate to:
http://localhost:5000
- The application will be running and ready to use!
- Click "Choose File" and select your resume (PDF, DOCX, or TXT format)
- Paste the complete job description in the text area
- Click "Analyze & Find Missing Points"
- The application will display all missing points found in your resume
- For each missing point:
- Click "π Search & Add" to get suggestions and examples
- Select the appropriate section in your resume
- Optionally specify which project this relates to
- Add any additional details or metrics
- Click "Add to Resume"
- Skip any points you don't want to include
- Once done, click "Generate Updated Resume"
- Your updated resume is now ready
- Click "π₯ Download Updated Resume" to save it
- Use your new, perfectly matched resume for your job application!
JobResumeChanger/
βββ app.py # Main Flask application
βββ requirements.txt # Python dependencies
βββ README.md # This file
βββ modules/ # Core functionality modules
β βββ __init__.py
β βββ resume_parser.py # Resume parsing and text extraction
β βββ job_analyzer.py # Job description analysis
β βββ comparison_engine.py # Resume vs. job comparison
β βββ web_search.py # Search and suggestion engine
β βββ resume_generator.py # Updated resume generation
βββ services/ # Service layer (OOP architecture)
β βββ __init__.py
β βββ resume_service.py # Resume business logic service
β βββ session_service.py # Session management service
βββ templates/ # HTML templates
β βββ index.html # Main web interface
βββ uploads/ # Uploaded resumes (created automatically)
βββ processed/ # Generated resumes (created automatically)
The application follows Object-Oriented Programming (OOP) principles with a clean, layered architecture:
- ResumeService: Encapsulates resume operations (upload, parse, analyze, generate)
- SessionService: Manages user session state and data persistence
- ResumeController: Handles HTTP requests and coordinates services
- JobResumeChangerApp: Main application orchestrator
- ApplicationConfig: Centralized configuration management
OOP Patterns Used:
- Service Layer Pattern
- Dependency Injection
- Controller Pattern
- Factory Pattern (create_app)
- Composition over Inheritance
See OOP_ARCHITECTURE.md for detailed architecture documentation.
Extracts text and structure from resume files:
- Supports PDF, DOCX, and TXT formats
- Identifies sections (Experience, Skills, Education, etc.)
- Extracts skills, work experience, and education details
Analyzes job descriptions to extract:
- Technical skills required
- Soft skills needed
- Experience level expectations
- Education requirements
- Key responsibilities
Compares resume with job requirements:
- Identifies missing technical skills
- Finds gaps in soft skills
- Checks responsibility alignment
- Validates education requirements
- Assesses experience match
Provides intelligent suggestions:
- Generates context-aware examples
- Offers resume-ready bullet points
- Suggests action-oriented phrases
- Provides industry-standard wording
Creates updated resume:
- Maintains original formatting where possible
- Adds new points to appropriate sections
- Supports PDF, DOCX, and TXT output
- Highlights newly added content
Edit the skill keywords in modules/job_analyzer.py and modules/resume_parser.py to include additional technologies or skills relevant to your industry.
Customize the suggestion templates in modules/web_search.py to better match your industry or writing style.
Edit the CSS in templates/index.html to customize colors, fonts, and layout.
Important: This application is designed for development and personal use. Do not deploy to production without proper security measures.
- The application stores files temporarily during processing
- Uploaded files are stored with unique session IDs
- Files are stored locally on the server (not recommended for production without additional security)
- Debug mode is disabled in production when FLASK_ENV=production is set
Required:
- Set environment variable:
FLASK_ENV=production - Set a secure secret key:
SECRET_KEY=<your-secure-random-key> - Use a production WSGI server (e.g., Gunicorn, uWSGI) instead of Flask's built-in server
- Enable HTTPS/SSL certificates
Recommended:
- Add user authentication and authorization
- Use cloud storage with encryption for file uploads
- Implement automatic file cleanup routines
- Add rate limiting to prevent abuse
- Set up logging and monitoring
- Use a reverse proxy (nginx, Apache)
- Implement CSRF protection
- Add input validation and sanitization
- Set up a firewall and security groups
Example Production Setup:
# Set environment variables
export FLASK_ENV=production
export SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
# Run with Gunicorn
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 app:appContributions are welcome! Feel free to:
- Report bugs
- Suggest new features
- Submit pull requests
- Improve documentation
This project is open source and available for personal and educational use.
- Be Comprehensive: Paste the complete job description for better analysis
- Add Details: When adding points, include specific metrics and achievements
- Choose Wisely: Select appropriate sections for each missing point
- Review Carefully: Review the generated resume before using it
- Customize Further: Use the generated resume as a base and add personal touches
- Ensure your resume file is in PDF, DOCX, or TXT format
- Check that the file size is under 16MB
- Try converting your resume to a different format
- Your resume may already be well-aligned with the job description
- Try with a more detailed job description
- Ensure the job description contains specific requirements
- Check that you've added at least one point
- Ensure you have write permissions in the application directory
- Try generating in TXT format first
- Chrome (recommended)
- Firefox
- Safari
- Edge
For issues, questions, or suggestions, please open an issue on the GitHub repository.
Made with β€οΈ to help job seekers land their dream jobs!