Add content-level language filter, recheck command, expanded keywords

- isEnglishContent() fetches each job page and drops descriptions with ≥6 German or French indicator words; called for every new job in index.ts before writing to CSV
- New `bun recheck` command (recheck.ts) runs searches in raw mode, lists filtered-out jobs, and prints word-frequency suggestions for SOFTWARE_TITLE_RE
- Expanded KEYWORDS and SOFTWARE_TITLE_RE to cover ML/AI, system/applications engineer, director, informatics, and more title variants
- Added `raw` flag to fetchJobs() to bypass the software-role filter
- Add CLAUDE.md with project workflow docs; add CV files and city temp scripts
This commit is contained in:
2026-05-12 13:42:27 +02:00
parent ffe2b4467a
commit bcb6ae5ea3
19 changed files with 1201 additions and 14 deletions
+243
View File
@@ -0,0 +1,243 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Rafael Polo - CV</title>
<style>
@page {
size: 8.2681in 11.6929in;
margin: 0.5in;
}
body {
font-family: Liberation Sans, Carlito, Calibri, Georgia, sans-serif;
font-size: 11pt;
line-height: 1.3;
margin: 0;
padding: 0;
}
.container {
display: table;
width: 100%;
}
.left-col {
display: table-cell;
width: 65%;
padding-right: 0.2in;
vertical-align: top;
}
.right-col {
display: table-cell;
width: 35%;
vertical-align: top;
text-align: right;
}
.photo {
width: 2in;
height: auto;
border: 1px solid #ccc;
}
.title {
font-size: 24pt;
font-weight: bold;
margin-bottom: 0.05in;
}
.subtitle {
font-size: 12pt;
font-style: italic;
margin-bottom: 0.2in;
color: #444;
}
h3 {
font-size: 12pt;
font-weight: bold;
margin: 0.15in 0 0.08in 0;
text-transform: uppercase;
letter-spacing: 0.05in;
border-bottom: 1px solid #999;
padding-bottom: 0.03in;
}
.personal-table {
width: 100%;
border-collapse: collapse;
}
.personal-table td {
padding: 0.02in 0;
vertical-align: top;
}
.personal-table .label {
font-weight: bold;
width: 1.2in;
color: #333;
}
.personal-table .header {
font-weight: bold;
font-size: 12pt;
text-transform: uppercase;
letter-spacing: 0.05in;
padding-bottom: 0.05in;
}
.section-header {
font-weight: bold;
font-size: 11pt;
text-transform: uppercase;
letter-spacing: 0.03in;
margin-top: 0.15in;
color: #333;
}
ul {
margin: 0.05in 0;
padding-left: 0.15in;
}
li {
margin-bottom: 0.04in;
font-size: 10pt;
}
.job-title {
font-weight: bold;
}
.job-meta {
font-style: italic;
font-size: 10pt;
}
.job-company {
font-weight: bold;
}
.job-desc {
font-style: italic;
font-size: 10pt;
margin-left: 0.1in;
}
.edu-item {
font-size: 10pt;
margin-bottom: 0.03in;
}
.edu-school {
font-style: italic;
}
.skill-category {
font-weight: bold;
font-size: 10pt;
margin-top: 0.05in;
}
.skill-list {
font-size: 10pt;
margin-left: 0.1in;
}
.footer {
font-size: 9pt;
color: #666;
margin-top: 0.3in;
border-top: 1px solid #ccc;
padding-top: 0.1in;
}
</style>
</head>
<body>
<div class="container">
<div class="left-col">
<p class="title">Rafael Polo</p>
<p class="subtitle">Senior Software Engineer — Platform, Data & AI</p>
<table class="personal-table">
<tr>
<td class="header" colspan="2">Personal</td>
</tr>
<tr>
<td class="label">Address:</td>
<td>Basel, 4055, Switzerland</td>
</tr>
<tr>
<td class="label">Email:</td>
<td>rafael@extrapolo.com</td>
</tr>
<tr>
<td class="label">LinkedIn:</td>
<td>linkedin.com/in/rafaelpolo</td>
</tr>
<tr>
<td class="label">Web:</td>
<td>extrapolo.com</td>
</tr>
<tr>
<td class="label">Citizenship:</td>
<td>Portuguese (EU) · Brazilian — no work permit required</td>
</tr>
<tr>
<td class="label">Languages:</td>
<td>Fluent English · German B1 TELC (3 yrs Berlin + 3 yrs Basel) · EU citizen, immediately available</td>
</tr>
</table>
<h3>Formal Education</h3>
<ul>
<li><em><strong>Postgraduate in Data Science for Finance</strong></em> – 2021<br>
<span class="edu-school">NOVA IMS Information Management School, Lisbon</span></li>
<li><em><strong>Master in Information Systems</strong></em> – 2010–2012<br>
<span class="edu-school">Research Area: Knowledge Representation & Reasoning, PPGI/UNIRIO</span></li>
<li><em><strong>Bachelor in Computer Science</strong></em> – 2004–2009<br>
<span class="edu-school">Metodista Bennett, Rio de Janeiro</span></li>
<li>Thesis: Agile Systems Development for Web 2.0 with Ruby on Rails</li>
</ul>
<h3>Relevant Professional Experience</h3>
<ul>
<li><strong>Swisscom</strong> – <em>2024–2025</em> – <em>Zürich, Switzerland</em>
<p class="job-desc"><strong>DevOps Engineer</strong> developing platforms for Telecommunication Operations.</p></li>
<li><strong>EDGE Empower®</strong> – <em>2024–2025</em> – <em>Baar, Switzerland</em>
<p class="job-desc"><strong>Senior Technical Lead</strong> managing projects and external UX & Dev Teams for a SaaS Company.</p></li>
<li><strong>ExtraPolo — Independent Consulting</strong> – <em>2010–2022</em> – <em>Rio de Janeiro · Berlin · Athens · Lisbon</em>
<p class="job-desc">For more than 10 years, worked as an independent Software Developer and IT Consultant, developing dozens of Projects for public and private contractors in Brazil, Germany, Greece and Switzerland.</p></li>
<li><strong>Moedax Digital Services</strong> – <em>2018–2021</em> – <em>Lisbon and Rio de Janeiro</em>
<p class="job-desc"><strong>Founder & CTO</strong> – connected Brazilian CBDC with KYC processes and automation</p></li>
<li><strong>GFOSS.eu / Code + Create</strong> – <em>2017–2018</em> – <em>Athens, Greece</em>
<p class="job-desc"><strong>Web Programming Teacher</strong> – taught web programming to refugee and local youth</p></li>
<li><strong>Tactical Tech Collective</strong> – <em>2014–2016</em> – <em>Berlin, Germany</em>
<p class="job-desc"><strong>Full-Stack Web Architect</strong> on an NGO under the Exposing the Invisible Team.</p></li>
<li><strong>Trommsdorf + Drüner</strong> – <em>2013–2014</em> – <em>Berlin, Germany</em>
<p class="job-desc"><strong>Full-stack Engineer</strong> – Innovation Team developing Business Intelligence dashboards.</p></li>
<li><strong>Cortex Intelligence</strong> – <em>2007–2008</em> – <em>Rio de Janeiro, Brazil</em>
<p class="job-desc"><strong>Developer</strong> in the Competitive Intelligence and Data Mining Team.</p></li>
</ul>
<h3>Certifications</h3>
<ul>
<li>Swiss Federal Act on Data Protection (nFADP)</li>
<li>Gen AI Foundational Models — NLP & LLMs</li>
<li>AI Agents using RAG and LangChain</li>
</ul>
<h3>Relevant Tech Skills</h3>
<ul>
<li>System Analysis & Modeling with UML</li>
<li>Quick Proof-of-Concepts development, deploy and management.</li>
<li>Large Language Models, Gen AI, LangChain integration and Processes Automation</li>
<li>MVC System Architecture, Design Patterns & Object-Oriented Programming</li>
<li>Data Engineering, Data Science, Relational Databases & SQL</li>
<li>Experience with Blockchain, Smart Contracts and P2P systems</li>
<li>Distributing and Scaling Processes with Message Queues</li>
<li>Developing Web Crawlers & Bots for Data Mining & ETL</li>
<li>Linux Systems, VPS, DevOps, SSH & Deploy with Continuous Integration processes</li>
<li>Projects mostly developed in Python, Ruby on Rails, Django, Java</li>
<li>Full Stack Developer & Front-end Web Design with HTML, CSS and JavaScript frameworks</li>
<li>CI/CD, Docker, Kubernetes and GitHub workflows</li>
</ul>
<h3>Natural Languages</h3>
<ul>
<li>Native Brazilian Portuguese</li>
<li>Advanced Spoken Spanish</li>
<li>A2 level Greek – <em>3 years in Athens</em></li>
<li>B1 level German / TELC proof – <em>3 years in Berlin</em> and 3 in Switzerland</li>
<li>Fluent English – <em>13 years in between international teams</em></li>
</ul>
<div class="footer">
References available upon request · CV updated May 2026
</div>
</div>
<div class="right-col">
<!-- Photo placeholder - remove if not needed -->
</div>
</div>
</body>
</html>