Skip to content

Writing

Things I wrote

And what the fix actually was. Mostly Laravel, TypeScript and the tooling around them.

A Node script file being resolved as an ES module or CommonJS depending on its extension and the nearest package.json

Featured

Should a small Node script be .js or .mjs?

The rule for picking .js or .mjs when you write a quick Node script, what actually decides the module system, and why require(esm) landing in every supported Node changed the answer in 2026.

9 Sep 2026 · Javascript · 8 min read

Is markdown dead? Why I keep asking AI for HTML notes instead

Markdown isn't dead, but for AI notes I read once I now ask for a self-contained HTML file that opens in the browser already styled. Here's when I switch, and when I stay on markdown.

8 Jun 2026 · HTML · 6 min read

CSS can now animate between pages

Cross-document view transitions let plain links fade, slide, and morph between separate HTML pages, no JavaScript framework needed. Here is how to set them up and what to watch for before you ship.

6 Jun 2026 · CSS · 7 min read

Where do we actually use data structures and algorithms?

Forget the interview trivia. Here's where data structures and algorithms show up in real projects, with code, real apps, and bugs they fixed for me.

4 Jun 2026 · DSA/CS · 6 min read

Rust-inspired TypeScript: 4 habits that kill whole classes of bugs

Four habits borrowed from Rust that make TypeScript stricter and safer: discriminated unions, result types, boundary validation, and local mutations. With code.

2 Jun 2026 · Typescript · 7 min read

AI raises the floor for weak engineers. Then it comes for their job.

AI coding tools turned net-negative engineers into thin wrappers around Claude. As a lead reviewing those PRs, here's what actually changed and who's at risk.

1 Jun 2026 · AI · 5 min read

Should You Build a Desktop App with Godot? An Honest Take

Is a game engine a sane choice for a desktop app? I dug into Godot for non-game tools — where it wins, where it bites, and the projects that prove it works.

30 May 2026 · godot · 6 min read

How to Fix Any Bug: The Repro-First Method (When Claude Can't)

Claude keeps declaring bugs 'fixed' that aren't. Here's the repro-first debugging method I use to actually nail root causes — works for AI and humans.

28 May 2026 · Claude · 7 min read

Claude Cowork vs OpenClaw vs Hermes Agent: Honest Pick (2026)

I ran the same workflow through Claude Cowork, OpenClaw, and Hermes Agent. One of them is worth your money. The other two might be worth more, depending on what you actually want.

28 May 2026 · AI · 7 min read

Runtime UI Libraries Are Tech Debt You Can't See

Every runtime UI package you install is a future refactor with a delivery date you don't control. Here's the hidden bill — and how laralcn-UI's copy-and-own model kills it for Laravel.

28 May 2026 · Laravel · 6 min read

If a Component System Can't Build Its Own Docs, It Can't Build Your App

The dogfooding test for any UI library: I built LaralCN-UI's docs with LaralCN-UI. Here's why that matters for your Laravel app.

25 May 2026 · Laravel · 6 min read

Video.js v10 Beta: 88% Smaller, Fully Composable

Video.js v10 is a ground-up rewrite — 88% smaller bundles, composable components, first-class React, and built for AI-assisted dev. Here's what changed.

24 May 2026 · Frontend · 5 min read

Expo SDK 56: The Update That Finally Makes Builds Fast

Expo SDK 56 ships React Native 0.85, a 5x faster CLI, stable Expo UI, and Hermes v1 by default. Here's what actually matters for your app.

22 May 2026 · React · 5 min read

One email when the next one lands

No sequence, no course, no webinar. Leave from any email.