Journal
Notes on AI, engineering, and integrations.
Building openpreflight(5)
Five notes on a small GitHub Checks provider. One Go binary, one SQLite file, no CI platform.
Notes(14)
The October 2026 Node.js bugs, and how to patch them yourself
22.23.4, 24.22.1, and 26.12.1 are the fixed releases. Node 20 and the other dead lines get nothing. How to find the version you really run and pin the fix.
Read more →Building My Home Server: a Ryzen 5600GT Build in a Lian Li A3
How I built a quiet, low-power home server around a Ryzen 5 5600GT and 32GB of RAM in a Lian Li A3-mATX case, and what it runs: SteamOS and Ollama.
Read more →Who are you?
Someone asked me a question I thought I could answer in a sentence. I gave them my job title instead.
Read more →Why `git pull` Says "Repository Not Found" (When the Repo Exists)
On a machine with more than one GitHub account, "Repository not found" usually means the wrong identity is cached—not a bad remote URL.
Read more →AI as a Tool, Not a Substitute for Thought
AI can amplify judgment or replace it. The difference is intentionality—which skills we delegate, which we strengthen, and how we spend the time we save.
Read more →My SonarQube Scans Were Crawling; Turns Out Docker on WSL 2 Only Had 1 CPU and 1 GB of RAM
A short, practical walkthrough of diagnosing slow SonarQube scans on Docker Desktop for Windows, fixing it with a .wslconfig file, and validating the change against Microsoft's official spec.
Read more →I Got Tired of Manual Code Reviews So I Built a Free Automated Security Pipeline
Pre-commit hooks, GitHub Actions, and SonarQube—three free layers that catch secrets, CVEs, and Django footguns without a sales call.
Read more →The "Lazy" Developer's Guide to Twilio Auto-Replies (No Server Required)
Send default SMS replies with Twilio TwiML Bins—no webhook server, no deploy. Welcome messages and acknowledgements straight from the Console.
Read more →How to Fix the NVM for Windows `NVM_SYMLINK` Activation Error
NVM_SYMLINK fails when C:\\Program Files\\nodejs is a real folder, not a symlink. Here is a guaranteed step-by-step fix for the activation error.
Read more →From MySQL to PostgreSQL: My Django Migration Story (and a Tool to Help)
How I moved a Django app from MySQL to PostgreSQL safely—and the open-source toolkit I built with dry-run, connection checks, and type mapping.
Read more →Leaving Breadcrumbs for Your AI: The Hansel and Gretel Approach
Instead of giant terminal prompts, leave @implement and @docs comment directives in your code—breadcrumbs your AI can follow right where the work lives.
Read more →The Cleanest Way to Handle Unused Variables in TypeScript
Don't disable the linter or ignore yellow squiggles. The humble underscore `_` signals intentional unused vars—and keeps `@typescript-eslint/no-unused-vars` earning its keep.
Read more →My Pinch of Salt: Did AI and LLMs Kill the "First-Time Correct" Engineer?
We used to plan before we typed. Now we prompt, push, and patch. Are we trading craftsmanship for the fleeting high of a green pipeline?
Read more →Let's Be Real: It's Time to Ditch `any` for `unknown` in TypeScript
We've all reached for `any` as a quick fix, but it comes at a steep cost. Discover why `unknown` is the safer, smarter alternative that will save you from future headaches.
Read more →