Files
ai-job-search/.claude/skills/job-application-assistant/05-cv-templates.md
T
Mads LorentzenandClaude Opus 4.7 32e63e5143 feat(apply): add mandatory PDF compile-and-inspect step and relevance-weighted cutting
Adds a new Step 5 to the /apply workflow that compiles the CV (lualatex)
and cover letter (xelatex) and visually inspects the resulting PDFs before
presenting them to the user. This catches page-break failures that .tex
review cannot detect: orphaned cventry titles, cover letters spilling to
a second page, and bullet fonts not matching body text.

Also introduces relevance-weighted cutting as the rule for shrinking an
overflowing CV: score each candidate line by (a) relevance to the posting,
(b) uniqueness in the document, and (c) load-bearing role in the cover
letter, then cut the lowest-total-score line first, regardless of section.
This replaces the old static "cut oldest section first" heuristic, which
was wrong whenever a relevant older-role bullet competed with an
irrelevant recent-role bullet.

Bundled with the earlier pending token-efficiency improvements to the
/apply workflow (inline draft passing to the reviewer, scoped reviewer
file reads, single end-of-workflow verification pass).

Changes:
- .claude/commands/apply.md: new Step 5 (Compile & Inspect PDFs), renumber
  old Step 5 to Step 6, update token-efficiency rules at top to reference
  Step 6 for the verification checklist
- .claude/skills/job-application-assistant/05-cv-templates.md: switch
  recommended compile engine from pdflatex to lualatex (pdflatex fails on
  modern MiKTeX with fontawesome5 font-expansion errors), add
  "Compile-and-Inspect Loop" section with needspace/enlargethispage
  patterns, add "Relevance-weighted cutting" section
- .claude/skills/job-application-assistant/06-cover-letter-templates.md:
  add compile command, add "Compile-and-Inspect Loop", document the
  "\lettercontent{} + itemize" pitfall and the required font-matching
  Raleway-Medium wrapper fix
- CLAUDE.md: add "Compiled PDF verification (MANDATORY)" checklist items

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 19:34:46 +02:00

9.2 KiB

CV Templates and Tailoring Guide

Template: LaTeX moderncv (Banking Style)

All CVs use the moderncv LaTeX package with the "banking" style and "blue" color scheme.

Output file: cv/main_<company>.tex Compile with: lualatex on MiKTeX/TeX Live. pdflatex often fails on modern MiKTeX installs with fontawesome5 font-expansion errors; lualatex handles the same sources cleanly. Master reference: cv/main_example.tex (comprehensive CV with all competencies, experience, and achievements - use as source when building targeted CVs)

Compile command

cd cv && lualatex -interaction=nonstopmode main_<company>.tex

Expected output: Output written on main_<company>.pdf (2 pages, ...). Any page count other than 2 is a failure that must be fixed before presenting to the user.

Document Structure

\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvstyle{banking}
\moderncvcolor{blue}

\usepackage[utf8]{inputenc}
\usepackage{hyperref}
\hypersetup{
    colorlinks=true,
    linkcolor=blue,
    filecolor=magenta,
    urlcolor=blue,
    pdftitle={[YOUR_NAME] - CV},
    pdfpagemode=FullScreen,
}
\usepackage[scale=0.77]{geometry}
\usepackage{import}

% Personal data
\name{[FIRST_NAME]}{[LAST_NAME]}
\address{[YOUR_ADDRESS]}{}{}
\phone[mobile]{[YOUR_PHONE]}
\email{[YOUR_EMAIL]}
\extrainfo{\href{[YOUR_LINKEDIN_URL]}{LinkedIn}, \href{[YOUR_GITHUB_URL]}{GitHub}}

\begin{document}
\makecvtitle

% 1. Profile statement (1-3 sentences, tailored per role)
% 2. Skills section
% 3. Education section
% 4. Professional Experience section
% 5. Selected Publications (if applicable)
% 6. Honors and Awards (if applicable)
% 7. References

\end{document}

Section-by-Section Tailoring

Profile Statement / Elevator Pitch (Best Practice)

This is the most important section to customize. It appears right after \makecvtitle.

Write 5-7 lines that function as an "elevator pitch": a concise, compelling introduction explaining why you're qualified for this specific role. Focus on what the employer gains from hiring you.

Create 2-3 profile statement templates for your main role types:

For [YOUR_PRIMARY_ROLE_TYPE] roles:

[YOUR_PROFILE_STATEMENT_TEMPLATE_1]

For [YOUR_SECONDARY_ROLE_TYPE] roles:

[YOUR_PROFILE_STATEMENT_TEMPLATE_2]

Core Competencies / Skills Section (Best Practice)

Reorder and emphasize based on the role. Use bold category labels.

List 5-7 key competencies in bullet format, tailored to the specific job. For each competency, briefly explain how it adds value to the position.

Education

  • Always include your highest degrees
  • For senior roles, keep education brief (dates and titles only)
  • Include thesis topics when relevant to the target role

Professional Experience

  • Rewrite bullet points to emphasize aspects most relevant to the target role
  • Use 4-6 bullets for most recent role, 3-4 for previous, 2-3 for older
  • Emphasize measurable results where possible: "Reduced processing time by X%", "Model adopted by the team"

Handling Employment Gaps (Best Practice)

