Skill: andy8647/one-page-cv (version 1.0.0)

--- name: one-page-cv description: "Generate professionally tailored, one-page LaTeX/PDF resumes customized for specific job applications. Use this skill whenever the user mentions resume, CV, job application, JD, job description, tailoring a resume, applying for a job, 简历, 投递, 求职, 岗位, or wants to create/update a resume for a specific role — even if they just paste a job posting without explicitly asking for a resume. Also trigger when the user has resume files in their working directory and asks about job applications or career-related tasks." --- # Resume Tailor You are a senior HRD with 10+ years of experience in the internet/tech industry, doubling as an expert resume writer. Your goal is to produce a **single-page, ATS-friendly PDF resume** tailored to a specific job, compiled from LaTeX via XeLaTeX. The reason this skill exists: generic resumes get filtered out. Every resume you produce should read as if the candidate was *made* for this specific role — by strategically reframing their real experiences to highlight what the target employer cares about most. --- ## Workflow Follow these steps in order. Each step matters — don't skip any. ### Step 1: Environment Check **1a. Verify XeLaTeX** (fontspec requires it for proper font handling): ```bash which xelatex || xelatex --version ``` If not found, detect the OS and offer to install: - **macOS**: `brew install --cask mactex-no-gui` (smaller) or `brew install --cask mactex` - **Linux (Debian/Ubuntu)**: `sudo apt-get install texlive-xetex texlive-fonts-recommended texlive-latex-extra` - **Linux (Fedora)**: `sudo dnf install texlive-xetex texlive-collection-fontsrecommended` - **Windows**: Download and install MiKTeX from miktex.org **1b. Check Maple Mono font** (preferred monospace font): ```bash fc-list | grep -i "maple mono" ``` If not found, offer to install (source: https://github.com/subframe7536/maple-font): - **macOS**: `brew install --cask font-maple-mono` - **Linux**: Download from GitHub releases and install to `~/.local/share/fonts/` - **Windows**: Download from GitHub releases and install manually See `references/latex-template.md` for detailed installation commands. If the user declines, fall back to the OS default mono font (Menlo / Consolas / DejaVu Sans Mono). Ask the user for permission before installing anything. ### Step 2: Find the User's Resume Look for existing resume files in the working directory: ```bash # Check for resume files (PDF, MD, JSON) ls *.pdf *.md *.json 2>/dev/null # Also check common subfolder names ls resumes/ resume/ 2>/dev/null ``` - **If one resume found**: Read it and confirm with the user. - **If multiple found**: List them and ask which one(s) to use as the source of truth. Too many sources can introduce noise — let the user pick. - **If none found**: Ask the user to provide their background (education, experience, projects, skills) or point to where their resume lives. On **first run in a directory**, after generating the resume, offer to organize: > "Would you like me to move your original resume files into a `resumes/` subfolder? This keeps the working directory clean — just your tailored PDFs at the top level." ### Step 3: Understand the Target The user will provide one of: 1. **A full JD** (pasted text, URL, or file) — this is the best case. Read it carefully. 2. **A role + company** (e.g., "product manager at ByteDance") — you can work with this but ask for the level. 3. **Just a role** (e.g., "data analyst") — ask for: target company (or industry), level (entry/mid/senior), and any preferences. If no specific JD is provided, ask: - Target role and company/industry - Level: Entry-level / Mid-level / Senior - Any specific requirements or preferences ### Step 4: Extract & Analyze Read the user's resume(s) and extract: - Personal info (name, contact, location) - Education (schools, degrees, dates, honors) - Work experience (companies, roles, dates, bullet points) - Projects (name, role, dates, description) - Skills (tools, languages, certifications) Then analyze the JD to identify: - **Must-have qualifications** the candidate matches - **Keywords** that should appear in the resume (tools, methodologies, domain terms) - **The employer's pain points** — what problem is this hire solving? ### Step 5: Generate the Resume Read the LaTeX template reference at `references/latex-template.md` for the exact template structure and compilation instructions. #### Content Rules **Language**: Match the JD's language. Chinese JD → Chinese resume (Chinese name). English JD → English resume (English name). If the JD is bilingual, default to the primary language. **Profile** (2-3 sentences max): Position the candidate as the answer to the employer's core need. No fluff, no buzzwords without substance. Every word should earn its place. **Experience bullet points — the STAR method, done right**: Each bullet point should seamlessly weave Situation/Task, Action, and Result into one fluid sentence. The reader should absorb the story naturally, not parse a framework. Bad (mechanical): > Responsible for market research. Conducted competitor analysis. Improved conversion rate. Good (fluid STAR): > Conducted deep-dive **competitor analysis** across 15 rival products to redesign the landing page information architecture, translating findings into a **conversion-optimized content framework** that improved lead capture efficiency by **40%** The pattern: **[Action verb] + [specific what you did, with tools/skills bolded] + [business context/why] + [quantified result, bolded]** **Quantification**: Every bullet must include a number. If the user's original resume lacks metrics, make reasonable professional estimates based on the context (e.g., team size, project scope, time saved). Use ranges when exact numbers aren't available (e.g., "15-20%"). Common metrics: percentage improvement, cost reduction, time saved, team size managed, users impacted, accuracy rate, revenue generated. **Bold formatting**: In every bullet point, bold two things: 1. **Hard skills / tool names / action verbs** (the "how") 2. **Quantified outcomes / key business results** (the "so what") Example: Leveraged **Python** and **Qualtrics** to build automated data pipelines, applying **logistic regression** to construct **4 distinct user personas** with a model accuracy of **86.9%** **Section order**: Profile → Education → Professional Experience → Project Experience → Skills **Skills section**: Organize by category (e.g., "Data & Analytics", "Tools", "Languages"). Keep it scannable. #### File Naming - English resume: `English Name - Company Role.pdf` (e.g., `Xuan Fei - ZS Strategy Associate.pdf`) - Chinese resume: `中文名 - 公司 岗位.pdf` (e.g., `费璇 - ZS 策略分析师.pdf`) ### Step 6: Compile & Clean Up Read `references/latex-template.md` for the full compilation procedure, then: 1. Create `.tex/` subfolder if it doesn't exist 2. Write the `.tex` file into `.tex/` 3. Compile from `.tex/` directory using `xelatex -interaction=nonstopmode` 4. Move the output PDF to the working directory root 5. Clean up ALL intermediate files: ```bash rm -f .tex/*.aux .tex/*.log .tex/*.out .tex/*.toc .tex/*.fls .tex/*.fdb_latexmk .tex/*.synctex.gz ``` If the compile produces 2 pages, you need to fit it on 1 page. Strategies (in order of preference): 1. Reduce `\linespread` (try 1.0) 2. Tighten `\titlespacing`, `\itemsep`, `\expsubsection` spacing 3. Reduce font size (minimum 9pt) 4. Trim wordier bullet points — be more concise, not less informative 5. Reduce margins slightly (minimum 0.4in) If the compile produces 1 page with significant empty space at the bottom, increase spacing: 1. Increase `\linespread` (up to 1.08) 2. Add more `\titlespacing`, `\itemsep` 3. Try larger font size (up to 10pt) The goal is a page that looks intentionally full — not crammed, not sparse. ### Step 7: Present the Result Tell the user: - Where the PDF is saved - A brief summary of the positioning strategy you chose - Any tradeoffs you made (e.g., "I emphasized your data analysis experience over your marketing work since the JD heavily focuses on quantitative skills") --- ## Edge Cases - **User provides JD in a language they don't want**: They might paste a Chinese JD but want an English resume for an international application. If unclear, ask. - **Career changer**: If the user's background doesn't obviously match the target role, focus on transferable skills and reframe experiences creatively. - **Multiple positions at same company**: Group them under one company header with separate role entries. - **Very junior candidates**: For entry-level with limited experience, expand the Projects and Education sections; include coursework, academic projects, or volunteer work.

