Smart draft guide
Practical guides to install and use the app effectively.
Smart Draft — AI-Powered Application Generation
Smart Draft transforms job descriptions into personalized application emails using advanced AI. This guide covers the complete workflow, supported providers, optimization techniques, and quality assurance.
How Smart Draft Works
┌─────────────────────────────────────────────────────────────────┐
│ SMART DRAFT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ INPUT LAYER │
│ ├── Job Description (full text) │
│ ├── Company Context (name, website, industry) │
│ └── CV Selection (auto-matched or manual) │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ INTELLIGENCE LAYER │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ Language │ │ Tone Detection │ │ │
│ │ │ Detection │ │ │ │ │
│ │ │ (langid.py) │ │ (rule-based) │ │ │
│ │ └─────────────────┘ └─────────────────┘ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ Entity │ │ CV Matching │ │ │
│ │ │ Extraction │ │ Algorithm │ │ │
│ │ │ (spaCy NER) │ │ (TF-IDF + NLP) │ │ │
│ │ └─────────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PROMPT ENGINEERING │
│ ├── System Instructions (tone, language, format) │
│ ├── Context Injection (CV highlights) │
│ └── Constraints (length, style, requirements) │
│ │ │
│ ▼ │
│ AI EXECUTION │
│ ├── Provider Selection (DeepSeek/OpenAI/Anthropic) │
│ ├── Model Routing (complexity-based) │
│ └── Response Generation │
│ │ │
│ ▼ │
│ OUTPUT │
│ ├── Subject Line │
│ ├── Personalized Body │
│ └── Confidence Score │
│ │
└─────────────────────────────────────────────────────────────────┘
Supported AI Providers (15+)
Standard API Providers
| Provider | Models | Best For | Cost |
|---|---|---|---|
| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective, strong reasoning | $ |
| OpenAI | gpt-4o, gpt-4o-mini, o3-mini | Industry leader, high quality | $$$ |
| Anthropic | claude-3.5-sonnet, claude-3.5-haiku | Long context, nuanced output | $$ |
| gemini-2.0-flash, gemini-2.0-pro | Fast inference, multilingual | $$ | |
| Groq | llama-3.3-70b, mixtral-8x7b | Ultra-fast (< 100ms) | $ |
| Mistral | mistral-large, mistral-medium | European data residency | $$ |
| xAI | grok-2 | Alternative perspective | $$ |
| Cohere | command-r, command-r-plus | Enterprise features | $$ |
| AI21 | jamba-1.5-large | Long document processing | $$ |
| Perplexity | sonar, sonar-pro | Research-backed outputs | $$ |
OAuth/Subscription Providers
| Provider | Setup | Cost Model |
|---|---|---|
| Google OAuth | Link Google account | Existing Google AI access |
| GitHub Copilot | Copilot subscription | Included in Copilot Pro |
| ChatGPT Plus | OpenAI account | Included in Plus subscription |
| Claude Pro | Anthropic account | Included in Pro subscription |
Local/Proxy Options
| Option | Use Case | Setup |
|---|---|---|
| Ollama | Privacy-first, offline | Local LLM server |
| Gemini CLI Proxy | Google CLI integration | Terminal-based access |
| Antigravity Proxy | Custom proxy endpoint | Advanced users |
Provider Configuration
Setting Up API Keys
- Navigate to Settings → AI Providers
- Select your preferred provider
- Enter API key (stored in system keyring)
- Select default model
- Set cost limits and alerts
Model Selection Strategy
| Use Case | Recommended Model | Why |
|---|---|---|
| Standard applications | deepseek-chat / gpt-4o-mini | Balanced cost/quality |
| Executive/C-level roles | claude-3.5-sonnet | Nuanced, sophisticated |
| Creative industries | gemini-2.0-flash | Dynamic, engaging |
| Research-heavy roles | o3-mini / sonar-pro | Analytical depth |
| High-volume campaigns | groq-llama-3.3-70b | Speed, cost efficiency |
The Auto-Detection Engine
Language Detection
Smart Draft automatically detects the job posting language:
# Example detection flow
job_description → langid.classify() → confidence_score
↓
if confidence > 0.8:
use_detected_language
else:
fallback_to_cv_language
Supported Languages:
- English (en) — 99.2% accuracy
- French (fr) — 98.7% accuracy
- Spanish (es) — 97.9% accuracy
- German (de) — 97.5% accuracy
- Arabic (ar) — 96.8% accuracy
- Italian (it) — 97.1% accuracy
- Portuguese (pt) — 96.9% accuracy
- Dutch (nl) — 95.4% accuracy
- And 100+ more
Tone Analysis
The system analyzes job description tone via keyword matching:
| Tone Indicator | Keywords | Suggested Tone |
|---|---|---|
| Formal | "corporate", "enterprise", "regulatory" | Formal |
| Startup | "fast-paced", "disruptive", "agile" | Friendly |
| Creative | "design", "innovation", "passion" | Enthusiastic |
| Traditional | "established", "professional", "industry" | Professional |
Entity Extraction
Smart Draft extracts key entities using spaCy NER:
- ORG (Organization): Company names
- POSITION: Job titles, role names
- GPE (Geopolitical Entity): Locations
- SKILL: Technologies, tools, methodologies
- DATE: Posting dates, deadlines
Example:
Input: "Google is hiring a Senior ML Engineer in London"
Extracted:
- ORG: Google
- POSITION: Senior ML Engineer
- GPE: London
CV Matching Algorithm
Job Requirements
│
├──→ Keyword Extraction (TF-IDF)
│
├──→ Skill Matching
│ ├── Exact match: weight 2.0
│ ├── Related tech: weight 1.0
│ └── Domain match: weight 1.5
│
├──→ Experience Comparison
│ ├── Years alignment: weight 1.5
│ └── Level match: weight 2.0
│
└──→ Calculate Similarity Score
│
▼
Compare with all CVs
│
▼
Return Best Match + Confidence
Input Quality Optimization
Best Practices
DO:
- ✅ Paste the complete job description
- ✅ Include requirements section
- ✅ Add company context (mission, size)
- ✅ Mention specific technologies
DON'T:
- ❌ Use truncated descriptions
- ❌ Omit salary/location if relevant
- ❌ Copy only responsibilities (missing requirements)
Input Templates
Standard Job Posting:
Company: [Company Name]
Position: [Job Title]
Location: [City/Remote]
About the Role:
[Full description]
Requirements:
- [Requirement 1]
- [Requirement 2]
Tech Stack:
- [Technology 1]
- [Technology 2]
LinkedIn Job Posting:
- Click "Show more" to expand full description
- Copy entire text including "About the job" and "Qualifications"
- Include "About the company" section
Tone Selection Guide
Professional (Default)
Best for: Most applications, balanced industries
Characteristics:
- Clear, confident language
- Balanced enthusiasm
- Structured paragraphs
- Appropriate formality
Example opening:
"I am writing to express my interest in the Senior Python Engineer position at [Company]. With 5 years of experience building scalable backend systems..."
Formal
Best for: Finance, legal, enterprise, government
Characteristics:
- Structured, traditional format
- Respectful deference
- Precise language
- Conservative tone
Example opening:
"I wish to submit my application for the position of Senior Python Engineer at [Company]. I am confident that my extensive experience..."
Friendly
Best for: Startups, creative agencies, small teams
Characteristics:
- Warm, approachable
- Conversational style
- Shows personality
- Enthusiastic but natural
Example opening:
"I was excited to come across the Senior Python Engineer role at [Company]! Your mission to simplify developer workflows really resonates with me..."
Enthusiastic
Best for: Dream companies, mission-driven roles, career transitions
Characteristics:
- High energy
- Strong alignment with mission
- Passionate about opportunity
- Forward-looking
Example opening:
"I've been following [Company]'s journey for years, and the Senior Python Engineer opening feels like the perfect convergence of my skills and my passion for..."
Review & Quality Assurance
The 4-Point Check
Before sending, verify:
-
Accuracy Check
- Job title matches the posting
- Company name spelled correctly
- Referenced skills are in your CV
- Dates and experience levels align
-
Tone Alignment
- Matches company culture
- Appropriate for industry
- Consistent throughout
-
Language Consistency
- Same language as job posting
- No mixed language fragments
- Correct grammar/spelling
-
Completeness
- Subject line present
- Opening hook engaging
- Body explains fit
- Call to action included
Common Issues & Fixes
| Issue | Cause | Solution |
|---|---|---|
| Wrong company name | Poor entity extraction | Manual edit, re-generate |
| Mismatched skills | CV mismatch | Select correct CV, regenerate |
| Wrong language | Detection failure | Override language setting |
| Too generic | Vague job description | Add more company context |
| Too long | Complex requirements | Regenerate with "concise" prompt |
Advanced Techniques
A/B Testing Templates
Generate multiple versions with different tones:
- Generate draft with "Professional" tone
- Save as Template A
- Generate draft with "Friendly" tone
- Save as Template B
- Send to similar roles, track response rates
- Identify winning approach for your industry
Custom Instructions
Add specific requirements to the prompt:
"Generate a cover letter that:
- Mentions my experience with [specific project]
- Highlights leadership in [specific context]
- Addresses the [specific requirement] directly
- Keeps to 3 paragraphs maximum"
Batch Generation
For high-volume campaigns:
- Import job descriptions as CSV
- Select default CV and tone
- Run batch generation
- Review outputs individually
- Queue approved drafts to Outbox
Cost Tracking & Optimization
Cost Per Generation
| Provider | Model | Approx. Cost/Gen |
|---|---|---|
| DeepSeek | deepseek-chat | $0.002 |
| OpenAI | gpt-4o-mini | $0.003 |
| OpenAI | gpt-4o | $0.015 |
| Anthropic | claude-3.5-haiku | $0.005 |
| Groq | llama-3.3-70b | $0.001 |
Budget Controls
Set in Settings → AI Providers:
- Daily limit: Maximum daily spend
- Monthly limit: Monthly budget cap
- Alert threshold: Warning at % of budget
Troubleshooting
Generation Fails
- Check API key validity
- Verify provider status (some have outages)
- Reduce input size (try trimming job description)
- Switch to alternative provider
- Check cost limits not exceeded
Low Quality Output
- Improve input quality (see Best Practices)
- Try different tone setting
- Switch to higher-quality model
- Add more CV context
- Manually edit and save as template
Language Detection Errors
- Manually select language in Settings
- Include language hint in input
- Regenerate with corrected settings
Integration with Other Features
→ CVs
- Auto-selects best matching CV
- Embeds CV highlights in prompt
- Suggests CV improvements based on gaps
→ Company Lookup
- Pulls company data for context
- Personalizes based on company size/industry
- References company mission/values
→ Analytics
- Tracks generation count by provider
- Monitors cost per generation
- Identifies most effective tones
Next: Learn about Job Search strategies and Profile Management.