- Create subdirectories for each company (files/, valon/) - Move company-specific resumes and cover letters to their directories - Update Makefile to support FILE_NAME paths (e.g., files/resume-name) - Improve clean target to recursively find .log files - Update CLAUDE.md with new directory structure documentation - Add examples for building PDFs from subdirectories - Document cover letter placement and usage This improves organization as more job-specific resumes accumulate. Files can now be organized by company for easier management. Makefile usage: make resume # root directory (default) make resume FILE_NAME=files/paul-halvorsen-files-backend-engineer make resume FILE_NAME=valon/paul-halvorsen-valon-software-engineer Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
6.6 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)
├── files/
│ ├── paul-halvorsen-files-backend-engineer.md
│ └── paul-halvorsen-files-backend-engineer.pdf
├── valon/
│ ├── paul-halvorsen-valon-software-engineer.md
│ ├── paul-halvorsen-valon-cover-letter.md
│ └── paul-halvorsen-valon-software-engineer.pdf
└── [company]/
└── paul-halvorsen-[company]-[role].md
Build the resume PDF:
# Build default resume (root directory)
make resume
# Build a custom resume from a company subdirectory
make resume FILE_NAME=files/paul-halvorsen-files-backend-engineer
make resume FILE_NAME=valon/paul-halvorsen-valon-software-engineer
# Build a new resume (can be in any directory)
make resume FILE_NAME=[company]/paul-halvorsen-[company]-[role]
The FILE_NAME variable defaults to paul-halvorsen-resume but can be overridden to include a path. The Makefile will:
- Build the Podman image if it doesn't exist
- Convert the markdown file to PDF using the default LaTeX template
- Output a PDF with the same filename (but with
.pdfextension) in the same directory
Example workflow for custom resumes:
# Create a customized markdown resume in company directory
mkdir -p acme
# paul-halvorsen-acme-senior-backend-engineer.md
# Build it
make resume FILE_NAME=acme/paul-halvorsen-acme-senior-backend-engineer
# Output: acme/paul-halvorsen-acme-senior-backend-engineer.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:
-
Get job description - Copy the job posting or description
-
Provide to Claude Code - Share the job description with Claude Code along with a request to create a customized resume (and optionally a cover letter)
-
Output format - Claude will create markdown files in a company subdirectory using the naming convention:
[company]/paul-halvorsen-[company-name]-[role-title].md [company]/paul-halvorsen-[company-name]-cover-letter.md (optional)Example:
stripe/paul-halvorsen-stripe-senior-rust-engineer.mdstripe/paul-halvorsen-stripe-cover-letter.md
-
Build the PDF - Generate the PDF(s) using:
make resume FILE_NAME=stripe/paul-halvorsen-stripe-senior-rust-engineer -
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
- Optional: A compelling cover letter explaining interest in the company/role
Note on Cover Letters: Cover letters are stored as markdown files in the same company directory as the corresponding resume. They can be included when submitting applications through platforms that support them, or converted to PDF by saving as plain text/PDF from a markdown editor.
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.