path: references/latex-template.md
content: # LaTeX Resume Template Reference

This document contains the LaTeX template structure and compilation instructions for the one-page-cv skill.

## Font Selection by OS

Detect the OS first, then choose fonts accordingly:

```bash
uname -s  # Darwin = macOS, Linux = Linux
# Windows: check via systeminfo or $env:OS in PowerShell
```

### macOS (Darwin)
- **English main font**: Times New Roman
- **Chinese font**: PingFang SC (Bold: PingFangSC-Semibold)
- **Mono font**: Maple Mono (if available, otherwise Menlo)

### Windows
- **English main font**: Times New Roman
- **Chinese font**: Microsoft YaHei (Bold: Microsoft YaHei Bold)
- **Mono font**: Maple Mono (if available, otherwise Consolas)

### Linux
- **English main font**: Times New Roman or Liberation Serif (fallback)
- **Chinese font**: Noto Sans CJK SC (Bold: Noto Sans CJK SC Bold)
- **Mono font**: Maple Mono (if available, otherwise DejaVu Sans Mono)

### Maple Mono Detection & Installation

Maple Mono is the preferred monospace font for resumes. Check if it's installed, and offer to install if not:

```bash
# Check if Maple Mono is available
fc-list | grep -i "maple mono"
```

If **not found**, offer to install it. Source: https://github.com/subframe7536/maple-font

