Tech blog posts
5/6/2026 - 7/24/2026
-
Why Server-Rendered Templates Don’t Need a Build Step
Server-rendered templates compile just-in-time, with no separate build phase. Why EJS never needs a bundler, and when a build step still makes sense.
-
Next.js Hides Its Cache, Redis Doesn’t: The Observability Gap
Redis exposes real hit/miss metrics natively. Next.js’s caching layer doesn’t, for self-hosted deployments. Here’s what that observability gap actually costs.
-
Why React SSR Blocks Node’s Event Loop (SSR via Templating Doesn’t)
React’s SSR APIs run synchronous CPU work on Node’s single thread, from renderToString to RSC serialization. What actually blocks, and why templating doesn’t.
-
Why Alpine.js Replaced React for Content-Driven Sites
Alpine.js ships at roughly 7kB versus a typical React bundle near 130kB. The scoped case for Alpine.js on content sites, and when a framework still makes sense.
-
Next.js Memory Leak on Self-Hosted Search Routes: A Case Study
A production case study on Next.js memory growth from caching unbounded dynamic search routes, what changed in Next 15/16, and what actually fixed it.
-
Why Instagram, TikTok, Twitter, and Other Social Embeds Break on Next.js Route Changes
Social embeds silently break on Next.js client-side navigation, a documented bug with no built-in fix. Here’s the root cause and a working solution.
-
Alpine.js Highlighting and Completion for Neovim
Tree-sitter and legacy syntax highlighting for Alpine.js directives in Neovim, plus nvim-cmp completion and snippets across HTML, EJS, Blade, Twig, Liquid, and more.
-
EJS Template Support for Neovim
Tree-sitter syntax highlighting, LSP attachment, and LuaSnip snippets for EJS templates in Neovim. ejs.nvim wires up the embedded_template parser with language injection for accurate HTML and JavaScript colorization.
-
Two Ways to Build With AI: Runtime Dependency vs. Build Tool
“Built with AI” can mean two very different things. One results in software that depends on AI to run, with ongoing costs and unpredictable output. The other uses AI to build software that runs fine without it.
-
Mainframe: Headless WordPress Theme
WordPress theme built for headless setups. Full dashboard, full REST API, minimal public face. No plugins required.
-
Express Map: Visual Route and Middleware Navigation for VS Code
VS Code extension that provides visual route, middleware, and template navigation for Express.js apps. No running server required.
-
Alpine.js Tools: IntelliSense and Syntax Highlighting for VS Code
JavaScript syntax highlighting, workspace-aware IntelliSense, diagnostics with quick fixes, and Go to Definition for Alpine.js, across HTML, EJS, PHP, Twig, Nunjucks, Blade, Liquid, and Jinja2.