Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JOBA - Job Application Automation System

An intelligent multi-agent system that automates job application tailoring by analyzing job descriptions, rewriting resumes to match requirements, compiling LaTeX documents with quality verification, and generating personalized cover letters.

Mission (North Star)

Build a super tool that reliably produces job interviews. This means:

  • Truthful, grounded output (zero hallucination) with explicit provenance.
  • Speed (minutes, not hours) with strong ATS alignment.
  • High signal outreach that gets decision-makers to respond.
  • Continuous learning from outcomes to improve the next attempt.

Overview

JOBA uses LangGraph to orchestrate a workflow of specialized agents that:

  1. Extract & Analyze job descriptions from URLs or manual input
  2. Tailor Resumes by selecting relevant content and rewriting for ATS optimization
  3. Compile LaTeX to PDF with automated quality verification loops
  4. Generate Cover Letters with modern professional tone
  5. Track Applications via CSV logging for outcome analysis

Super Tool Vision (Beyond Current Scope)

JOBA evolves from a resume generator into a full-stack job interview engine:

  1. Personal Knowledge Graph: Every claim is a structured, verified fact with evidence.
  2. No-hallucination Resume Compiler: Every bullet maps to evidence; if missing, it blocks.
  3. Recruiter + Hiring Manager Sourcing: Build a decision-maker map using public signals.
  4. Multi-channel Outreach: Personalized sequences (email, LinkedIn, referrals) with timing.
  5. Opportunity Scoring: Predict which roles are realistic for interviews based on fit.
  6. Portfolio Builder: Auto-generate tailored project pages and one-page case studies.
  7. Interview Readiness: Role-specific briefing packs, mock interviews, and Q/A drills.
  8. Offer Strategy: Negotiation briefs and market benchmarking.

Principles (Non-negotiables)

  • Truthfulness: Never claim skills or experience without evidence.
  • Compliance: Avoid scraping or automation that violates terms of service.
  • Quality over spam: Fewer, higher-quality outreach paths, not mass blasting.

Architecture

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│  JD Extractor   │ → │ Resume Tailor   │ → │ LaTeX Compiler  │ → │ Cover Letter    │
│     Agent       │    │     Agent       │    │     Agent       │    │     Agent       │
└─────────────────┘    └─────────────────┘    └─────────────────┘    └─────────────────┘
        │                       │                       │                       │
        ▼                       ▼                       ▼                       ▼
  Structured JD         Tailored Resume         PDF + LaTeX         Cover Letter (PDF/TXT)
  (JSON)                (JSON + TEX)            (Verified)

Tech Stack

Component Choice
Agent Framework LangGraph (LangChain)
JD Scraping BeautifulSoup (simple) + Chrome DevTools MCP (JS-heavy)
LaTeX Engine XeLaTeX (Docker: texlive/texlive:latest-full)
Templates Jinja2
Backend FastAPI (planned)
Frontend Streamlit (planned)

Project Structure

joba/
├── README.md              # This file
├── workspace/             # Working docs, templates, reference materials
│   └── CLAUDE.md         # Project goals and context for AI
├── research/              # Research findings (2,512 lines across 4 files)
│   ├── resume-best-practices.md
│   ├── jd-extraction-methods.md
│   ├── latex-compilation-strategy.md
│   └── agent-framework-comparison.md
├── agents/                # Agent implementations
│   ├── jd_extractor.py
│   ├── resume_tailor.py
│   ├── latex_compiler.py
│   └── cover_letter.py
├── config/                # Configuration files
│   ├── user_profile.yaml
│   └── workflow_config.yaml
├── content/               # User content (resume, projects, portfolio)
│   └── resume/
├── data/                  # Application tracking and logs
│   └── applications.csv
├── logs/                  # Execution logs
├── output/                # Generated resumes and cover letters
├── src/                   # Shared utilities and workflow
│   └── workflow.py
└── tests/                 # Unit and integration tests

Current Status

  • ✅ Research phase complete
  • ⏳ Prototype CLI exists but lacks verification and performance constraints
  • ⏳ Agent development pending

Roadmap (High Level)

Phase 1: Verified content core

  • Build a structured resume knowledge base with evidence links
  • Enforce provenance for every output bullet
  • Add a verifier model to block hallucinations

Phase 2: Resume reliability + speed

  • Replace regex edits with structured rendering
  • Add caching and parallelization
  • Enforce page length and ATS constraints

Phase 3: Outreach and outcomes

  • Recruiter/hiring manager graph
  • Multi-channel outreach sequencing
  • Outcome tracking and continuous optimization

Getting Started (Development)

Prerequisites

  • Python 3.11+
  • Docker (for LaTeX compilation)
  • Anthropic API key (or OpenAI/Gemini)

Installation

# Clone repository
git clone <repo-url>
cd joba

# Create virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
pip install -e .

Configuration

  1. Copy config/user_profile.yaml.example to config/user_profile.yaml
  2. Fill in your personal information, career narrative, and content sources
  3. Set ANTHROPIC_API_KEY environment variable

Usage (Planned)

# Submit job URL for processing
python -m joba submit --url "https://company.com/job-posting"

# Check application status
python -m joba status --id <application-id>

# Download generated materials
python -m joba download --id <application-id>

Research Highlights

Resume Optimization

  • Format: Single-column chronological for ATS compatibility
  • Structure: Action Verb + Scale + Measurable Result
  • Keywords: Prioritize hard skills (76.4% filter rate), job titles, certifications

JD Extraction

  • Simple Sites: BeautifulSoup for static HTML parsing
  • JS-Heavy Sites: Chrome DevTools Protocol via MCP (testing/uc)
  • Fallback: Manual input + LLM structured extraction
  • Limitation: LinkedIn/Indeed blocked by Cloudflare (manual input required)

LaTeX Compilation

  • Engine: XeLaTeX for Unicode and modern font support
  • Templates: Jinja2 with custom latex_escape() filter
  • Runtime: Docker texlive/texlive:latest-full for consistency

License

MIT

Contributing

This is a personal automation tool. Contributions welcome via pull requests.


Note: This system is designed for personal job application automation. Use responsibly and in accordance with job board terms of service.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages