Storm Cloudy
Notes on software engineering, debugging, and shipping systems that survive real users. About me →
Sending email from alias via Gmail blog
Send mail from a forwarding alias address through your normal Gmail account using SMTP and a Google App Password — works on personal Gmail and Google Workspace. More »Git Branch Exists on Remote But Won't Show Locally blog
How to diagnose and fix git branches that appear in ls-remote but not in git branch -r — covering stale remote-tracking refs, scoped fetch refspecs, and the one-line config fix. More »What Is MCP and Why Should Developers Care? blog
A plain-language explainer of Model Context Protocol — what it is, how hosts, servers and clients work together, and why the open standard matters for developers building with AI. More »Fixing Godot MCP in Cursor on WSL blog
Three specific bugs that prevent godot-mcp from connecting in Cursor on WSL — tilde expansion in JSON, comments breaking JSON parsing, and the real culprit: Cursor is a Windows app that can't see your WSL Node binary. More »Multi-Model LLM Orchestration with OpenRouter blog
How to route AI requests across multiple LLM providers using OpenRouter — covering model selection by task type, streaming, fallback handling, and cost tracking with a single API. More »Adding Semantic Search to Your Postgres App with pgvector blog
How to add vector similarity search to an existing Postgres app using pgvector — covering extension setup, embedding generation, cosine similarity queries, and HNSW indexing for performance. More »Building a Context-Aware AI Chat Without a Vector Database blog
How to ground an AI chat app in your own data using system prompt assembly — a lightweight alternative to full RAG that works well when your data is structured and modest in size. More »How I Built an AI Document Ingestion Pipeline blog
A walkthrough of building Symport — an app that photographs any document and extracts structured JSON using GPT-4o vision. Covers prompt engineering, image preprocessing, graceful fallback, and the Prisma + pgvector data model. More »Turning Manual Ops Into a 10-Minute Task blog
How I used PHP scripting and a temporary MySQL database to turn a 2-week manual data update process into a 10-minute automated pipeline — with a dashboard for human review before pushing to production. More »Multi-Select in Visual Studio Code blog
How VS Code's multi-cursor feature finally pulled me away from Sublime Text after years of loyalty — plus the Mac shortcuts you actually need. More »