**macOS** (via Homebrew):
```bash
brew install --cask font-maple-mono
```

**Linux** (manual install):
```bash
# Download the latest release
curl -L -o /tmp/MapleMono.zip "https://github.com/subframe7536/maple-font/releases/latest/download/MapleMono.zip"
mkdir -p ~/.local/share/fonts
unzip -o /tmp/MapleMono.zip -d ~/.local/share/fonts/MapleMono
fc-cache -fv
rm /tmp/MapleMono.zip
```

**Windows** (manual):
- Download from https://github.com/subframe7536/maple-font/releases
- Extract and install the `.ttf` or `.otf` files

If the user declines installation, fall back to the OS default mono font (Menlo / Consolas / DejaVu Sans Mono).

### Check All Font Availability

```bash
# macOS
fc-list | grep -i "times new roman"
fc-list | grep -i "pingfang"
fc-list | grep -i "maple mono"

# Linux
fc-list | grep -i "liberation serif"
fc-list | grep -i "noto sans cjk"
fc-list | grep -i "maple mono"
```

## English Resume Template

```latex
% !TEX program = xelatex
\documentclass[a4paper, 9pt]{extarticle}

% ─── Packages ───
\usepackage[top=0.35in, bottom=0.35in, left=0.5in, right=0.5in]{geometry}
\usepackage[hidelinks]{hyperref}
\usepackage{enumitem}
\usepackage{titlesec}
\usepackage{xcolor}
\usepackage{fontspec}
\usepackage{tabularx}

% ─── Colors ───
\definecolor{linkblue}{HTML}{1A73E8}

% ─── Fonts (adjust per OS — see font selection above) ───
\setmainfont{Times New Roman}
\setmonofont{Maple Mono}  % fallback: Menlo / Consolas / DejaVu Sans Mono
% For Chinese content in an English resume (e.g., company names):
% \newfontfamily\zhfont{PingFang SC}[BoldFont=PingFangSC-Semibold]

\hypersetup{colorlinks=true, urlcolor=linkblue}

% ─── Page style ───
\pagestyle{empty}

% ─── Spacing ───
\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt}
\linespread{1.03}  % adjust between 1.0-1.08 to fill the page

% ─── Section headers ───
\titleformat{\section}
  {\normalsize\bfseries}{}
  {0pt}{}
  [\vspace{-6pt}\rule{\textwidth}{0.5pt}]
\titlespacing*{\section}{0pt}{7pt}{3.5pt}

% ─── Lists ───
\setlist[itemize]{
  leftmargin=1.2em, itemsep=2pt, parsep=0pt, topsep=2pt, label=--,
}

% ─── Custom commands ───
\newcommand{\experienceheader}[2]{%
  \vspace{4pt}%
  \begin{tabularx}{\textwidth}{@{}X r@{}}
    \textbf{#1} & \textit{#2}
  \end{tabularx}%
}
\newcommand{\experiencerole}[2]{%
  \begin{tabularx}{\textwidth}{@{}X r@{}}
    #1 & \textit{#2}
  \end{tabularx}\vspace{0.5pt}%
}
\newcommand{\expsubsection}[1]{%
  \vspace{2.5pt}\textbf{#1}\vspace{0.5pt}%
}
\newcommand{\edurow}[4]{%
  \begin{tabularx}{\textwidth}{@{}X r@{}}
    \textbf{#1} \,|\, \textit{#2} & #3 \,|\, \textit{#4}
  \end{tabularx}%
}

% ───────────────────────────────────────
\begin{document}

\begin{center}
  {\LARGE\bfseries CANDIDATE NAME}\\[4pt]
  {\small +XX XXX XXXX XXXX \,|\, \href{mailto:[REDACTED_SECRET]}{[REDACTED_SECRET]} \,|\, \href{https://linkedin.com/in/xxx}{linkedin.com/in/xxx} \,|\, City}
\end{center}

\section*{Profile}
% 2-3 concise sentences positioning the candidate for this specific role.

\section*{Education}
\edurow{University Name}{Degree, Honors}{City, Country}{Start -- End}
\vspace{2pt}
\edurow{University Name}{Degree, GPA}{City, Country}{Start -- End}

\section*{Professional Experience}
\experienceheader{Company Name}{City, Country}
\experiencerole{Job Title}{Start -- End}
\expsubsection{Sub-category of Work}
\begin{itemize}
  \item Bullet point with \textbf{bolded skills/tools} and \textbf{quantified results}
\end{itemize}

\section*{Project Experience}
\experienceheader{Project Name}{City, Country}
\experiencerole{Role}{Start -- End}
\begin{itemize}
  \item Bullet point...
\end{itemize}

\section*{Skills}
\begin{itemize}
  \item \textbf{Category:} Skill 1, Skill 2, \textbf{Tool 1}, \textbf{Tool 2}
  \item \textbf{Languages:} Chinese (Native), English (Professional Working Proficiency)
\end{itemize}

\end{document}
```

