Full-stack software developer specializing in custom web applications, Node.js development, and database design. Experienced metal fabricator and welder.
Latest Blog Posts
-
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.