Files
Bewerbungszauberer/openspec/project.md
T
2025-11-01 21:49:22 +01:00

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 black for code formatting (88 character line length)
  • Linting: Use ruff for fast linting and import sorting
  • Type Hints: Mandatory for all function signatures; use mypy for static type checking
  • Naming Conventions:
    • Functions/variables: snake_case
    • Classes: PascalCase
    • Constants: UPPER_SNAKE_CASE
    • Private methods: _leading_underscore
  • 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)
    • main branch is always deployable
    • Feature branches: feature/description or fix/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
  • 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