5.4 KiB
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:
-
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 onSlack,UX,UML,MVC. -
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. -
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.md2024, 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— dropJava(own scraper filters Java roles viaJAVA_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 tocv/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-accurateimplies the others aren't)rafapolo/job/cv/— 14 files; keep the canonical pair, move the rest into the existingold/
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:13is 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.