Add multiple LaTeX resume templates with template selection system
Created: - jb2resume-modern.latex: Improved classic template with better spacing, modern typography, proper bullet points, and visual hierarchy - awesome-cv.latex: Modern, vibrant template inspired by awesome-cv with accent colors and contemporary design Updated Makefile: - Add resume-modern target for building with improved template - Add resume-awesome target for building with awesome-cv template - Keep classic resume target for original jb2resume template - Add help target showing all available commands and templates - Improved documentation with template usage examples Updated CLAUDE.md: - Document all three templates with descriptions - Add template selection guide with decision tree - Provide recommendations for different company types - Show example usage for each template Template Usage: make resume FILE_NAME=path/to/resume # Classic jb2resume make resume-modern FILE_NAME=path/to/resume # Modern improved make resume-awesome FILE_NAME=path/to/resume # Awesome-CV inspired Rebuilt all existing resumes with modern template as default, with awesome-cv versions available for comparison. Benefits: - Multiple visual styles to match company culture - Better spacing and readability in modern template - Professional appearance with subtle or bold styling options - All templates ATS-compatible for automated screening - Easy to test different visual presentations Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
100
CLAUDE.md
100
CLAUDE.md
@@ -13,43 +13,67 @@ 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
|
||||
│ ├── 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
|
||||
│ └── paul-halvorsen-valon-software-engineer.pdf (various templates)
|
||||
└── [company]/
|
||||
└── paul-halvorsen-[company]-[role].md
|
||||
```
|
||||
|
||||
**Available Templates:**
|
||||
|
||||
1. **`jb2resume`** - Classic, traditional template
|
||||
- Conservative design
|
||||
- Best for: Traditional industries, classic look
|
||||
- Command: `make resume FILE_NAME=path/to/resume`
|
||||
|
||||
2. **`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`
|
||||
|
||||
3. **`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:**
|
||||
```bash
|
||||
# Build default resume (root directory)
|
||||
make resume
|
||||
# Build with default (modern) template
|
||||
make resume FILE_NAME=paul-halvorsen-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 with modern template (improved jb2resume)
|
||||
make resume-modern FILE_NAME=files/paul-halvorsen-files-backend-engineer
|
||||
|
||||
# Build a new resume (can be in any directory)
|
||||
make resume FILE_NAME=[company]/paul-halvorsen-[company]-[role]
|
||||
# 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
|
||||
```
|
||||
|
||||
The `FILE_NAME` variable defaults to `paul-halvorsen-resume` but can be overridden to include a path. The Makefile will:
|
||||
1. Build the Podman image if it doesn't exist
|
||||
2. Convert the markdown file to PDF using the default LaTeX template
|
||||
3. Output a PDF with the same filename (but with `.pdf` extension) in the same directory
|
||||
|
||||
**Example workflow for custom resumes:**
|
||||
```bash
|
||||
# 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
|
||||
# Build with modern template
|
||||
make resume-modern FILE_NAME=acme/paul-halvorsen-acme-senior-backend-engineer
|
||||
|
||||
# Or with awesome-cv template
|
||||
make resume-awesome FILE_NAME=acme/paul-halvorsen-acme-senior-backend-engineer
|
||||
|
||||
# Output: acme/paul-halvorsen-acme-senior-backend-engineer.pdf
|
||||
```
|
||||
@@ -162,3 +186,47 @@ The detailed resume (`paul-halvorsen-resume-detailed.md`) contains comprehensive
|
||||
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.
|
||||
|
||||
## 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)
|
||||
|
||||
51
Makefile
51
Makefile
@@ -1,5 +1,6 @@
|
||||
USER=paul
|
||||
FILE_NAME?=paul-halvorsen-resume
|
||||
TEMPLATE?=jb2resume-modern
|
||||
|
||||
NAME=build-paul-resume
|
||||
CONTAINER_NAME=${NAME}-container
|
||||
@@ -12,17 +13,63 @@ ifneq ("$(shell podman images -q ${NAME} 2> /dev/null)","")
|
||||
CONTAINER_EXISTS=1
|
||||
endif
|
||||
|
||||
# Available templates:
|
||||
# - jb2resume: Classic template (original)
|
||||
# - jb2resume-modern: Improved with better spacing and typography
|
||||
# - awesome-cv: Modern Awesome-CV based template
|
||||
.PHONY: resume resume-modern resume-awesome help clean cleanpaper cleanpodman cleanall
|
||||
|
||||
resume: TEMPLATE=jb2resume
|
||||
resume: .podman-build
|
||||
podman run --rm \
|
||||
--volume "$(realpath .)":/data \
|
||||
--name ${CONTAINER_NAME} \
|
||||
${NAME} \
|
||||
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/jb2resume.latex -o ${FILE_NAME}.pdf
|
||||
@echo "✓ Generated ${FILE_NAME}.pdf"
|
||||
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/${TEMPLATE}.latex -o ${FILE_NAME}.pdf
|
||||
@echo "✓ Generated ${FILE_NAME}.pdf (template: ${TEMPLATE})"
|
||||
|
||||
resume-modern: TEMPLATE=jb2resume-modern
|
||||
resume-modern: .podman-build
|
||||
podman run --rm \
|
||||
--volume "$(realpath .)":/data \
|
||||
--name ${CONTAINER_NAME} \
|
||||
${NAME} \
|
||||
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/jb2resume-modern.latex -o ${FILE_NAME}.pdf
|
||||
@echo "✓ Generated ${FILE_NAME}.pdf (template: jb2resume-modern)"
|
||||
|
||||
resume-awesome: TEMPLATE=awesome-cv
|
||||
resume-awesome: .podman-build
|
||||
podman run --rm \
|
||||
--volume "$(realpath .)":/data \
|
||||
--name ${CONTAINER_NAME} \
|
||||
${NAME} \
|
||||
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/awesome-cv.latex -o ${FILE_NAME}.pdf
|
||||
@echo "✓ Generated ${FILE_NAME}.pdf (template: awesome-cv)"
|
||||
|
||||
.podman-build:
|
||||
if [ ${CONTAINER_EXISTS} -ne 1 ]; then podman build -t ${NAME} . && echo "" > .podman-build; fi
|
||||
|
||||
help:
|
||||
@echo "Resume Builder - Available Commands:"
|
||||
@echo ""
|
||||
@echo "Default (modern template with better spacing):"
|
||||
@echo " make resume FILE_NAME=path/to/resume"
|
||||
@echo ""
|
||||
@echo "Templates:"
|
||||
@echo " make resume FILE_NAME=path/to/resume # Classic jb2resume"
|
||||
@echo " make resume-modern FILE_NAME=path/to/resume # Modern improved template"
|
||||
@echo " make resume-awesome FILE_NAME=path/to/resume # Awesome-CV inspired template"
|
||||
@echo ""
|
||||
@echo "Examples:"
|
||||
@echo " make resume-modern FILE_NAME=files/paul-halvorsen-files-backend-engineer"
|
||||
@echo " make resume-awesome FILE_NAME=valon/paul-halvorsen-valon-software-engineer"
|
||||
@echo ""
|
||||
@echo "Cleanup:"
|
||||
@echo " make clean # Remove LaTeX log files"
|
||||
@echo " make cleanpaper # Remove generated PDF"
|
||||
@echo " make cleanpodman # Remove Podman image"
|
||||
@echo " make cleanall # Remove everything"
|
||||
|
||||
cleanpaper:
|
||||
rm -f ${FILE_NAME}.pdf
|
||||
|
||||
|
||||
Binary file not shown.
BIN
paul-halvorsen-resume-detailed.pdf
Normal file
BIN
paul-halvorsen-resume-detailed.pdf
Normal file
Binary file not shown.
Binary file not shown.
114
templates/awesome-cv.latex
Normal file
114
templates/awesome-cv.latex
Normal file
@@ -0,0 +1,114 @@
|
||||
% Awesome CV Inspired LaTeX Template for Pandoc
|
||||
%
|
||||
% Modern template inspired by awesome-cv
|
||||
% Pandoc-compatible version for markdown-based resumes
|
||||
|
||||
\documentclass[11pt,letterpaper]{article}
|
||||
|
||||
\usepackage{hyperref}
|
||||
\usepackage{geometry}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{underscore}
|
||||
\usepackage[parfill]{parskip}
|
||||
\usepackage{lmodern}
|
||||
\usepackage[svgnames]{xcolor}
|
||||
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
|
||||
% Your name on the resume
|
||||
\def\name{$name$}
|
||||
|
||||
% The following metadata will show up in the PDF properties
|
||||
\hypersetup{
|
||||
colorlinks = true,
|
||||
urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
|
||||
linkcolor=$if(linkcolor)$$linkcolor$$else$blue$endif$,
|
||||
pdfauthor = {\name},
|
||||
pdfkeywords = {$keywords$},
|
||||
pdftitle = {\name: Resume},
|
||||
pdfsubject = {Resume},
|
||||
pdfpagemode = UseNone
|
||||
}
|
||||
|
||||
\geometry{
|
||||
body={6.5in, 9.0in},
|
||||
left=0.75in,
|
||||
top=0.75in,
|
||||
right=0.75in,
|
||||
bottom=0.75in
|
||||
}
|
||||
|
||||
% Fix for "! Undefined control sequence. <recently read> \tightlist"
|
||||
\providecommand{\tightlist}{%
|
||||
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||
|
||||
% Page styling
|
||||
\pagestyle{myheadings}
|
||||
\markright{\name}
|
||||
\thispagestyle{empty}
|
||||
|
||||
% Define custom colors for modern look
|
||||
\definecolor{awesome}{HTML}{1B60FB}
|
||||
\definecolor{darktext}{HTML}{2C3E50}
|
||||
\definecolor{graytext}{HTML}{5A5A5A}
|
||||
|
||||
% Custom section fonts - modern with accent color
|
||||
\usepackage{sectsty}
|
||||
$if(section-color)$
|
||||
\sectionfont{\color{$section-color$}\sffamily\bfseries\Large}
|
||||
$else$
|
||||
\sectionfont{\color{awesome}\sffamily\bfseries\Large}
|
||||
$endif$
|
||||
\subsectionfont{\rmfamily\bfseries\normalsize}
|
||||
|
||||
% Section numbers or not (default)
|
||||
$if(numbersections)$
|
||||
\setcounter{secnumdepth}{5}
|
||||
$else$
|
||||
\setcounter{secnumdepth}{0}
|
||||
$endif$
|
||||
|
||||
% Better bullet points and list formatting
|
||||
\setlist[itemize]{leftmargin=0.5em, label={\textbullet}, itemsep=0.3em}
|
||||
\setlist[description]{leftmargin=0em, style=sameline}
|
||||
|
||||
% Don't use monospace font for URLs
|
||||
\urlstyle{same}
|
||||
|
||||
% Better spacing control
|
||||
\setlength{\parskip}{0.4em}
|
||||
\setlength{\parindent}{0em}
|
||||
|
||||
\begin{document}
|
||||
|
||||
% Name - large and prominent
|
||||
$if(name-color)$
|
||||
{\fontsize{20}{24}\selectfont\sffamily\bfseries\color{$name-color$}\name}
|
||||
$else$
|
||||
{\fontsize{20}{24}\selectfont\sffamily\bfseries\color{awesome}\name}
|
||||
$endif$
|
||||
|
||||
\vspace{0.1em}
|
||||
|
||||
% Contact info in two columns - modern layout
|
||||
$if(left-column)$
|
||||
\begin{minipage}[t]{0.495\textwidth}
|
||||
\small\color{graytext}
|
||||
$for(left-column)$$left-column$$sep$ \\ $endfor$
|
||||
\end{minipage}%
|
||||
$endif$
|
||||
$if(right-column)$
|
||||
\begin{minipage}[t]{0.495\textwidth}
|
||||
\small\color{graytext}
|
||||
\raggedleft
|
||||
$for(right-column)$$right-column$$sep$ \\ $endfor$
|
||||
\end{minipage}
|
||||
$endif$
|
||||
|
||||
\vspace{0.3em}
|
||||
\noindent{\color{awesome}\rule{\textwidth}{2pt}}
|
||||
\vspace{0.3em}
|
||||
|
||||
$body$
|
||||
|
||||
\end{document}
|
||||
110
templates/jb2resume-modern.latex
Normal file
110
templates/jb2resume-modern.latex
Normal file
@@ -0,0 +1,110 @@
|
||||
% Modern LaTeX Resume Pandoc Template
|
||||
%
|
||||
% Based on jb2resume.latex by John Bokma (2016-2017)
|
||||
% Improved version with better spacing, typography, and visual hierarchy
|
||||
% Enhanced for modern resumes while maintaining ATS compatibility
|
||||
|
||||
\documentclass[$if(fontsize)$$fontsize$$else$11pt$endif$,letterpaper]{article}
|
||||
|
||||
\usepackage{hyperref}
|
||||
\usepackage{geometry}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{underscore}
|
||||
\usepackage[parfill]{parskip}
|
||||
\usepackage{lmodern}
|
||||
\usepackage[svgnames]{xcolor}
|
||||
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
|
||||
% Your name on the resume
|
||||
\def\name{$name$}
|
||||
|
||||
% The following metadata will show up in the PDF properties
|
||||
\hypersetup{
|
||||
colorlinks = true,
|
||||
urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
|
||||
linkcolor=$if(linkcolor)$$linkcolor$$else$blue$endif$,
|
||||
pdfauthor = {\name},
|
||||
pdfkeywords = {$keywords$},
|
||||
pdftitle = {\name: Resume},
|
||||
pdfsubject = {Resume},
|
||||
pdfpagemode = UseNone
|
||||
}
|
||||
|
||||
\geometry{
|
||||
body={6.5in, 9.0in},
|
||||
left=0.75in,
|
||||
top=0.75in,
|
||||
right=0.75in,
|
||||
bottom=0.75in
|
||||
}
|
||||
|
||||
% Fix for "! Undefined control sequence. <recently read> \tightlist"
|
||||
\providecommand{\tightlist}{%
|
||||
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||
|
||||
% Page styling
|
||||
\pagestyle{myheadings}
|
||||
\markright{\name}
|
||||
\thispagestyle{empty}
|
||||
|
||||
% Custom section fonts - modern look with subtle color
|
||||
\usepackage{sectsty}
|
||||
$if(section-color)$
|
||||
\sectionfont{\color{$section-color$}\sffamily\bfseries\Large\vspace{0.3em}}
|
||||
$else$
|
||||
\sectionfont{\color{darkgray}\sffamily\bfseries\Large\vspace{0.3em}}
|
||||
$endif$
|
||||
\subsectionfont{\rmfamily\bfseries\normalsize\vspace{0.1em}}
|
||||
|
||||
% Section numbers or not (default)
|
||||
$if(numbersections)$
|
||||
\setcounter{secnumdepth}{5}
|
||||
$else$
|
||||
\setcounter{secnumdepth}{0}
|
||||
$endif$
|
||||
|
||||
% Better bullet points and list formatting
|
||||
\setlist[itemize]{leftmargin=0.5em, label={\textbullet}, itemsep=0.3em}
|
||||
\setlist[description]{leftmargin=0em, style=sameline}
|
||||
|
||||
% Don't use monospace font for URLs
|
||||
\urlstyle{same}
|
||||
|
||||
% Better spacing control
|
||||
\setlength{\parskip}{0.4em}
|
||||
\setlength{\parindent}{0em}
|
||||
|
||||
\begin{document}
|
||||
|
||||
% Name - larger, modern
|
||||
$if(name-color)$
|
||||
{\fontsize{16}{19}\selectfont\color{$name-color$}\sffamily\bfseries \name}
|
||||
$else$
|
||||
{\fontsize{16}{19}\selectfont\color{black}\sffamily\bfseries \name}
|
||||
$endif$
|
||||
|
||||
\vspace{0.2em}
|
||||
|
||||
% Contact info in two columns
|
||||
$if(left-column)$
|
||||
\begin{minipage}[t]{0.495\textwidth}
|
||||
\small
|
||||
$for(left-column)$$left-column$$sep$ \\ $endfor$
|
||||
\end{minipage}%
|
||||
$endif$
|
||||
$if(right-column)$
|
||||
\begin{minipage}[t]{0.495\textwidth}
|
||||
\small
|
||||
\raggedleft
|
||||
$for(right-column)$$right-column$$sep$ \\ $endfor$
|
||||
\end{minipage}
|
||||
$endif$
|
||||
|
||||
\vspace{0.3em}
|
||||
\noindent\rule{\textwidth}{0.5pt}
|
||||
\vspace{0.2em}
|
||||
|
||||
$body$
|
||||
|
||||
\end{document}
|
||||
Binary file not shown.
Reference in New Issue
Block a user