109 lines
5.4 KiB
Markdown
109 lines
5.4 KiB
Markdown
# 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.
|