Skip to content

benhuckvale/career-toolkit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Career Toolkit

Transform career data into multiple formats - resumes, cover letters, LinkedIn content, vector embeddings, and more.

What is this?

Career Toolkit is a Python library for managing career data. You maintain your work history, education, and skills in one YAML file, then transform it into whatever format you need using pluggable output engines.

# Store once
career-data.yml

# Transform many ways
→ resume.pdf          (PDF engine)
→ resume.docx         (DOCX engine)
→ linkedin.txt        (LinkedIn engine)
→ embeddings.faiss    (Vector index engine)
→ profile.json        (JSON engine)

Installation

Prerequisites

  • Python 3.9+
  • PDM
  • wkhtmltopdf: brew install wkhtmltopdf (macOS) or apt-get install wkhtmltopdf (Ubuntu)

Install

git clone https://github.com/yourusername/career-toolkit.git
cd career-toolkit
pdm install

Quick Start

1. Create your data file (data.yml):

personal:
  name:
    first: Jane
    last: Doe
  email: jane.demo@example.com
  linkedin:
    text: linkedin.com/in/jane-demo-doe
    url: https://www.linkedin.com/in/jane-demo-doe

work:
  - company: Tech Co
    positions:
      - title: Senior Engineer
        dates:
          start: "2020-01"
          end: Present
        description: Led development of AI features...

See examples/data.example.yml for a complete example.

2. Generate outputs:

# PDF resume
career-toolkit generate --data data.yml --output resume.pdf

# DOCX resume
career-toolkit generate --data data.yml --output resume.docx --engine docx-simple

# Public version (masks contact info)
career-toolkit generate --data data.yml --output resume.pdf --no-contact

Output Engines

Each format is handled by an output engine:

Engine Description Status
pdf PDF resume via HTML templates ✅ Ready
docx-simple Simple single-column DOCX ✅ Ready
docx-two-column Two-column DOCX layout ✅ Ready
json-profile JSON export (for websites/APIs) ✅ Ready
cover-letter-docx Cover letter generation ✅ Ready
linkedin LinkedIn profile sections 🔲 Planned
vector-index FAISS/ChromaDB embeddings 🔲 Planned
markdown Markdown resume 🔲 Planned

List available engines:

career-toolkit list-engines

Architecture

career-toolkit/
├── src/career_toolkit/
│   ├── core/              # Data loading, YAML processing
│   ├── engines/           # Output engines (PDF, DOCX, etc.)
│   │   ├── base.py        # Base OutputEngine class
│   │   ├── pdf.py
│   │   └── docx.py
│   ├── templates/         # Jinja2 template system
│   └── cli.py             # CLI interface
└── templates/             # Jinja2 templates
    ├── cv/
    └── cover_letter/

Adding a New Engine

Extend OutputEngine and register it:

from career_toolkit.engines.base import OutputEngine

class LinkedInExporter(OutputEngine):
    @property
    def file_extension(self) -> str:
        return "txt"

    @property
    def engine_name(self) -> str:
        return "LinkedIn Profile Export"

    def generate(self, data, output_path):
        # Generate delineated sections for manual copy-paste
        sections = self._format_linkedin_sections(data)
        output_path.write_text(sections)

Register in engines/__init__.py:

ENGINE_REGISTRY["linkedin"] = LinkedInExporter

Data Privacy

Keep sensitive data separate:

# sensitive.yml (gitignored)
personal:
  email: real@email.com
  phone:
    mobile: "+1 555-123-4567"
career-toolkit generate --data data.yml --sensitive sensitive.yml --output resume.pdf

Or mask it for public versions:

career-toolkit generate --data data.yml --output resume.pdf --no-contact

Usage Examples

# Basic PDF
career-toolkit generate -d data.yml -o resume.pdf

# DOCX with custom template
career-toolkit generate -d data.yml -o resume.docx -e docx-simple

# Public version (no contact info)
career-toolkit generate -d data.yml -o resume_public.pdf --no-contact

