# CV-2026 — Project Instructions for Claude

This project is Oleg's CV generation pipeline. It supports three workflows:

1. **Base CV refresh** — turn a new Markdown CV into a styled PDF.
2. **Company tailoring** — quickly adapt the latest base CV to a specific company/role and produce a tuned PDF.
3. **Application tracking** — log applications, outreaches, and follow-up communications.

The visual format of every generated PDF must match `base/reference/Oleg_Proskurin_Techlead_resume.docx.pdf` — that file is the canonical style reference.

---

## Folder layout

```
base/
  cv-YYYY-MM-base.md           # current master CV in Markdown
  reference/
    Oleg_Proskurin_*.pdf        # canonical visual reference (do not edit)
templates/
  cv-style.css                  # shared stylesheet — used by every CV
  cv-template.html              # skeleton HTML (use as a starting point)
tailored/
  <company-slug>/
    cv.md                       # tailored Markdown
    cv.html                     # generated HTML
    cv.pdf                      # final PDF
    notes.md                    # job posting, contact, decisions log
tracking/
  applications.md               # one row per application
  outreach.md                   # cold outreach + recruiter conversations
scripts/
  generate-pdf.mjs              # HTML -> PDF (puppeteer)
output/
  html/                         # generated HTML for base CVs (transient)
  pdf/                          # final PDFs for base CVs (committed)
```

---

## Workflow 1 — Generate base CV PDF from Markdown

**Input**: `base/cv-YYYY-MM-base.md`
**Output**: `output/pdf/cv-YYYY-MM-base.pdf`

Steps:

1. Read the Markdown source and the reference PDF (`base/reference/...`) to confirm structure.
2. Generate `output/html/cv-YYYY-MM-base.html` using `templates/cv-template.html` as a starting point.
   - Link the stylesheet via `<link rel="stylesheet" href="/templates/cv-style.css" />` (absolute path — the PDF script serves the project root).
   - Map MD content to HTML tags **verbatim** — section titles, punctuation, list structure, dates, and contact separators must match MD character-for-character. The structure below is the tag shape; the **text** comes from MD. See "Content vs. style — separation rule" below.
3. Run the PDF generator:
   ```bash
   pnpm pdf output/html/cv-YYYY-MM-base.html
   ```
4. Open the resulting PDF (`output/pdf/cv-YYYY-MM-base.pdf`) and verify single-page-ish, no orphan bullets, no overflow.

---

## Workflow 2 — Tailor CV for a specific company

**Input**: latest `base/cv-*.md` + job description / company info
**Output**: `tailored/<company-slug>/cv.pdf`

Steps:

1. Create `tailored/<company-slug>/` folder. Use a short kebab-case slug (e.g. `vercel`, `stripe-platform`, `anthropic-applied`).
2. Copy the base MD into `tailored/<company-slug>/cv.md`.
3. Tailor the content:
   - **Summary**: re-frame around the company's stack and the role's keywords. Keep facts intact, shift emphasis.
   - **Skills**: reorder so the most relevant categories/tools appear first. Drop categories that are irrelevant to keep density.
   - **Bullets**: reorder within each job so the top bullets match what the company values. Edit phrasing to use the company's vocabulary, but never invent achievements.
   - Keep length ≤ 2 pages.
4. Save the job posting, recruiter contacts, and tailoring decisions in `tailored/<company-slug>/notes.md`.
5. Generate `tailored/<company-slug>/cv.html` (same template/CSS).
6. Run the PDF generator with an explicit output directory:
   ```bash
   pnpm pdf tailored/<company-slug>/cv.html tailored/<company-slug>
   ```
   That writes `tailored/<company-slug>/cv.pdf`.
7. Add a row to `tracking/applications.md`.

---

## Workflow 3 — Tracking

- **`tracking/applications.md`**: one row per application. Status column drives the funnel (applied, screen, interview, offer, rejected, withdrawn). Always store absolute dates (e.g. `2026-05-24`).
- **`tracking/outreach.md`**: log cold messages, recruiter pings, and follow-ups. One row per touchpoint; group by company.
- When asked to "log this application" or similar, append to the right file — never rewrite existing rows unless explicitly asked.

---

## Content vs. style — separation rule

**This is the load-bearing rule for MD→HTML conversion. Read it before generating any HTML.**

All text in the generated HTML comes **verbatim** from the source Markdown — section titles, contact-row separators, date formats, punctuation, bullet leads, list structure. The reference PDF supplies **only** visual conventions: typography, sizes, margins, colors, spacing, alignment, two-column header rows. The only allowed transformation is mapping MD markup to HTML tags:

