Upload your CV. Paste the job description. Get a tailored, interview-ready cover letter in seconds.
Tired of sending the same generic cover letter to every job? This tool analyzes your CV against each specific job posting, identifies skill matches and gaps, then generates a personalized cover letter β in your tone, in your language.
Demo β’ Features β’ Tech Stack β’ Installation β’ Usage β’ API
Beautiful glassmorphism design with animated background elements and Turkish interface
Features shown in this screenshot:
- Job Posting Section: Large text area for pasting job descriptions
- Form Fields: Company name, position title, years of experience, key achievements
- CV/Resume Section: Text area with PDF upload functionality
- Generation Settings: Tone selection (Formal) and variant count (2 Variants)
- Modern Design: Dark blue gradient background with glassmorphism effects
- Turkish Interface: Localized UI elements and labels
Real application interface showing Turkish job posting and CV data
What's displayed in this screenshot:
- Job Posting: "KΔ±demli YazΔ±lΔ±m MΓΌhendisi - Full Stack GeliΕtirme" with detailed requirements
- Form Data: TechCorp company, 6 years experience, Senior Software Engineer position
- CV Content: Professional summary in Turkish with technical skills and work experience
- PDF Upload: Drag & drop area for CV upload with automatic text extraction
- Generation Options: Formal tone selected, 2 variants to generate
- Modern UI: Dark blue gradient with glassmorphism design elements
Real-time cover letter generation with skill matching analysis
Seamless PDF upload and professional export options
Comprehensive skill matching and job analysis
- Local LLM Integration: Uses Ollama with Llama 3.1 8B for high-quality, privacy-focused AI generation
- Smart NLP Processing: Advanced skill extraction and matching using SpaCy
- Multi-language Support: Generate cover letters in Turkish and English
- Context-Aware Generation: AI understands job requirements and CV content
- Dark Blue Theme: Professional glassmorphism design with animated elements
- Responsive Design: Perfect experience on desktop, tablet, and mobile
- Smooth Animations: Beautiful transitions and hover effects
- Intuitive Interface: User-friendly form with smart validation
- PDF Upload: Drag & drop CV PDFs with automatic text extraction
- Multi-format Export: Download as PDF or DOCX with professional formatting
- Batch Generation: Create multiple cover letter variants with different tones
- Real-time Preview: See generated content before export
- Skill Extraction: AI identifies key skills from job postings and CVs
- Match Analysis: Shows skill compatibility with confidence scores
- Gap Analysis: Identifies missing skills and provides recommendations
- Experience Mapping: Aligns your experience with job requirements
- Tone Selection: Choose from Formal, Friendly, or Concise writing styles
- Multi-variant: Generate 1-5 different cover letter versions
- Custom Instructions: Add specific requirements or preferences
- Real-time Generation: Fast, responsive AI-powered content creation
| Technology | Version | Purpose |
|---|---|---|
| 14.0.4 | React framework with App Router | |
| 5.0 | Type-safe JavaScript | |
| 3.3 | Utility-first CSS framework | |
| 0.263.1 | Beautiful icon library |
| Technology | Version | Purpose |
|---|---|---|
| 0.104.1 | Modern Python web framework | |
| Latest | Local LLM for AI generation | |
| 3.7.5 | Industrial-strength NLP | |
| 3.0.1 | PDF text extraction | |
| 4.0.7 | PDF generation | |
| 1.1.0 | DOCX generation |
- Node.js 18+
- Python 3.11+
- Ollama (for local AI generation)
- Clone the repository
git clone https://github.com/Enes-CE/AI-Powered_Cover_Letter_Generator.git
cd AI-Powered_Cover_Letter_Generator- Install Ollama
# macOS/Linux
curl -fsSL https://ollama.ai/install.sh | sh
# Download Llama 3.1 8B model
ollama pull llama3.1:8b- Backend Setup
cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python -m spacy download en_core_web_sm- Frontend Setup
cd frontend
npm install- Start the Application
# Terminal 1: Start Backend
cd backend
source venv/bin/activate
python -c "import uvicorn; from main import app; uvicorn.run(app, host='0.0.0.0', port=8003)"
# Terminal 2: Start Frontend
cd frontend
npm run dev- Open Application
- π Frontend: http://localhost:3000
- π§ Backend API: http://localhost:8003
- π API Docs: http://localhost:8003/docs
- Job Posting: Paste the complete job description
- Company Name: Enter the company name
- Position Title: Specify the job title
- Years of Experience: Your relevant experience
- Key Achievements: Highlight your accomplishments
- Text Input: Paste your CV content directly
- PDF Upload: Drag & drop or select a PDF file
- Auto-extraction: Text is automatically extracted from PDFs
- Writing Tone: Choose Formal, Friendly, or Concise
- Number of Variants: Generate 1-5 different versions
- Custom Instructions: Add specific requirements (optional)
- Generate: Click to create AI-powered cover letters
- Review: Check the generated content and analysis
- Export: Download as PDF or DOCX
- Copy: Copy to clipboard for immediate use
# backend/app/settings.py
AI_PROVIDER = "ollama" # ollama | openai | template
OLLAMA_MODEL = "llama3.1:8b"
AI_TIMEOUT = 180 # seconds// frontend/src/lib/api.ts
const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8003';# Backend
AI_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1:8b
AI_TIMEOUT=180
# Frontend
NEXT_PUBLIC_API_URL=http://localhost:8003POST /api/generate-cover-letter
Content-Type: application/json
{
"job_posting": {
"job_posting_text": "Senior Software Engineer position..."
},
"cv_data": {
"cv_text": "Experienced developer with 5+ years..."
},
"company_name": "TechCorp",
"position_title": "Senior Software Engineer",
"years_of_experience": "5 years",
"key_achievements": "Led team of 5 developers...",
"tone": "formal",
"variants": 2
}POST /api/extract-cv-text
Content-Type: multipart/form-data
file: [PDF file]POST /api/export-pdf
Content-Type: application/json
{
"cover_letter": "Generated cover letter text...",
"company_name": "TechCorp",
"position_title": "Senior Software Engineer"
}POST /api/export-docx
Content-Type: application/json
{
"cover_letter": "Generated cover letter text...",
"company_name": "TechCorp",
"position_title": "Senior Software Engineer"
}AI-Powered_Cover_Letter_Generator/
βββ π backend/ # FastAPI backend
β βββ π app/
β β βββ π api/ # API endpoints
β β β βββ cover_letter.py # Main API routes
β β βββ π models/ # Pydantic models
β β β βββ schemas.py # Request/response schemas
β β βββ π services/ # Business logic
β β β βββ ai_service.py # AI service interface
β β β βββ ollama_service.py # Ollama integration
β β β βββ spacy_service.py # NLP processing
β β βββ settings.py # Configuration
β βββ requirements.txt # Python dependencies
β βββ main.py # FastAPI app entry
β βββ railway.json # Railway deployment config
βββ π frontend/ # Next.js frontend
β βββ π src/
β β βββ π app/ # App Router pages
β β β βββ page.tsx # Main application page
β β βββ π components/ # React components
β β β βββ ExportButtons.tsx
β β β βββ PdfUpload.tsx
β β β βββ Toast.tsx
β β βββ π lib/ # Utilities
β β βββ api.ts # API client
β βββ package.json # Node.js dependencies
β βββ tailwind.config.js # Tailwind configuration
β βββ vercel.json # Vercel deployment config
βββ README.md # Project documentation
βββ .gitignore # Git ignore rules
cd backend
source venv/bin/activate
pytestcd frontend
npm test# Health check
curl http://localhost:8003/health
# Generate cover letter
curl -X POST http://localhost:8003/api/generate-cover-letter \
-H "Content-Type: application/json" \
-d '{"job_posting":{"job_posting_text":"Test job"}, "cv_data":{"cv_text":"Test CV"}, "tone":"formal"}'I build custom AI-powered tools and ML solutions for businesses β from predictive models and NLP pipelines to full-stack AI applications like this one.
- π LinkedIn: ibrahim-enes-ulusoy
- π Portfolio: enesulusoy-portfolio.netlify.app
- π§ Email: c.enes.eng@gmail.com





