-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
162 lines (131 loc) · 7.67 KB
/
Copy pathindex.html
File metadata and controls
162 lines (131 loc) · 7.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Karl Sousa, ML Engineer</title>
<meta name="description" content="Machine learning, production ML systems, data science, and AI engineering with LLMs and agentic workflows.">
<meta property="og:title" content="Karl Sousa, ML Engineer">
<meta property="og:description" content="Machine learning, production ML systems, data science, and AI engineering with LLMs and agentic workflows.">
<meta property="og:image" content="https://karlvmsousa.github.io/assets/images/karlvmsousa_profile.JPG">
<meta property="og:type" content="website">
<meta property="og:url" content="https://karlvmsousa.github.io/">
<link rel="icon" type="image/jpeg" href="assets/images/karlvmsousa_profile.JPG">
<link rel="apple-touch-icon" href="assets/images/karlvmsousa_profile.JPG">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;1,9..144,400&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
<div class="lang-switch" role="group" aria-label="Language">
<button class="lang-btn active" data-lang="en" aria-pressed="true" aria-label="English">
<svg class="flag-icon" viewBox="0 0 20 14" aria-hidden="true">
<rect width="20" height="14" fill="#00247D"/>
<path d="M0,0 L20,14 M20,0 L0,14" stroke="#FFFFFF" stroke-width="2.4"/>
<path d="M0,0 L20,14 M20,0 L0,14" stroke="#CF142B" stroke-width="1.2"/>
<path d="M10,0 V14 M0,7 H20" stroke="#FFFFFF" stroke-width="4.6"/>
<path d="M10,0 V14 M0,7 H20" stroke="#CF142B" stroke-width="2.4"/>
</svg>
</button>
<button class="lang-btn" data-lang="pt" aria-pressed="false" aria-label="Português (Brasil)">
<svg class="flag-icon" viewBox="0 0 20 14" aria-hidden="true">
<rect width="20" height="14" fill="#009B3A"/>
<polygon points="10,1.5 18.5,7 10,12.5 1.5,7" fill="#FEDF00"/>
<circle cx="10" cy="7" r="3.2" fill="#002776"/>
</svg>
</button>
</div>
<main class="layout">
<aside class="rail">
<img class="avatar" src="assets/images/karlvmsousa_profile.JPG" alt="Illustrated portrait of Karl Sousa">
<h1 class="name">Karl Sousa</h1>
<p class="role" data-i18n="role">Machine Learning Engineer</p>
<hr class="rule">
<p class="location" data-i18n="location">📍 Crato, Brazil · GMT-3</p>
<nav class="links">
<a href="https://github.com/karlvmsousa" target="_blank" rel="noopener">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.385-1.333-1.754-1.333-1.754-1.089-.745.083-.729.083-.729 1.205.084 1.84 1.236 1.84 1.236 1.07 1.835 2.807 1.305 3.492.998.108-.776.42-1.305.762-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
GitHub<span class="arrow">↗</span>
</a>
<a href="http://linkedin.com/in/karlvmsousa" target="_blank" rel="noopener">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 1 1 0-4.124 2.062 2.062 0 0 1 0 4.124zM7.114 20.452H3.558V9h3.556v11.452z"/></svg>
LinkedIn<span class="arrow">↗</span>
</a>
<a href="mailto:karlvandesman@gmail.com">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M2 6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6zm2 .217V18h16V6.217l-8 5.333-8-5.333zM4.5 5l7.5 5 7.5-5h-15z"/></svg>
karlvandesman@gmail.com
</a>
</nav>
</aside>
<div class="content">
<p class="eyebrow" aria-hidden="false">
<span id="typed"></span><span class="cursor">▏</span>
</p>
<p class="bio" data-i18n="bio">Curious about most things. It's taken me to a lot of trails, some code, and a few hard problems.</p>
<p class="section-label" data-i18n="currentlyLabel">Currently →</p>
<p class="now" data-i18n="now">At PicPay, building the monitoring infrastructure that keeps credit models trustworthy. Lately, scaling it up with LLMs and agentic pipelines.</p>
<p class="section-label" data-i18n="toolkitLabel">The toolkit behind it →</p>
<div class="skills-groups">
<p class="skills"><span class="skills-label" data-i18n="dataMlLabel">Data & ML</span>: Python · SQL · PySpark · Pandas · scikit-learn · XGBoost · LightGBM</p>
<p class="skills"><span class="skills-label" data-i18n="productionMlLabel">Production ML</span>: MLflow · Model Monitoring · Data Quality · Feature Monitoring</p>
<p class="skills"><span class="skills-label" data-i18n="platformsLabel">Platforms</span>: Databricks · AWS · Delta Lake · Unity Catalog</p>
<p class="skills"><span class="skills-label" data-i18n="aiEngineeringLabel">AI Engineering</span>: LLMs · Agentic Workflows · Tool Use · Structured Outputs</p>
</div>
<p class="section-label" data-i18n="educationLabel">Education →</p>
<div class="credential-group">
<p class="credential">
<span data-i18n="mscCredential">M.Sc. in Computer Science — CIn, UFPE</span> ·
<a href="assets/docs/karlvmsousa_cinufpe_thesis.pdf" target="_blank" rel="noopener"><span data-i18n="readThesis">read the thesis</span></a>
</p>
<p class="credential" data-i18n="bscCredential">B.Sc. in Electronics Engineering — UFPE</p>
</div>
<p class="section-label" data-i18n="certificationsLabel">Certifications →</p>
<div class="credential-group">
<p class="credential">Databricks Certified ML Professional</p>
<p class="credential">AWS Certified Cloud Practitioner</p>
</div>
</div>
</main>
<script src="assets/js/translations.js"></script>
<script>
const text = "$ whoami";
const el = document.getElementById('typed');
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (prefersReduced) {
el.textContent = text;
} else {
let i = 0;
function type() {
if (i <= text.length) {
el.textContent = text.slice(0, i);
i++;
setTimeout(type, 55);
}
}
type();
}
const langButtons = document.querySelectorAll('.lang-btn');
const translated = document.querySelectorAll('[data-i18n]');
function applyLang(lang) {
document.documentElement.lang = lang === 'pt' ? 'pt-BR' : 'en';
translated.forEach(node => {
const key = node.dataset.i18n;
if (translations[key]) {
node.textContent = translations[key][lang];
}
});
langButtons.forEach(btn => {
const active = btn.dataset.lang === lang;
btn.classList.toggle('active', active);
btn.setAttribute('aria-pressed', active);
});
localStorage.setItem('lang', lang);
}
langButtons.forEach(btn => {
btn.addEventListener('click', () => applyLang(btn.dataset.lang));
});
applyLang(localStorage.getItem('lang') || 'en');
</script>
</body>
</html>