# With sensitive data merged
career-toolkit generate -d data.yml -s sensitive.yml -o resume.pdf

GitHub Projects Integration

Automatically fetch your GitHub repositories and include them in your profile with custom enrichments.

Quick Start

1. Fetch all your repos (quick list):

export GITHUB_TOKEN="ghp_your_token_here"  # Optional but recommended
career-toolkit github-sync-list --username YOUR_USERNAME
# Creates: .github-cache/github-list.yml

2. Review list, then fetch details for selected repos:

career-toolkit github-sync-details --username YOUR_USERNAME \
  --repos career-toolkit,awesome-project,cool-app
# Creates: .github-cache/github-details.yml

3. Create enrichment file:

cp examples/github-enrichment.example.yml data/github-enrichment.yml
# Edit to add custom descriptions, featured flags, priorities, etc.

4. Export profile with GitHub projects:

career-toolkit export --data data.yml --format json \
  --github-details .github-cache/github-details.yml \
  --github-enrichment data/github-enrichment.yml \
  -o profile.json

Enrichment File Format

projects:
  my-awesome-project:
    featured: true              # Mark as featured
    priority: 1                 # Order (lower = higher priority)
    custom_description: |       # Override GitHub description
      Custom pitch for this project...
    highlights:                 # Key features/achievements
      - Built with Python and FastAPI
      - Deployed on AWS with 99.9% uptime
    demo_url: https://demo.example.com
    image_url: https://example.com/screenshot.png
    category: Web Development
    tags:                       # Merged with GitHub topics
      - python
      - fastapi

  old-experiment:
    hidden: true                # Exclude from profile

GitHub Token Setup

For private repos and higher rate limits (5000/hr vs 60/hr):

  1. Go to https://github.com/settings/tokens
  2. Generate new token (classic) with repo scope
  3. Set environment variable:
    export GITHUB_TOKEN="ghp_your_token_here"
    Or pass directly: --token ghp_your_token_here

Data Files Structure

data/
├── data.yml                  # Your career data
├── github-enrichment.yml     # Your manual GitHub project enrichments (checked in)
└── .github-cache/            # Generated GitHub API cache (gitignored)
    ├── github-list.yml       # All repos (from sync-list)
    └── github-details.yml    # Selected repos detailed data (from sync-details)

Updating Dependencies

If you're using career-toolkit as a dependency in another project:

# In your project folder (e.g., my-career-data)
pdm update career-toolkit     # Pull latest changes including GitHub features

Or:

# In career-toolkit folder
pdm install                   # Install/update dependencies

# Then in your project folder
pdm update career-toolkit     # Pick up the changes

PDM Scripts (for your data folder)

Add to your pyproject.toml:

[tool.pdm.scripts]
# GitHub projects integration
github-sync-list = {cmd = "career-toolkit github-sync-list --output data/.github-cache/github-list.yml", help = "Fetch list of all GitHub repos"}
github-sync-details = {cmd = "career-toolkit github-sync-details --output data/.github-cache/github-details.yml", help = "Fetch details for specific repos"}
export-profile-github = "career-toolkit export --data data/data.yml --format json --github-details data/.github-cache/github-details.yml --github-enrichment data/github-enrichment.yml --output exports/profile.json"

Then run:

pdm run github-sync-list --username YOUR_USERNAME
pdm run github-sync-details --username YOUR_USERNAME --repos repo1,repo2
pdm run export-profile-github

Development

pdm run test         # Run tests
pdm run format       # Format code
pdm run lint         # Lint code
pdm run example-pdf  # Generate example PDF

Why This Design?

Single source of truth - Maintain data once, generate many formats Pluggable engines - Easy to add new output formats Privacy control - Separate sensitive data Template-based - Fully customizable output Automation-ready - Foundation for AI-powered tools (vector indexing, job matching, etc.)

Career Toolkit's job is simple: data goes in → formatted output comes out.

License

MIT

Author

Ben Huckvale

About

Transform career data into multiple formats - resumes, cover letters, LinkedIn content, vector embeddings, and more.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors