Writing

August 26, 2023

Implementing a Simple Client-Side Cache With Promises

December 13, 2022

Making a HTML Table Keyboard Navigable

July 21, 2022

Overview of key TypeScript language features

April 16, 2022

TypeScript — Transforming a Union to Another Union

April 15, 2022

TypeScript — Deriving a Union Type From an Object

April 3, 2022

Adding a Performant, Flicker-Free Dark Mode to Next.js Apps

March 22, 2022

Managing Multi-branch Workflows With Git Worktrees

March 13, 2022

Notes on the Critical Rendering Path (CRP)

March 4, 2022

Template Literal Types in TypeScript

February 28, 2022

useReducerWithLocalStorage — Persisting Reducer State to Local Storage

February 20, 2022

Setting Fake Times Natively in Jest

February 13, 2022

Scrolling Elements Into View in React

February 7, 2022

Things I've Learned About useEffect

February 4, 2022

Working with Static Query Hooks in Objection.js

January 30, 2022

Avoiding and Handling Data Fetch Race Conditions in React

January 23, 2022

Using Nextjs Middleware for Geolocation Detection

January 23, 2022

Hook Flow - The Order in Which React Hooks Execute

December 5, 2021

Summary - What is beautiful is usable

October 31, 2021

Providing a fallback for Safari when querying Permissions API

October 24, 2021

Serving Next.js app over HTTPS locally using ngrok

August 12, 2021

Making useEffects abortable

July 12, 2021

JQ - An easy way to manipulate JSON from the command line

July 5, 2021

Actor-observer Bias