A Streamlit-based application for generating tailored CVs using AI. Upload your CV, provide a job description, and get a customized CV optimized for the position.
- CV Management: Edit and manage your CV data in JSON format
- CV Upload & Analysis: Upload existing CVs (PDF, DOCX, TXT) and automatically extract information
- User Story: Maintain a personal user story to provide context for CV generation
- AI-Powered CV Generation: Generate tailored CVs based on job descriptions
- Prompt Injection: Add custom HTML/CSS modifications to your generated CV
- CV Preview: View and print generated CVs directly in the browser
- History Viewer: Access and view previously generated CV versions
- Python 3.14 or higher
- Ollama (for running local LLM models)
- Clone the repository:
git clone <repository-url>
cd cv-generator- Install dependencies using uv (recommended):
uv syncOr using pip:
pip install -r requirements.txt- Make sure Ollama is running with a compatible model (e.g., llama3.2)
Start the Streamlit application:
streamlit run streamlit_app.pyOr with uv:
uv run streamlit run streamlit_app.pyThe application will open in your default web browser at http://localhost:8501
-
Upload or Edit Your CV
- Upload an existing CV file (PDF, DOCX, or TXT) or manually edit the CV JSON
- The system will analyze and extract relevant information
-
Add Your User Story (Optional)
- Provide additional context about your background and career goals
- This helps the AI generate more personalized CVs
-
Generate Tailored CV
- Paste the job description
- Add any additional instructions
- Optionally add custom HTML/CSS prompt injection
- Click "Generate" to create your tailored CV
-
View and Print
- Preview the generated CV in the browser
- Use the print button to export as PDF (A4 format)
- View previously generated CVs from the history section
cv-generator/
├── streamlit_app.py # Main Streamlit application
├── cv_generator.py # CV generation logic
├── cv_analyzer.py # CV analysis and extraction
├── cv_renderer.py # HTML rendering using Jinja2
├── llm.py # LLM integration
├── models.py # Pydantic models
├── cv.json # Current CV data
├── user_story.txt # User story file
├── templates/ # Jinja2 templates
│ └── cv_template.html
├── temp/ # Generated CV files
└── text/ # Translations
├── base.py
└── en.py
- streamlit: Web application framework
- langchain: LLM orchestration
- langchain-ollama: Ollama integration
- pydantic: Data validation
- pypdf: PDF processing
- jinja2: Template rendering
- thefuzz: Fuzzy string matching
[Add your license here]