Files
linkme/tasks/to-update.md
T

109 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CV & application materials — to update
Audit date: 2026-07-27. Scope: `linkme/cv/`, `linkme/motivation*.md`, `rafapolo/` portfolio + `rafapolo/job/`.
## Why
~270 applications over 18 months (≈15/month, mostly LinkedIn Easy Apply) with no offers.
Volume was never the problem. Three causes found:
1. **The CV omits the entire target stack.** Keyword audit of `Rafael_Polo_CV_EN_2026.pdf`:
| Keyword | Count |
|---|---|
| TypeScript | 0 |
| React | 0 |
| Rails | 0 |
| PostgreSQL | 0 |
| LLM / RAG / LangChain | 0 |
| Rodado | 0 |
| Staff / Principal | 0 |
| `98%` (best metric) | 0 |
Skills line says "Javascript Frameworks" instead of `React` / `TypeScript` — no ATS or
recruiter searches that string. Space is spent on `Slack`, `UX`, `UML`, `MVC`.
2. **The CV pitches a security-ops job.** Profile paragraph leads with *"operating production
infrastructure … security patching, vulnerability remediation, and system hardening under
strict SLAs"* — likely written for `job/applications/helvetia/` (Cyber Hire). Every
Staff/Principal software, AI and platform application since has carried that framing.
Tell: the HCLTech *Application Support Engineer* posting is a good match for this CV.
3. **Two different CVs are in circulation, with conflicting employment dates.**
| Source | Swisscom start | Date |
|---|---|---|
| `rafapolo/rafael-polo-cv.pdf` (served at extrapolo.com) | 02/2024 | May 13 |
| `rafapolo/job/cv/Rafael_Polo_CV_EN_2026.pdf` (what gets sent) | 03/2024 | Jul 24 |
| `linkme/cv/polo.md` | 2024, no month | — |
Secondary: LinkedIn Easy Apply is the lowest-conversion channel for Staff/Principal roles
(300–1000 applicants/posting; recruiters review the first ~20–30). Swiss senior roles fill
via company portals, recruiters and referrals.
---
## Priority 1 — the CV
- [ ] **new** `rafapolo/job/cv/cv-source.md` — single canonical source; both PDF and HTML
generated from it. No source of truth today, which is how three versions drifted.
- [ ] `rafapolo/job/cv/Rafael_Polo_CV_EN_2026.pdf` — rebuild:
- [ ] New profile line: platform / data / AI engineering. Drop the security-ops framing.
- [ ] Skills as literal searchable strings:
`Python · TypeScript · React · Node.js · Ruby on Rails · PostgreSQL · Docker ·
Kubernetes · AWS · Terraform · CI/CD · LLM · RAG · LangChain`
- [ ] Remove `Slack`, `UX`, `Modeling with UML`, `MVC system architecture`,
`Javascript Frameworks`
- [ ] Restore metrics: 98% processing reduction, CI/CD 14 → 4 min
- [ ] Add **Rodado** (~730 datasets, 1TB Parquet, DuckDB, NL-to-SQL over MCP) — currently
absent. Keep HelvetiScan (already appears 3×).
- [ ] `Swiss B-Visa` → `Swiss B permit` (correct term: *Aufenthaltsbewilligung B*)
- [ ] Compress ExtraPolo `01/2008–01/2023` — a 15-yr freelance block overlapping two
employed roles reads as unverifiable to Swiss HR. One line: "Independent consulting
(40+ projects)".
- [ ] Keep single-column layout so ATS text extraction stays clean (verify with
`pdftotext file.pdf -` — name and contact block currently land mid-document).
- [ ] `rafapolo/rafael-polo-cv.pdf` — replace with a copy of the rebuilt PDF. Currently a
stale May 13 file with a different Swisscom start date.
- [ ] `rafapolo/curriculum.html` — same profile/skills/keyword fixes so the web CV matches
the PDF. Header/`<title>` should carry positioning, not just "CV".
## Priority 2 — dedupe
- [ ] `linkme/cv/polo.md`
- [ ] `:13` — `"no work permit required"` is wrong (CH is not in the EU) →
`Swiss B permit · Portuguese (EU) citizen`
- [ ] `:118` — drop `Java` (own scraper filters Java roles via `JAVA_TITLE_RE`)
- [ ] Add Rodado / HelvetiScan and the metrics; sync dates with canonical CV.
This file drives job ranking per `CLAUDE.md`, so it must match reality.
- [ ] `linkme/cv/` — archive to `cv/old/` or delete: `polo-cv.html`,
`polo-cv-accurate.html`, `polo-new-cv.{html,odt,pdf}`,
`rafael-polo-cv-2026-senior.{odt,pdf}`, `rafael-polo-cv.pdf`
(a file named `-accurate` implies the others aren't)
- [ ] `rafapolo/job/cv/` — 14 files; keep the canonical pair, move the rest into the
existing `old/`
## Priority 3 — letters & tracking
- [ ] `linkme/motivation1.md` (Roche) — delete `:15`, the *"While I have not worked directly
inside clinical development…"* paragraph. Never volunteer a disqualification.
Trim ~800 → ~250 words.
- [ ] `linkme/motivation-adobe.md` — strongest of the two; trim to ~250 words. Permit line
at `:13` is already correct — use as the template for all others.
- [ ] **new** `linkme/results/applications.csv` —
`date,company,role,channel,url,stage,outcome`.
No record exists of what happened to any of the ~270 applications, so there is no way
to tell whether the failure is at screening, phone screen, or onsite.
## Not changing
Scraper is fine — `fetch.ts`, filter pipeline, `index.ts` all working. No changes needed.
## Channel shift (behavioural, not a file)
- [ ] Invert the mix: ~70% company career portals + recruiter/referral, ~30% Easy Apply.
- [ ] Apply direct (not via LinkedIn) for the live Basel/Zürich targets: Adobe, Roche,
Exeon, Crypto Finance, Swiss Post Cybersecurity.
- [ ] Reconsider German-first corporates (Coop, Valora, Helvetia) while at B1 — screening
failure precedes any engineering assessment.