Writing on data & AI engineering
Build logs and deep dives on the work itself — data pipelines, agentic systems, retrieval-augmented generation, data lineage, and analytics engineering with SQL. Each one ties back to something I actually shipped. Have a topic in mind? Challenge me to write it.
Sessionization with SQL window functions
A stream of events isn't sessions until you decide where one visit ends and the next begins. You can do that in three window functions — no self-joins, no Python — and the whole thing hinges on the same frame-clause detail that trips people up on running totals.
dlt REST API sources: declarative pagination without the glue
The schema glue is gone, but most teams still hand-write the other half of every API pipeline — pagination loops, auth headers, and "what changed since last time." dlt's REST API source turns all of it into configuration. Here's the declarative shape, end to end.
How I build AI-native
Building AI-native isn't about writing code faster. It's about thinking in systems and moving your engineering effort to where it survives contact with production. Here's the method, and the work that proves it.
Building agentic workflows with Claude Code
An LLM can do almost anything once. Getting it to do the right thing every time is an engineering problem. Here's the architecture I use, drawn from a skill that audits websites for GDPR end to end.
Data pipelines with dlt and DuckDB
Most pipeline code is glue nobody wants to maintain. dlt and DuckDB let you skip the glue and keep the parts that matter — schema inference, incremental loading, and contracts that fail loudly instead of silently corrupting your warehouse.
Column-level data lineage in practice
Table-level lineage tells you two models are connected. Column-level lineage tells you that changing one field breaks exactly these three downstream columns and nothing else. That precision is the difference between a confident change and a prayer.
Designing a RAG and embeddings backend
RAG demos are easy and RAG in production is hard, and the reason is always the same: retrieval, not generation, is the bottleneck. Here's how I designed the embeddings backend for a multi-agent system where the retrieval layer is the difference between agents that remember and agents that hallucinate.
SQL window functions: a practical guide
Window functions are the single highest-leverage SQL feature for analytics work, and the frame clause is the part everyone skips — right up until their running total is silently wrong. Here's the whole thing, practically.
Glasshouse: Audit Any Website for GDPR Violations in 90 Seconds (and File a DPA Complaint in Two More)
Open-sourcing the privacy auditor I used to scan 10 popular websites (all 10 failed) — plus the DPA complaint builder that turns a scan into a ready-to-file dossier.
Self-Contained HTML Artifacts: A Portfolio Pattern That Doesn't Rot
Eight self-contained HTML artifacts. A meta-tag protocol. 93 lines of TypeScript. The static-portfolio pattern that aged better than any framework I've shipped.
Pre-Consent Tracking in 2026: How It Works, Why Regulators Are Cracking Down, and How to Build a Site That Actually Waits
I scanned 10 popular consumer sites and timed what happens in the first few hundred milliseconds of each page load. Every single one fired non-essential trackers before the consent banner appeared. Why "we use Consent Mode v2" is not a defense, what the law actually says, and what a site that genuinely waits for consent looks like in code.
Cookie Banner Dark Patterns in 2026: How They Work, Why Regulators Are Cracking Down, and How to Build Symmetric Consent
I scanned 10 popular consumer sites for dark patterns. All 10 failed at least one EDPB criterion; half had a reject path that did not actually delete tracking cookies. The CSS, the GDPR violations, and what symmetric consent costs.
Browser Fingerprinting in 2026: How It Works, Why Regulators Are Cracking Down, and How to Defend Against It
The tracking method that survives when cookies die. A technical guide to canvas, WebGL, AudioContext, and WebGPU fingerprinting — what GDPR and ePrivacy actually say, and what defenses hold up.
I Built an AI That Audits Websites for Privacy. Here's What It Found.
A data engineer who builds tracking infrastructure by day built an AI that audits everyone else's. 10 major websites scanned. Average score: 4.9 out of 10.
Building an AI Community Jukebox Overnight (and What Broke by Morning)
A backend engineer gets $50 in AI music credits and 12 hours to build a community jukebox. An honest account of vibe coding, human judgment, and the bet on crowd-funding.
Always Evolving
How to build on today's best without getting trapped by yesterday's patterns.
Systems, Not Scripts
Why composable multi-agent architectures beat one-shot prompts — and how to think in workflows instead of instructions.
Delegate & Verify
Why the loop matters more than the prompt — and how to build workflows you can actually trust.
Specialized Agents
Why every task deserves the right model — and why one-size-fits-all is already dead.
The Stack Behind This Blog
A walkthrough of the blog engine — and a living test of every MDX feature it supports.