I've spent the past several years working with high-growth start ups and scale ups to build modern and highly-interactive web apps that people love to use. At my core, I enjoy making life easier for both users and developers.
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