A deep dive into Blue Earth, an experiment that plots positive climate news stories on a rotating 3D globe using the HTML in Canvas API, Three.js, and a build-time pipeline powered by Claude and Geoapify.
What started as a question about a free macOS image viewer turned into a deep dive into pan and zoom math, pointer events, WheelEvent quirks, and a TypeScript web component. Here is everything we learned along the way.
How the new Set methods difference() and symmetricDifference() can replace verbose Set comparisons with clear, expressive code.
How combining JSDoc annotations with Object.freeze gives you literal type inference, runtime immutability, and better IDE support for JavaScript constant objects.
A deep dive into the JavaScript concepts behind mocking HTMLImageElement behaviour in Vitest, including Object.defineProperty, Object.getOwnPropertyDescriptor, prototype manipulation, and WeakMap for per-instance state tracking.
Learn how to safely select DOM elements with special characters in their IDs or classes using CSS.escape() to avoid selector parsing errors.
Learn how to programmatically require the presence of a modifier key to enable scroll wheel zoom support in Leaflet maps.
How to use TypeScript’s triple-slash reference directives to load type definitions when type-checking JavaScript with JSDoc.
Combining Zod's runtime validation with JSDoc's type annotations to achieve type safety in JavaScript without TypeScript.
What I learned reviewing AI-generated JavaScript: real-world issues, code review tips, and ways to ensure robust, production-ready code.
While this post does not by any means aim to cover all the amazing things you can do with Intl.NumberFormat, I do cover two very common use cases you may have faced when formatting numbers in JavaScript.
Using the Nodejs EventEmitter with GitHub webhooks
How to cancel asynchronous operations with the AbortController API.
An introduction to Flexsearch and its tokenizers through writing and interpreting tests.
When running your Playwright tests, how do you load a different set of data based on the current execution environment?
There are a couple of steps to take when switching from the older babel-eslint to the newer @babel-eslint. No worries, I'll show you how.
How do you style the cursor in CodeMirror 5? Also, how can you do this for light and dark themes? Let's take a look.
Could it be that the == operator in JavaScript had a bad rap and it’s time to reconsider it?
Some thoughts on the current state and challenges with regards to building a PWA in 2021.