Blog
Backend, data, applied AI, homelab and whatever else I happen to be breaking.
Intrusion detection in kube containers: uid invariants and kernel auditing
User namespaces left the Pi with a rule that is easy to check: every high uid belongs to a pod. How to check it without root, what an alert reveals about the compromised component, what it doesn't reveal about the attacker, and where auditd comes in.
From RBAC to AppArmor: six phases to harden k3s on a Raspberry Pi
How I took cluster-wide access away from my CI using only what Kubernetes and k3s already ship: RBAC, builds without the host socket, Pod Security, NetworkPolicy, user namespaces and AppArmor. For each phase: the problem, the concept, what changed and how to check it.
My Site Went Down, and It Was My Neighbours' Fault
It looked like Tailscale. Then it looked like the SD card. Six hours later the culprit was a crowded 2.4 GHz channel full of neighbours' routers — and an access point still speaking 802.11b.
Behind Intercept Brasil's donation ask: hypotheses on cache, edge, and origin
A sponsored donation ask from Intercept Brasil, asking for funds to shore up their security, became the excuse to think out loud about why security you don't invest in early ends up becoming a company's biggest budget item at its most critical moment — and what can actually be done about it, at the edge and at the origin.
Split to double: what I learned bringing two solutions to a hackathon
The bet of splitting a four-person team into two to tackle two haCARthon challenges at once — and what came out of it besides the ranking.
From raw electoral files to a dimensional model: building a data pipeline for Brazil's 2026 elections
The technical build behind the 2026 election coverage: an event-driven pipeline, a staging table with a schema guard, and a dimensional model drawn from three election cycles of reverse-engineering.
I gave Claude 12,732 memories. Here's what it noticed.
An autopsy of my MemPalace after months of use — what the extractor classified, what the knowledge graph revealed, and what I learned looking at the system from the outside.
The memory stack under the AI workflow: CLAUDE.md, MemPalace, and a knowledge graph
A look at the three-layer memory architecture I built to give AI persistent, structured context across sessions — and how each layer earns its place.
Three elections, three encounters with Brazil's electoral data — and the third time, it was mine to lead
From a junior dev drowning in undocumented CSV files in 2019, to watching a six-figure third-party system fail on election night in 2024, to leading the build in 2026. The story behind the system.
Using AI and soccer match data to build my own commentator
Building the context layer between raw match events and a language model — what the AI got right, where it fell short, and why the pipeline matters more than the prompt.
Building for the World Cup: real-time fan narration and automated editorial
How I built an automated editorial product on top of an 8-year-old real-time narration system — and what the World Cup revealed about both.
The AI workflow nobody shows you: structure, memory, and real trade-offs
How I use AI in day-to-day development — project structure, persistent memory, prompts — and what I still want to build with integrated agents.
From GitLab to Gitea: how my homelab CI/CD went from 3.4 GB to 100 MB
The journey of setting up self-hosted CI/CD on a Raspberry Pi 4B — through GitHub Actions ARC, GitLab CE, and landing on Gitea with act_runner, nerdctl, and buildkitd.
Traefik as ingress on k3s: from local routing to public access without cert-manager
How ingress works on k3s in practice, why I chose IngressRoute over standard Ingress, and how Cloudflare Tunnel replaces cert-manager on a resource-constrained homelab.
Gitea on Raspberry Pi: the story of how GitLab took down my homelab
How I built a complete self-hosted CI/CD environment on a Raspberry Pi 4B — after learning the hard way what fits on an ARM with 4GB of RAM.
Who am I?
From writing C code on paper to distributed systems in production — how I got here.
No posts match these filters.