- `# x` → `<h1>x</h1>`
- `## x` → `<h2>x</h2>` (exact text — do not rename)
- `### x` → article header (exact text — do not reword)
- `**x**` → `<strong>x</strong>`
- `*x*` / `_x_` → `<em>x</em>`
- `` `x` `` → `<code>x</code>`
- `[text](url)` → `<a href="url">text</a>`
- `- item` → `<li>item</li>`
- `---` (horizontal rule) → drop (section separators are visual via `<h2>` underline)

Forbidden rewrites (examples — do not do these):

- `## Summary` → `Professional Summary` (rename) ❌
- `## Experience` → `Work History` (rename) ❌
- `·` separators in contacts → `|` (substitution) ❌
- `Feb 2025 – Present` → `02/2025 — Current` (date reformatting) ❌
- Skills bullet list collapsed into a dense paragraph (structure change) ❌
- Job-description paragraph truncated to a short label (content loss) ❌

If the visual style of the reference PDF appears to conflict with what's in MD, the **MD wins**. Update MD if you want different content; never silently rewrite it during HTML generation.

---

## Visual format rules (must match the reference PDF)

The CSS in `templates/cv-style.css` already encodes these — when generating HTML, just use the classes and the format will follow. Reference for human review:

- **Page**: A4, ~12mm margins, single column.
- **Font**: Times New Roman (serif), body 10.5pt, line-height 1.25.
- **Header**: centered name in 14pt bold caps, role in 11pt bold, single contact row with `|` separators.
- **Section headings**: ALL CAPS, bold, 10.5pt, with a thin bottom rule.
- **Job entry**:
  - Header row: company (bold, left) — role (bold, right).
  - Meta row: short company descriptor (italic, left) — dates (italic, right).
  - Bulleted list with disc markers, hanging indent.
- **Links**: blue `#1155cc`, underlined.
- **Length**: target 2 pages.

## HTML structure to use

```html
<header class="cv-header">
  <h1 class="name">OLEG PROSKURIN</h1>
  <p class="role">Role line</p>
  <p class="contacts">email | LinkedIn | Telegram | Github | ...</p>
</header>

<section class="cv-section">
  <h2><!-- exact ## heading from MD, e.g. "Summary" --></h2>
  <p>...</p>
</section>

<section class="cv-section cv-skills">
  <h2>Skills</h2>
  <!-- For each `**Category**` block in MD followed by a `-` list,
       render the category as <strong> then a <ul> of bullets verbatim. -->
  <p><strong>Category</strong></p>
  <ul>
    <li>Item from MD bullet (text verbatim, including ":" and punctuation)</li>
  </ul>
</section>

<section class="cv-section">
  <h2><!-- e.g. "Experience" --></h2>
  <article class="cv-job">
    <!-- ### Company — Role  →  split on first " — " -->
    <div class="cv-job-header">
      <span class="company">Company</span>
      <span class="role">Role</span>
    </div>
    <!-- "**Dates** · Location" line  →  location left, dates right -->
    <div class="cv-job-meta">
      <span>Location</span>
      <span class="dates">Dates verbatim from MD (e.g. "Feb 2025 – Present")</span>
    </div>
    <!-- Full description paragraph from MD (do not truncate). Italic. -->
    <p class="cv-job-desc">Full descriptor paragraph from MD...</p>
    <ul>
      <li>Bullet text verbatim from MD (keep <strong>...</strong>: punctuation as-is)</li>
    </ul>
  </article>
</section>

<section class="cv-section">
  <h2><!-- e.g. "Education" --></h2>
  <p>...</p>
</section>

<section class="cv-section">
  <h2><!-- e.g. "Languages" --></h2>
  <p>...</p>
</section>
```

---

## Conventions

- **Language**: every artifact (HTML, MD, PDF, tracking rows, card notes) is in English. Always.
- **Filenames**: kebab-case. CVs: `cv-YYYY-MM-base.md` for base, `cv.md` inside `tailored/<slug>/` for tailored.
- **Dates**: absolute (`2026-05-24`), never "last Thursday".
- **Don't edit the reference PDF.** It is the immutable visual anchor.
- **Don't auto-regenerate PDFs** unless Oleg asks — show diffs first when content changes.
- **Verify before claiming "done"**: after `pnpm pdf`, confirm the PDF exists and looks correct (open it, check page count). If you can't visually verify, say so.
