đź‘‹ Hi, I’m Leen



A software engineer who likes building robust infra and products and understanding why/how things break.

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

RadKits Beta Is Live

RadKits beta is officially live. My co-founder posted about it on LinkedIn yesterday. We’re ready for radiologists beyond our alpha testers to try RadKits—a report assistant that cuts down daily toil with high quality templates, dictation support, and a curated knowledge base. I’m nervous that LinkedIn won’t be enough to reach the right radiologists. My co-founder has the network, but I’m wondering if we need to be doing more. I’m excited to see if beta users adopt it the way our alpha testers did—if it becomes a standard part of their workflow, something they’d feel pain without. That’s the real validation. ...

February 8, 2026 Â· 1 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

PostHog Surveys Can't Target by Relative Date (And the Workaround)

Update (January 18, 2026): Well, this is embarrassing. After publishing this post and opening a GitHub issue, I discovered the feature DOES exist—I just completely missed it. Where it actually is: When setting up survey targeting with a date property, use the dropdown to change the operator to “before” or “after” then click “Select a value” and you’ll see relative date options. PostHog Survey relative datetime It’s right there in the dropdown. I have no excuse except that I was tunnel-visioned on looking for it elsewhere. ...

January 15, 2026 Â· 3 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

Positioning RadKits: The Landing Page Mistake My Co-founder Caught

I spent 4 hours rewriting RadKits’ landing page before my co-founder’s conference. My first draft positioned us as a workflow optimization tool that would “standardize” radiology templates and “increase quality”—language that would have alienated our actual users. My co-founder (who is a radiologist): “This sounds like you’re taking away their autonomy and disparaging their work. They’ll hate that.” He was right. The Two-Audience Problem We’re targeting two groups: individual radiologists and radiology department heads. ...

October 31, 2025 Â· 3 min Â· Leen

Building RadKits: Healthcare SaaS for Radiologists

My cousin is a radiologist. He built a quick prototype to automate his radiology reports. His colleagues wanted it. That’s when he recruited me: “Can you help turn this into a real product?” This is RadKits. How RadKits Started Raid had a problem: writing high-quality radiology reports is detailed, time-consuming work. The templates exist, but they take forever to modify for each case. I said yes because this was different from my previous failed SaaS attempts. This time: ...

October 24, 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

Building a Local LLM Playground with OpenWebUI and LiteLLM

I had multiple frustrations with ChatGPT and Claude: No good way to save and reuse prompts $20/month per service for occasional use Chat history scattered across services No way to compare model responses side-by-side No single pain was unbearable, but together they pushed me to build my own setup. Why I Care About This I experiment with different models—open source and proprietary—to understand their strengths and weaknesses. But this experimentation has a high mental and monetary cost. ...

September 21, 2025 Â· 4 min Â· Leen

Securing Backend Servers

I’ve been learning how to use React and Next.js to build a frontend for one of my projects. I’m using Flask to build the API backend server that will provide the main functionality. I want to limit abuse of the API server and came across several options. Options CORS CORS is a mechanism that’s enforced by the browser to limit access to a server’s resources. However, since it’s only a browser enforced mechanism, a user can replay the request using another method like curl. ...

July 28, 2024 Â· 3 min Â· Leen