Files
linkme/tasks/to-update.md
T

5.4 KiB
Raw Blame History

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.