Counting Domains by ASN: A Failed Attempt, and a Thank-You I Owe

I wanted to use Claude as a coding partner to build a Certificate Transparency pipeline that would tell asn.ipinfo.app how many domains live behind every ASN. Eight generous cores from a generous host, several weeks of iteration, and one very humbling firehose later — here's what happened, and who deserves the thanks.

Why LibreNMS Mobile Apps Keep Disappearing

A week of trying to build a mobile LibreNMS client, and a finding about why the previous attempts haven't stuck around.

What's New on my.ipinfo.app

A full redesign, an adaptive multi-stream speed test with Cloudflare CDN measurement, and a cleaner reputation card.

ASN Lookup: Over a Decade of Running This Service

From manually curated lists to a PHP tool in 2015 to a full Node.js rewrite in 2026 — the story of asn.ipinfo.app, what changed, and where it's headed.

Fixing a Zscaler App Connector That Won't Boot

When a Zscaler App Connector VM fails to start because it can't load /var/log/ — how to boot into GParted, repair the XFS filesystem, and clear the bloated logs causing the problem.

Zero-Touch Kubernetes Deployments with GitLab CI and Keel

How I push code and have it running in Kubernetes two minutes later without touching kubectl — the GitLab CI + Docker registry + Keel pipeline.

T-Mobile Lost the Plot

Fifteen years of loyalty, a half-dozen frustrating support calls, and a company that forgot what made it great.

Building Three Websites in a Week

Three production websites shipped in one stretch — a personal blog, a real estate platform, and a cosmetologist portfolio. Here's the technical breakdown and a note on how I actually made the time.

Exposing Your Homelab Without Opening a Single Port

How Cloudflare Tunnel keeps my homelab secure, makes deploying new services fast, and means my public IP is never attached to anything I run.

Upgrading a Patroni PostgreSQL Cluster from 17 to 18

Everything that went wrong upgrading a 3-node Patroni HA cluster from PostgreSQL 17 to 18, and exactly how I fixed it.