The HTMX Audit: When Simplicity Isn’t Enough

The HTMX Audit I was recently asked to review a production web application built over 18 months if I have anything to save their soul. I specifically asked to audit a thriving internal web app started as a prototype in 2023 built by a team enamored with HTMX. This is a small-sized SaaS company focused on hospitality industry, a team of 4 developers with mostly backend-focused engineers, what posibly go wrong you ask? They ditched React, promised simplicity, and believed they’d found web nirvana. Spoiler: they didn’t—at least not at scale. ...

February 25, 2025 · 6 min · me

JavaScript Is Loose for a Reason — Should We Be Tightening It?

This is the third post of Building a Minimalist Task Manager series part 1 - Why TypeScript Might Be Too Much for Your Project part 2 - The TypeScript Trade-offs No One Talks About part 4 - TypeScript: Strong Types, Strong Opinions Imagine this, You’re at a jazz club, and the musicians are improvising, riffing off each other, creating something beautiful in the moment. Then someone walks in with sheet music and says, “Hold up, you need to follow these exact notes, in this exact order, or you’re doing it wrong.” ...

January 25, 2025 · 6 min · me

Why TypeScript Might Be Too Much for Your Project

This is the first post of Building a Minimalist Task Manager series part 2 - The TypeScript Trade-offs No One Talks About part 3 - JavaScript Is Loose for a Reason — Should We Be Tightening It? part 4 - TypeScript: Strong Types, Strong Opinions Imagine, You’re building a simple landing page for your friend’s pizza shop. Three pages, a contact form, maybe some smooth scrolling animations. But hey, you’ve been reading tech Twitter, and everyone is saying TypeScript is the future. “Real developers use TypeScript,” they say. “It prevents bugs!” they chant. ...

January 11, 2025 · 5 min · me

Stop Blaming JavaScript for Your CSS Incompetence

Unpopular Opinion Alert: Your UI doesn’t suck because JavaScript is hard. It sucks because you never bothered to learn CSS properly. Picture this: You’re building a simple layout, and things aren’t aligning quite right. Instead of figuring out why your flexbox isn’t working, you reach for JavaScript. “I’ll just calculate the height dynamically,” you tell yourself. “I’ll use getBoundingClientRect() to position this element.” Sound familiar? Yeah, I thought so. Here’s the thing: Flexbox isn’t a yoga pose. Learn it. ...

July 1, 2024 · 8 min · me

It's Not JavaScript, It's You: Developer Anti-Patterns and Performance

Unpopular Opinion: JavaScript isn’t slow. You are. We’ve all been there. Your app is sluggish, your users are complaining, and your first instinct is to scream into the void, “Dang it, JavaScript! You’re so slow!” Or Python. Or PHP. Or Ruby. Pick your poison. But more often than not, the language itself, especially a mature, highly optimized one like JavaScript (thanks, V8 engine!), isn’t the root cause of your performance woes. It’s usually a combination of developer anti-patterns. ...

June 15, 2024 · 5 min · me

NaN is a Number: JavaScript's Greatest Philosophical Crisis

There are moments in every developer’s life when JavaScript forces you to question the fundamental nature of reality. Today, we’re diving into one of the most existentially disturbing features of the language: the fact that NaN (literally “Not a Number”) is, according to JavaScript, actually a number. console.log(typeof NaN); // "number" Let that sink in for a moment. The thing that is explicitly named “Not a Number” is classified as a number. It’s like JavaScript is gaslighting us at the language level. ...

April 12, 2024 · 7 min · me

JavaScript Type Coercion Madness: When Empty Arrays and Objects Drive You Crazy

Picture this: You’re debugging some JavaScript code at 2 AM, your coffee has gone cold, and you stumble upon something that makes you question everything you thought you knew about programming. You type [] + [] into your browser console, expecting… well, honestly, you’re not sure what to expect. But when you see an empty string pop up, followed by [] + {} returning "[object Object]", you start wondering if JavaScript is just trolling you at this point. ...

March 19, 2024 · 4 min · me