diff --git a/.claude/commands/add-template.md b/.claude/commands/add-template.md index 8c7f632..65b9177 100644 --- a/.claude/commands/add-template.md +++ b/.claude/commands/add-template.md @@ -156,7 +156,7 @@ Insert (or replace, if one exists) this block immediately after the file's H1 ti > - **Compile with:** `` (not the engine named in the stock guidance below) > - **Fonts:** > - **Page limit:** exactly page(s) -> - **Output file:** unchanged (`cv/main_.tex` / `cover_letters/cover__.tex`); copy any class/font files the template needs into the output directory, or reference them by relative path +> - **Output file:** unchanged (`cv/main__.tex` / `cover_letters/cover__.tex`); copy any class/font files the template needs into the output directory, or reference them by relative path ``` diff --git a/.claude/commands/apply.md b/.claude/commands/apply.md index 364a75b..4612451 100644 --- a/.claude/commands/apply.md +++ b/.claude/commands/apply.md @@ -63,7 +63,7 @@ Also read the most recent existing CV and cover letter files for concrete struct - Read any existing `cv/main_*.tex` file as a LaTeX template reference - Read any existing `cover_letters/cover_*.tex` or `cover_letters/Cover_*.tex` file as a template reference -### CV (`cv/main_.tex`) +### CV (`cv/main__.tex`) - Always in **English** - Follow the moderncv/banking format from `05-cv-templates.md` - Tailor the profile statement and experience bullets to the specific role @@ -113,7 +113,7 @@ Do NOT read `05-cv-templates.md` or `06-cover-letter-templates.md` — those gov ### 3. Drafts to Review Both drafts are provided inline below. Do NOT use the Read tool on the draft files — use these exact texts. - + @@ -134,7 +134,7 @@ Return your feedback in **two parts**: A JSON array of concrete edits the drafter can apply directly without re-reading the files. Each edit is an object: ```json { - "file": "cv/main_.tex" | "cover_letters/cover__.tex", + "file": "cv/main__.tex" | "cover_letters/cover__.tex", "old_string": "", "new_string": "", "reason": "" @@ -182,7 +182,7 @@ After all edits are applied, the two files on disk are the final drafts. ### 5a. Compile ```bash -cd cv && lualatex -interaction=nonstopmode main_.tex +cd cv && lualatex -interaction=nonstopmode main__.tex cd ../cover_letters && xelatex -interaction=nonstopmode cover__.tex ``` @@ -195,7 +195,7 @@ If either compile fails, fix the error and re-compile until clean. Read both PDFs via the Read tool and verify: -**CV (`cv/main_.pdf`):** +**CV (`cv/main__.pdf`):** - [ ] Exactly 2 pages (not 1, not 3) - [ ] No orphaned `\cventry` titles — a job/education title line must never sit alone at the bottom of page 1 with its bullets on page 2. This is the most common failure. - [ ] Section headings are not isolated at the top of page 2 with only 1-2 lines below @@ -227,7 +227,7 @@ An ATS parser reads the PDF's embedded **text layer**, not the rendered page — **1. Extract the text layer:** ```bash -cd cv && pdftotext -layout main_.pdf main_.txt +cd cv && pdftotext -layout main__.pdf main__.txt ``` Read the `.txt` file. @@ -276,7 +276,7 @@ Summarize 3-5 key decisions made to tailor the application: ### Files Created List the files written: -- `cv/main_.tex` +- `cv/main__.tex` - `cover_letters/cover__.tex` Tell the user: "Both files are ready for your review. Open them to check the final output before compiling." diff --git a/.claude/commands/interview.md b/.claude/commands/interview.md index 4d17edc..5107512 100644 --- a/.claude/commands/interview.md +++ b/.claude/commands/interview.md @@ -25,7 +25,7 @@ v1 preps for a **specific application**. Generic no-target practice is out of sc - `job_posting.md` - the exact posting the user applied to - `cv_draft.tex` and `cover_letter.tex` - what was actually submitted. **These are what the interviewer read**; every talking point must be consistent with their claims. - `outcome.md` - the stage reached so far and any recorded feedback from earlier stages. Feedback from stage N is the highest-value input for stage N+1 prep. -2. **Fallbacks** (the application may predate `/outcome`): posting via WebFetch on the tracker row's `source` URL, or ask the user to paste it; CV via `cv/main_.tex` and cover letter via `cover_letters/cover__*.tex`. State plainly which context is missing rather than guessing - and suggest `/outcome ` to build the archive for next time. +2. **Fallbacks** (the application may predate `/outcome`): posting via WebFetch on the tracker row's `source` URL, or ask the user to paste it; CV via `cv/main_*.tex` and cover letter via `cover_letters/cover__*.tex`. State plainly which context is missing rather than guessing - and suggest `/outcome ` to build the archive for next time. 3. **Ask the user what this interview is** (skip anything `outcome.md` already records): stage (phone screen / technical / case / final round), date, format (phone, video, onsite), and who is interviewing (names and titles, if known). 4. **Read the frameworks once** - do not re-read them in later steps: - `.claude/skills/job-application-assistant/07-interview-prep.md` diff --git a/.claude/commands/outcome.md b/.claude/commands/outcome.md index c92f756..5120240 100644 --- a/.claude/commands/outcome.md +++ b/.claude/commands/outcome.md @@ -58,7 +58,7 @@ Also collect, without interrogating - one or two open questions are enough: Create or update `documents/applications/_/`. All content here is personal data - the folder is already gitignored (`documents/applications/**`), so nothing needs redacting. -1. **`cv_draft.tex` and `cover_letter.tex`** - copy (never move) the submitted files. Locate them via the tracker row's `cv_file`/`cover_letter_file` columns; if those are empty, look for `cv/main_.tex` and `cover_letters/cover__*.tex`. If a file already exists in the archive, leave it - the archived version is what was actually submitted. If no draft files exist (application made outside `/apply`), skip with a note. +1. **`cv_draft.tex` and `cover_letter.tex`** - copy (never move) the submitted files. Locate them via the tracker row's `cv_file`/`cover_letter_file` columns; if those are empty, look for `cv/main_*.tex` and `cover_letters/cover__*.tex`. If a file already exists in the archive, leave it - the archived version is what was actually submitted. If no draft files exist (application made outside `/apply`), skip with a note. 2. **`job_posting.md`** - if it already exists, leave it. Otherwise try WebFetch on the tracker row's `source` URL and save the posting text. If the URL is dead (postings expire fast - this is exactly why the archive matters), ask the user to paste the posting, or write a stub noting the posting is unavailable. **Never reconstruct a posting from memory.** 3. **`outcome.md`** - write or update it in exactly the format documented in `documents/README.md`, so `/setup` Path A parses it without special cases: diff --git a/.claude/skills/job-application-assistant/05-cv-templates.md b/.claude/skills/job-application-assistant/05-cv-templates.md index 3b43cc1..88b5e8b 100644 --- a/.claude/skills/job-application-assistant/05-cv-templates.md +++ b/.claude/skills/job-application-assistant/05-cv-templates.md @@ -1,5 +1,5 @@ --- -framework_version: 1.0.0 +framework_version: 1.0.1 --- # CV Templates and Tailoring Guide @@ -10,17 +10,17 @@ framework_version: 1.0.0 All CVs use the moderncv LaTeX package with the "banking" style and "blue" color scheme. -**Output file:** `cv/main_.tex` +**Output file:** `cv/main__.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 ```bash -cd cv && lualatex -interaction=nonstopmode main_.tex +cd cv && lualatex -interaction=nonstopmode main__.tex ``` -Expected output: `Output written on main_.pdf (2 pages, ...)`. Any page count other than 2 is a failure that must be fixed before presenting to the user. +Expected output: `Output written on main__.pdf (2 pages, ...)`. Any page count other than 2 is a failure that must be fixed before presenting to the user. ## Document Structure @@ -154,7 +154,7 @@ If there is a gap in your employment history: 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_.tex` +1. Run `lualatex -interaction=nonstopmode main__.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 @@ -183,7 +183,7 @@ Restore the highest-relevance item that was previously cut — a CV that ends mi Most employers run CVs through an ATS before a human sees them, and the ATS reads the PDF's embedded **text layer**, not the rendered page. A CV can pass visual inspection and still extract as garbage. After the layout passes the compile-and-inspect loop, verify the text layer: ```bash -cd cv && pdftotext -layout main_.pdf main_.txt +cd cv && pdftotext -layout main__.pdf main__.txt ``` `pdftotext` comes from [poppler](https://poppler.freedesktop.org/), not the TeX distribution - it is an **optional** dependency. If it is not installed, skip the mechanical check with a warning and rely on the visual PDF read for keyword coverage. diff --git a/.claude/skills/job-application-assistant/SKILL.md b/.claude/skills/job-application-assistant/SKILL.md index 66109e9..8d0a49e 100644 --- a/.claude/skills/job-application-assistant/SKILL.md +++ b/.claude/skills/job-application-assistant/SKILL.md @@ -5,7 +5,7 @@ description: > and preparing for interviews. Triggers on keywords like: job posting, job application, CV, cover letter, resume, interview prep, job fit, career, application, apply, ansøgning, stilling allowed-tools: Read, Glob, Grep, WebFetch, WebSearch, Edit, Write, AskUserQuestion -framework_version: 1.0.0 +framework_version: 1.0.1 --- # Job Application Assistant @@ -28,7 +28,7 @@ When the user provides a job posting (URL or text), follow this workflow: ### Step 2: Tailor CV - Read the most relevant existing CV variant from `cv/` as a starting point - Follow the guidelines in `05-cv-templates.md` -- Create `cv/main_.tex` with tailored content +- Create `cv/main__.tex` with tailored content - Adjust: profile statement, skills section, experience bullet emphasis, section order ### Step 3: Write Cover Letter diff --git a/CLAUDE.md b/CLAUDE.md index d913797..34b2a8d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -85,7 +85,7 @@ This repo is a job application workspace. Claude acts as a career advisor and ap ## Workflow for New Job Applications 1. User provides a job posting (URL or text) 2. **Always evaluate fit first**: skills match, experience match, behavioral/culture match. Present this assessment to the user before proceeding. -3. If good fit: create targeted CV (`cv/main_.tex`) and cover letter (`cover_letters/cover__.tex`) +3. If good fit: create targeted CV (`cv/main__.tex`) and cover letter (`cover_letters/cover__.tex`) 4. **Verify both documents** (see Verification Checklist below) 5. Prepare interview talking points based on the role requirements and your strengths diff --git a/SETUP.md b/SETUP.md index f27c3a9..bf3a42f 100644 --- a/SETUP.md +++ b/SETUP.md @@ -228,13 +228,13 @@ After `/apply` creates the LaTeX files: ```bash # Bash / zsh / Git Bash -cd cv && lualatex main_.tex && cd .. +cd cv && lualatex main__.tex && cd .. cd cover_letters && xelatex cover__.tex && cd .. ``` ```powershell # PowerShell -Set-Location cv; lualatex main_.tex; Set-Location .. +Set-Location cv; lualatex main__.tex; Set-Location .. Set-Location cover_letters; xelatex cover__.tex; Set-Location .. ```