7.6 KiB
7.6 KiB
Project Context
Purpose
I want to develop a framework that helps to write job applications. It should work similar to how OpenSpec works. Based on the on information about the job, a user provides, the framework will generate a CV, emails or a cover letter.
Workflow
1 CHOOSE TEMPLATE LEVEL
- Quick: Email application, existing CV
- Standard: Your planned workflow
- Premium: + Research + CV customization
2 RESEARCH & CONTEXT
- Research job description + company
- Extract keywords/skills
- Analyze culture fit
3 PROPOSAL (= YOUR THOUGHTS)
- Why this position? (authentic!)
- What do you bring? (specific)
- How do you fit the company?
- Tone of Voice: formal/casual?
4 SPECIFICATION
- Define CV adjustments (which projects to emphasize?)
- Cover letter structure
- Format requirements (PDF/DOCX/Online)
- Key messages per paragraph
5 GENERATION
- Adapt CV
- Write cover letter
- Formulate subject line
- Write email body
6 QUALITY CHECK
- Fact check (company names, contact persons)
- Consistency (CV ↔ cover letter)
- Tone check (too stiff? too casual?)
- ATS optimization (if relevant)
7 FINALIZE
- Generate PDFs
- File names according to schema
- Send/Upload
8 TRACK & ARCHIVE
- Sent date, contact person
- Expected response deadline
- Follow-up reminder
- In case of rejection: Document learnings
Tech Stack
- Claude Code as AI Agent.
- Markdown files to manage the specification
- Python for scripting.
Project Conventions
Code Style
- Python Version: 3.10+ (for modern type hints and match statements)
- Formatting: Use
blackfor code formatting (88 character line length) - Linting: Use
rufffor fast linting and import sorting - Type Hints: Mandatory for all function signatures; use
mypyfor static type checking - Naming Conventions:
- Functions/variables:
snake_case - Classes:
PascalCase - Constants:
UPPER_SNAKE_CASE - Private methods:
_leading_underscore
- Functions/variables:
- Docstrings: Google-style docstrings for all public functions and classes
- Import Organization: Standard library, third-party, local (separated by blank lines)
Architecture Patterns
- Modular Design: Separate modules for research, generation, formatting, and tracking
- Template System: Use Jinja2 for CV and cover letter templates
- Pipeline Pattern: Each workflow step is a distinct, testable function
- Data Classes: Use Python dataclasses for structured data (JobInfo, ApplicantProfile, GeneratedOutput)
- Configuration: YAML/TOML files for user profiles, templates, and settings
- File Organization:
src/ ├── core/ # Core business logic ├── templates/ # Jinja2 templates for CVs, cover letters ├── research/ # Web scraping and analysis ├── generation/ # Content generation using Claude API ├── formatting/ # PDF/DOCX conversion └── tracking/ # Application tracking and archiving
Testing Strategy
- Framework: pytest for all testing
- Coverage Target: Aim for 80%+ coverage on core business logic
- Test Types:
- Unit tests for individual functions (research, generation logic)
- Integration tests for full workflow pipelines
- Snapshot/regression tests for generated content consistency
- Fixtures: Use pytest fixtures for sample job postings, user profiles
- Mocking: Mock external API calls (Claude API, web scraping) during tests
- Test Data: Store anonymized sample data in
tests/fixtures/
Git Workflow
- Branching Strategy: GitHub Flow (simplified)
mainbranch is always deployable- Feature branches:
feature/descriptionorfix/description - Merge via pull requests (even for solo work, for documentation)
- Commit Conventions:
- Use conventional commits:
feat:,fix:,docs:,refactor:,test: - Keep commits atomic and focused
- Include OpenSpec references when implementing proposals
- Use conventional commits:
- Versioning: Semantic versioning (MAJOR.MINOR.PATCH)
- Tags: Tag releases with version numbers
Domain Context
Job Application Components
- CV/Resume: Structured document highlighting experience, skills, education
- Formats: PDF (standard), DOCX (editable), ATS-friendly plain text
- Sections: Summary, Experience, Education, Skills, Projects, Certifications
- Cover Letter: 1-page personalized motivation letter
- Structure: Opening, Why this role, What you bring, Cultural fit, Closing
- Tone variations: Formal (corporate), balanced (startups), casual (creative agencies)
- Application Email: Short intro email accompanying documents
- Subject line optimization
- Brief body (3-4 sentences max)
- Professional signature
ATS (Applicant Tracking System) Optimization
- Keyword Matching: Extract keywords from job description and incorporate naturally
- Formatting Rules:
- Simple layouts (no tables, text boxes, headers/footers in CVs)
- Standard section headings
- Common fonts (Arial, Calibri, Times New Roman)
- File Naming:
FirstName_LastName_Position_Company.pdf
Cultural Considerations
- German Market (assumed based on "Bewerbungszauberer"):
- Photo on CV may be expected/common
- More formal tone than US applications
- Detailed work history with exact dates
- Certificates and credentials highly valued
- Tone Analysis: Detect company culture from job posting language and adapt
Important Constraints
Privacy & Data Protection
- GDPR Compliance: All personal data must be stored locally, never transmitted except to Claude API
- No Cloud Storage: Generated applications stored only on user's machine
- API Key Security: Claude API keys stored in environment variables or secure config, never in code
- Data Retention: User controls all archiving; no automatic telemetry or tracking
Quality Standards
- Factual Accuracy: Never fabricate experience, skills, or achievements
- Consistency: All documents for one application must align (dates, job titles, responsibilities)
- No Hallucinations: Verify all company names, contact persons, and facts before generation
- Human Review: Generated content is a draft; user must review and approve
Technical Limitations
- API Rate Limits: Respect Claude API rate limits; implement retry logic with exponential backoff
- Cost Awareness: Each application uses API tokens; provide cost estimates
- Offline Capability: Core template generation should work offline; only research requires internet
External Dependencies
AI Services
- Anthropic Claude API: Primary service for content generation, research analysis, and tone adaptation
- Models: Claude 3.5 Sonnet (primary), Claude 3 Haiku (quick operations)
- Usage: Cover letter writing, CV tailoring, keyword extraction, tone analysis
Document Generation
- ReportLab or WeasyPrint: PDF generation from HTML/templates
- python-docx: DOCX file generation for editable documents
- Jinja2: Template engine for CV and cover letter structures
Web Research (Optional)
- BeautifulSoup4 + requests: Web scraping for company research
- Playwright or Selenium: For dynamic content if needed
- Rate limiting: Respect robots.txt and implement delays
Data Management
- PyYAML or tomli/tomllib: Configuration file parsing
- pydantic: Data validation for user profiles and job information
- SQLite: Local database for tracking applications (lightweight, no server needed)
Development Tools
- black: Code formatting
- ruff: Linting and import sorting
- mypy: Static type checking
- pytest: Testing framework
- pytest-cov: Coverage reporting