- New format: company/position/paul-halvorsen-resume.md (cleaner than old company-naming convention) - Document build-resume skill usage with duplicate checking via applications_tracker.md - Add examples of new directory structure (tenstorrent/devrel-engineer/, stripe/backend-engineer/) - Include manual build instructions with proper file paths - Reference application tracking system to prevent duplicate efforts Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
9.7 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is a resume builder using Pandoc to convert Markdown resumes with YAML metadata to PDF via LaTeX templates. The build process is containerized using Podman (Docker alternative) for reproducibility and portability.
Build and Development Commands
Directory Structure: Resumes are organized by company in subdirectories for easy management:
.
├── paul-halvorsen-resume.md (default/main resume)
├── paul-halvorsen-resume-detailed.md (comprehensive details)
├── templates/
│ ├── jb2resume.latex (classic template)
│ ├── jb2resume-modern.latex (improved modern template)
│ └── awesome-cv.latex (modern awesome-cv inspired)
├── files/
│ ├── paul-halvorsen-files-backend-engineer.md
│ ├── paul-halvorsen-files-backend-engineer.pdf (various templates)
│ └── ...
├── valon/
│ ├── paul-halvorsen-valon-software-engineer.md
│ ├── paul-halvorsen-valon-cover-letter.md
│ └── paul-halvorsen-valon-software-engineer.pdf (various templates)
└── [company]/
└── paul-halvorsen-[company]-[role].md
Available Templates:
-
jb2resume- Classic, traditional template- Conservative design
- Best for: Traditional industries, classic look
- Command:
make resume FILE_NAME=path/to/resume
-
jb2resume-modern(Recommended default)- Modern improvements: better spacing, proper bullets, visual hierarchy
- Clean professional look with subtle visual accents
- Best for: Tech companies, modern look with substance
- Command:
make resume-modern FILE_NAME=path/to/resume
-
awesome-cv- Modern, vibrant template- Bold accent colors, prominent sections, contemporary design
- Best for: Startups, tech companies, when you want to stand out
- Command:
make resume-awesome FILE_NAME=path/to/resume
Build the resume PDF:
# Build with default (modern) template
make resume FILE_NAME=paul-halvorsen-resume
# Build with modern template (improved jb2resume)
make resume-modern FILE_NAME=files/paul-halvorsen-files-backend-engineer
# Build with awesome-cv template (bold, modern design)
make resume-awesome FILE_NAME=valon/paul-halvorsen-valon-software-engineer
# Show all available commands and examples
make help
Example workflow for custom resumes:
# Using /build-resume (recommended)
/build-resume [paste job description]
# Or manual build
mkdir -p acme/backend-engineer
# Create paul-halvorsen-resume.md in acme/backend-engineer/
# Build with modern template
make resume-modern FILE_NAME=acme/backend-engineer/paul-halvorsen-resume
# Build cover letter
make cover-letter FILE_NAME=acme/backend-engineer/paul-halvorsen-cover-letter
# Output:
# acme/backend-engineer/paul-halvorsen-resume.pdf
# acme/backend-engineer/paul-halvorsen-cover-letter.pdf
Clean commands:
make clean- Remove LaTeX log filesmake cleanpaper- Remove the generated PDF (uses FILE_NAME variable)make cleanpodman- Remove the Podman image and build cache (forces rebuild next time)make cleanall- Remove everything (logs, PDF, and Podman image)
High-Level Architecture
Resume Processing Pipeline
- Input: Markdown file with YAML metadata block (
*.md) - Processing: Pandoc converts markdown to LaTeX using a template
- Output: PDF generated via LaTeX compilation
- Containerization: All processing happens in a Podman container to ensure consistent output
Key Components
Templates (templates/ directory):
jb2resume.latex- Default resume template (recommended)jb2-modern.latex- Alternative modern template
Both templates are dual-licensed under GPL v2+ and BSD 3-Clause.
Dockerfile:
- Based on
pandoc/latex:latest - Installs additional LaTeX packages:
enumitem,sectsty,underscore - Sets
/dataas the working volume
Makefile:
- Uses Podman (not Docker)
FILE_NAME=paul-halvorsen-resume- Change this to build a different.mdfileUSER=paul- Container user for file permissions- Automatically detects if the Podman image needs rebuilding
Resume Structure
YAML Metadata Block (top of .md file):
---
name: [Your Name]
keywords: [comma-separated keywords for PDF metadata]
left-column:
- [Line 1 for left column under name]
- [Line 2 for left column]
right-column:
- [Line 1 for right column under name]
- [Line 2 for right column]
fontsize: [default 10pt]
fontenc: [default T1]
urlcolor: [default blue]
linkcolor: [default magenta]
numbersections: [true/false, controls section numbering]
name-color: [SVG color name like DarkSlateGray, applies to name]
section-color: [SVG color name like Tomato, applies to section headers]
---
The metadata block is required and must appear at the very top of the markdown file before any content.
Resume Content: Standard Markdown after the metadata block. Headers become sections, lists are formatted naturally.
Multiple Resume Versions
The repository contains two main resume files:
paul-halvorsen-resume.md- Concise version (built by default via Makefile)paul-halvorsen-resume-detailed.md- Extended version with more details
To build a different version, either:
- Modify the
FILE_NAMEvariable in the Makefile, or - Run Pandoc directly with the desired input file
Important Notes
- The Makefile assumes Podman is installed and available
- Build output (.pdf files) and Podman artifacts (.podman-build file) are not tracked in git
- The
.podman-buildmarker file prevents unnecessary image rebuilds (remove it to force rebuild) - All LaTeX processing happens inside the container; no local LaTeX installation is needed
Creating Customized Resumes for Job Applications
The detailed resume (paul-halvorsen-resume-detailed.md) contains comprehensive information across all roles and projects. To create a customized resume for a specific job application:
Quick Start
# Use /build-resume with job description
/build-resume [paste job description]
Claude will:
- Check if you've already applied to this company/position (prevent duplicates)
- Create clean directory structure
- Generate customized resume and cover letter
- Build PDFs automatically
- Create job analysis document
Directory Structure
New standardized format for all applications:
company/
└── position/
├── paul-halvorsen-resume.md
├── paul-halvorsen-resume.pdf
├── paul-halvorsen-cover-letter.md
├── paul-halvorsen-cover-letter.pdf
└── job-breakdown.md (analysis & strategy)
Examples:
tenstorrent/devrel-engineer/paul-halvorsen-resume.mdstripe/backend-engineer/paul-halvorsen-resume.mdfiles/senior-backend-engineer/paul-halvorsen-resume.md
Manual Build
If manually creating/updating files:
# Build with modern template
make resume-modern FILE_NAME=company/position/paul-halvorsen-resume
# Build cover letter
make cover-letter FILE_NAME=company/position/paul-halvorsen-cover-letter
# Build both
make resume-modern FILE_NAME=company/position/paul-halvorsen-resume && \
make cover-letter FILE_NAME=company/position/paul-halvorsen-cover-letter
Application Tracking
All applications tracked in memory at:
~/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md
Prevents duplicate efforts for the same company/position combination.
Expected Result
A 1-2 page resume tailored to the job requirements with:
- Reordered work experience (most relevant roles first)
- Emphasized skills and metrics matching the job description
- Highlighted relevant accomplishments and projects
- Customized summary/intro focused on the role
- Compelling cover letter addressing company mission and role fit
- Job analysis document with fit assessment and strategy notes
The detailed resume includes proficiency levels, performance metrics, specializations, and comprehensive technical details that allow Claude Code to intelligently match your background to specific job requirements.
Template Selection Guide
When to Use Each Template
jb2resume (Classic)
- Traditional companies (finance, government, law)
- Conservative industries
- When you want a proven, time-tested design
- Important: ATS compatibility is high priority
- Example: Financial institutions, government agencies
jb2resume-modern (Recommended for Most Tech)
- Tech startups and established tech companies
- Modern, professional look without being flashy
- Better spacing and readability than classic
- Still ATS-friendly and traditional enough for conservative industries
- Best balance of modern and professional
- Default recommendation for Files.com, Valon, and similar companies
awesome-cv (Modern & Bold)
- Early-stage startups and growth-stage companies (Series A-C)
- Design-forward or forward-thinking companies
- When you want to make a visual impression
- Companies that explicitly value design and attention to detail
- Use when: "We're disrupting X industry" is in the job description
- Example: Files.com, Valon, and similar Series C companies
Quick Decision Tree
Is the company a startup or growth-stage company?
├─ YES → Use awesome-cv (bold, modern, stands out)
└─ NO → Is it a traditional/conservative industry?
├─ YES → Use jb2resume (classic, proven)
└─ NO → Use jb2resume-modern (modern but professional)
For Paul's Current Applications
- Files.com (Series C, a16z-backed): awesome-cv recommended
- Valon (Series C, a16z-backed): awesome-cv recommended
- Enterprise customers: jb2resume-modern
- Government/DoD contracts: jb2resume (classic)