Debugging My Family's Tailscale Exit Node (Part 2: Ethernet fixed it)

In Part 1 I left my family’s Windows PC with a dead Tailscale exit node and a plan. TL;DR - Using Ethernet fixed the issue, but I still don’t understand why. The fix The most important item on my Part 1 next-steps list was verify if the exit node works over Ethernet — because I’m the one using this exit node, and I was tired of being blocked. The issue is the PC wasn’t close to any router and there wasn’t a non-invasive way to extend an Ethernet cable to it. So, I had my family get a travel router that can connect to the WiFi network and use an Ethernet cable to plug it into the PC. This takes the USB WiFi dongle out of the internet path. ...

February 28, 2026 · 5 min · Leen

Debugging My Family's Tailscale Exit Node (Part 1: The Problem)

I set up Tailscale on my family’s Windows PC a few years ago. Even though I’m on a different continent, I’m still their primary tech support, and sometimes I need a local IP to access some services like government websites. Tailscale gave me: Secure RDP access to diagnose/fix issues remotely (Using Rustdesk through Tailscale) Exit node capability when I need to appear on their network It worked perfectly… until it suddenly stopped. ...

January 31, 2026 · 8 min · Leen

When the Deadline Made the Solution Better

We had to ship a feature in two weeks that relied on MySQL auto-increment behavior. Problem: our production database was MySQL 5, which handles auto-increment differently than MySQL 8 after a restart. The MySQL 8 migration was scheduled for two months out. We needed to ship now. The Situation We were building a resource allocation feature that tracked which resources were assigned to which entities. The code assumed MySQL 8 auto-increment behavior: when the database restarts, auto-increment picks the largest existing ID and continues from there. ...

November 15, 2025 · 3 min · Leen

PostHog Cloud ignores X-Forwarded-For

PostHog wasn’t tracking client IPs correctly behind my reverse proxy. Next.js logged the right IPs, Caddy sent the right headers, but PostHog’s dashboard showed everyone visiting from my VPS in Frankfurt. This broke geographic analysis and location-based feature flags. The Setup My application stack: Next.js application Caddy reverse proxy (handles SSL) PostHog Cloud for analytics The proxy setup is standard: Caddy receives requests, sets proper headers, passes them to Next.js. ...

October 22, 2025 · 4 min · Leen

Debugging ProxySQL Query Routing: Transaction Gotchas

Originally published April 2024. Substantially updated October 2025 with expanded analysis and debugging insights. I spent 3 days debugging why ProxySQL wasn’t redirecting queries to read replicas. I checked the configuration. I verified queries redirected when using the CLI. I confirmed auto-commit was enabled. I read the docs cover to cover. The problem? My test framework. The test setup created nested transactions with writes, which pinned everything—including my auto-commit query—to the primary DB. ProxySQL was working fine. My testing setup was broken. ...

April 30, 2024 · 5 min · Leen