A local web application for managing job applications with AI-powered resume tailoring and cover letter generation.
- Job Search: Search Greenhouse job boards by keywords and location
- Manual Job Entry: Paste job descriptions from LinkedIn or any source with auto-extraction of:
- Job title, company, location
- Salary range
- Required skills
- Remote/hybrid status
- Hiring manager name (LinkedIn)
- Job posting date
- AI Resume Tailoring: Generate tailored resumes using:
- Claude API (Anthropic)
- OpenAI API
- Claude CLI (local, no API key needed)
- Cover Letter Generation: AI-generated cover letters with hiring manager personalization
- PDF Generation: Professional PDF output using md-to-pdf
- Application Tracking: Track job status (saved, ready, applied)
- Customizable Prompts: Edit AI prompts for resume/cover letter generation
- Python 3.8+
- Node.js 18+ (for PDF generation)
- One of:
- Claude API key (ANTHROPIC_API_KEY)
- OpenAI API key (OPENAI_API_KEY)
- Claude CLI installed
PDF generation uses Puppeteer (headless Chrome). On Linux/WSL, you need Chrome dependencies:
sudo apt install -y libnspr4 libnss3 libatk1.0-0t64 libatk-bridge2.0-0t64 \
libcups2t64 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 \
libxfixes3 libxrandr2 libgbm1 libasound2t64Note: Package names may vary by distribution. On older Ubuntu/Debian, use libatk1.0-0, libcups2, libasound2 instead of the t64 variants.
start.batchmod +x start.sh
./start.shThe startup script will:
- Create a Python virtual environment
- Install Python dependencies
- Install md-to-pdf (Node.js)
- Start the Flask server at http://127.0.0.1:5000
# Create virtual environment
python -m venv venv
# Activate (Windows)
venv\Scripts\activate
# Activate (Linux/macOS)
source venv/bin/activate
# Install Python dependencies
pip install -r requirements.txt
# Install md-to-pdf
npm install md-to-pdf
# Run
python app.py- Go to Settings in the web UI
- Select your AI provider:
- Claude API: Enter your Anthropic API key
- OpenAI: Enter your OpenAI API key
- Claude CLI: No API key needed (uses local Claude Code installation)
- Select the model
- Go to Resumes in the web UI
- Upload or paste your master resume in Markdown format
- Set as default for tailoring
- Go to Settings
- Add company board tokens (e.g., "cloudflare", "paloaltonetworks")
- Use the search feature to find jobs
- From Greenhouse: Use the Search feature to find and save jobs
- Manual Entry: Click "Add Job" and paste the job description
- LinkedIn format auto-detected
- Fields extracted automatically
- Open a saved job
- Click "Generate Tailored Resume & Cover Letter"
- Wait for AI processing (shows progress)
- Review and download PDFs
- Save jobs you're interested in
- Generate tailored documents
- Review/edit if needed
- Download PDFs for submission
- Mark as Applied when submitted
Run with debug logging:
python app.py -d # INFO level
python app.py -dd # DEBUG level
python app.py -ddd # DEBUG with verbose outputJass/
├── app.py # Flask application
├── models.py # Database models
├── ai_service.py # AI provider abstraction
├── claude_cli.py # Claude CLI integration
├── job_parser.py # Job description parser
├── document_gen.py # PDF generation
├── greenhouse.py # Greenhouse API client
├── config.py # Configuration
├── logger.py # Logging setup
├── templates/ # Jinja2 templates
├── data/
│ └── applications/ # Generated documents
├── start.bat # Windows startup
├── start.sh # Linux startup
└── requirements.txt # Python dependencies
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.