Recent Blog Posts
Awaiting Multiple Promises with Promise.all
Cleaner Type Predicates with Derived Types
Type predicates are a powerful TypeScript feature that allows you to narrow down an abstract type to a more concrete type. Together with derived types, they can greatly reduce repetition in your code.
Respecting Font Size Preferences: Rems and 62.5% Base Font Size
Setting your base font size to 62.5% allows you to think in pixels but use rems to respect users' font size preferences.
Don't Use a Fixed Line Height
In typography, the ideal line height for text depends on a variety of factors, including font size, line length, and font family.
11ty: The Good, the Bad, and the... Possum?
A review of 11ty, an extensible static site generator written in Node that supports a variety of template languages.
Popular Blog Posts
How to Format Code on Save in VS Code with ESlint
CRLF vs. LF: Normalizing Line Endings in Git
Line endings can differ from one OS to another. Learn the history behind CRLF and LF line endings and how to enforce line endings in git.
Why I Don't Like Tailwind CSS
On paper, Tailwind CSS sounds like a great idea. In reality, it suffers from the same problems that it tries to solve.
SVG Tutorial: How to Code SVG Icons by Hand
Learn the basics of SVGs so you can code your own SVG icons by hand, without always relying on icon libraries.
Be Careful with Async Functions that Return Booleans
Suppose an async function returns a boolean. What happens if you check the return value without awaiting it?
Creating Aspect Ratios in CSS
Learn how to give any element an aspect ratio in CSS, using the modern aspect-ratio property or a trick with percentage padding.
Hesitation Is Defeat
After a one-year hiatius from Sekiro, I returned to face the final boss—and, through painful persistence, triumphed.
How to Sort Ant Design Tables in React (the Easy Way)
The Ant Design UI library lets you sort tables by one or more columns, using a sorter prop. But the syntax can get quite repetitive. Let's fix that!
Goodbye, GitHub Pages—Hello, Netlify
GitHub Pages is a great option for hosting your site... until it isn't. Here's why I moved to Netlify.
Creating a Responsive Navbar Without Bootstrap
Want to create a navbar that works on mobile and desktop? Ditch the frameworks—in this tutorial, we'll create a responsive navbar using HTML, CSS, and JS.
How to Add a Copy-to-Clipboard Button to Jekyll
Getting Started with Jekyll and GitHub Pages: Your First Website
Jekyll is a static site generator that makes it easy for you to create a website. Learn how to get started with Jekyll and GitHub Pages.
Finite State Machine (FSM) Tutorial: Implementing an FSM in C++
Finite state machines (FSMs) are used in lots of different situations to model complex entity state. In this finite state machine tutorial, I'll help you understand the FSM design pattern by building one from the ground up for a simple use case.
I have experience with a wide range of stacks and enjoy working on projects that have a strong UI/UX component. Below are just some of my software projects that I'm most proud of.