If there is a gap in your employment history:

  • The gap should be explained matter-of-factly if needed
  • Describe how professional development continued during the gap
  • Frame as deliberate skill-building and career repositioning

Publications

  • Include Google Scholar link if applicable
  • Select 3-4 most relevant publications (not always all of them)
  • For non-academic roles, keep brief

Honors and Awards

  • Keep format brief, one line each

References

  • List 2-4 references with name, title, company, and contact
  • End with: "More references are available upon request."
  • Do not attach reference letters - employers typically contact references directly

Compile-and-Inspect Loop (MANDATORY)

After writing the CV and before presenting to the user, always compile and visually inspect the PDF. Iterate until the layout is clean. Workflow:

  1. Run lualatex -interaction=nonstopmode main_<company>.tex
  2. Check the output page count: must be exactly 2
  3. Read the PDF via the Read tool and visually inspect both pages
  4. Check for orphaned entries: a \cventry title line must never sit alone at the bottom of page 1 with its bullets on page 2

Fixing common page-break problems

Problem: entry title on page 1, bullets orphaned to page 2 Add \needspace{5\baselineskip} immediately before the problematic \cventry:

\needspace{5\baselineskip}
\item{\cventry{YEAR--YEAR}{Role Title}{Organization}{Location}{}{...}}

Include \usepackage{needspace} in the preamble.

Problem: one trailing section spills to page 3 (e.g., References alone on page 3) Add \enlargethispage{2-3\baselineskip} before a late section (e.g., before \section{Honors and Awards}) to stretch page 2 by a few lines. This is the standard LaTeX rescue for near-miss overflows.

Problem: 3 pages with significant content on page 3 Cut content — do not compress geometry or \vspace. See "Relevance-weighted cutting" below for the rule.

Problem: content finishes early on page 2 (feels thin) Restore the highest-relevance item that was previously cut — a CV that ends mid-page 2 looks incomplete.

Page Budget - Hard 2-Page Limit

The CV must fit on exactly 2 pages when compiled. Use these content limits as a guide:

Section Max budget
Profile statement 3-4 lines
Skills 5 items, each 1-2 lines
Most recent role 4-5 bullets
Previous role 2-3 bullets
Older roles 2 bullets (1 line each)
Education 2-3 entries
Publications 2-3 entries
Awards 3 entries, single line each
References "Available upon request." (single line)

If in doubt, cut rather than squeeze. Reducing \vspace or geometry scale to force-fit content makes the CV look cramped.

Relevance-weighted cutting (the right way to shrink a CV)

Cut by signal, not by section. Static priority lists ("remove oldest education first, then shorten the earliest role...") are wrong when a relevant "lower-priority" item is competing with an irrelevant "higher-priority" item. An older-role bullet that speaks directly to the posting is worth more than a recent-role bullet that does not.

For every candidate line, score three things:

  1. Relevance to THIS posting — does the line hit a named tool, keyword, or stated responsibility in the job ad?
  2. Uniqueness — is it the only place this claim appears, or is it duplicated elsewhere in the CV?
  3. Narrative load — does the cover letter depend on it? If cutting the line would force you to rewrite a cover-letter paragraph, it is load-bearing.

Cut the lowest-total-score line first, regardless of which section it sits in.

Practical order of cuts (easiest → last resort)

  1. Redundancy. If an achievement appears in both Core Competencies AND a role bullet, the Core Competencies version is usually the cleaner cut (the experience bullet is more concrete evidence).
  2. Profile-statement fluff. A sentence that just restates what Publications or Skills will show. ("Peer-reviewed publications on X..." is already a Publications entry — profile can claim it once and stop.)
  3. Low-relevance experience bullets. A bullet about work that does not touch posting keywords, wherever it sits. This cuts across sections before touching the structural list.
  4. Low-relevance supporting content. An older-role bullet that does not speak to the target role. A certification that does not touch the posting's stack. A language entry that can be condensed to one line.
  5. Low-relevance publications. Keep 1-2 publications that best match the posting. Cut the rest before touching experience bullets.
  6. Last-resort structural cuts. Oldest education entry, tightening an older role to 2 bullets, collapsing Certifications into a single line. These only happen if the relevance-weighted cuts above have already been exhausted.

Pitfalls to avoid

  • Do not mechanically cut from the bottom of a static section list without checking relevance. "Cut the oldest role first" is wrong if that role is literally about the skill the posting asks for.
  • Do not cut the one concrete example the cover letter leans on. Relevance is measured against the cover letter you wrote, not just the job posting — interviewers will have read both.
  • Do not cut to fit if the fit is borderline (2.02 pages). Prefer \enlargethispage{2-3\baselineskip} on a late section for near-misses; reserve content cuts for genuine overflow (content on page 3 that is more than a single trailing section).

The section order varies by role type:

For technical / data science / ML roles:

  1. Profile statement / elevator pitch
  2. Core competencies / Skills
  3. Professional Experience (reverse chronological)
  4. Education (reverse chronological)
  5. Languages
  6. Publications & Awards
  7. References

For domain-specific / specialist roles:

  1. Profile statement / elevator pitch
  2. Core competencies / Skills
  3. Education (reverse chronological) - credentials are a key qualifier
  4. Professional Experience (reverse chronological)
  5. Publications & Awards
  6. References