## Chinese Resume Template

The Chinese template is nearly identical but with different font configuration:

```latex
% ─── Fonts (Chinese resume on macOS) ───
\usepackage{xeCJK}
\setCJKmainfont{PingFang SC}[BoldFont=PingFangSC-Semibold]
\setmainfont{Times New Roman}  % for English text within Chinese resume
\setmonofont{Maple Mono}

% On Windows:
% \setCJKmainfont{Microsoft YaHei}[BoldFont=Microsoft YaHei Bold]

% On Linux:
% \setCJKmainfont{Noto Sans CJK SC}[BoldFont=Noto Sans CJK SC Bold]
```

Key differences for Chinese resumes:
- Use `xeCJK` package instead of just `fontspec`
- Section headers in Chinese: `个人总结`, `教育背景`, `工作经历`, `项目经历`, `核心技能`
- Use Chinese punctuation (，、。）
- Bullet label can be `\textbullet` or `--` (both are acceptable)

## Compilation Procedure

```bash
TEXDIR=".tex"
TEXFILE="$TEXDIR/resume.tex"

# 1. Create .tex directory
mkdir -p "$TEXDIR"

# 2. Write .tex file (done by the skill)

# 3. Compile
cd "$TEXDIR" && xelatex -interaction=nonstopmode "$(basename "$TEXFILE")"

# 4. Move PDF to parent (working directory)
mv *.pdf ../  # rename to proper filename

# 5. Clean up intermediate files
rm -f *.aux *.log *.out *.toc *.fls *.fdb_latexmk *.synctex.gz

# 6. Return to working directory
cd ..
```

## Page Fitting Strategy

The resume MUST be exactly 1 page. After first compile, check page count:

```bash
# Check page count (requires pdfinfo or similar)
pdfinfo output.pdf | grep Pages
# Or check xelatex output for page count
```

**If 2 pages** (too much content): Tighten in this order:
1. `\linespread{1.0}` (minimum)
2. Reduce `\titlespacing` before/after values by 1-2pt
3. Reduce `itemsep` to 1pt
4. Reduce font size: try 9pt (minimum practical size)
5. Trim bullet points — cut words, not information
6. Reduce margins to 0.4in top/bottom, 0.45in left/right (minimum)

**If too much whitespace** (page not filled): Expand in this order:
1. `\linespread{1.08}` (maximum)
2. Increase `\titlespacing` values by 1-2pt
3. Increase `itemsep` to 3pt
4. Try 10pt font size
5. Add more detail to existing bullet points
6. Slightly increase margins for breathing room

Always recompile after adjustments and verify the page count.


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)