Home
Blog
Projects
Bookshelf
About
Blog Tags:
AI
Onboarding Your New AI Teammate
Cursor and Obsidian
The AI Development Conundrum
Offload Complexity, Don't Offload Learning
My Current AI Stack
AI Driven Development
Push vs Pull AI
Web Development
Onboarding Your New AI Teammate
Quick Tip - Theme Aware Images
Async Class Creation In JavaScript
Website Redesign v10
Server Side Rendering Compatible CSS Theming
Podcasting By Hand
Quick Tip - Specific Local Module Declarations
On File-System Routing Conventions
You're Building Software Wrong
Single File Web Apps
Resetting Controlled Components in Forms
A Quick Look at Import Maps
Recommended Tech Talks
Request for a (minimal) RSC Framework
Bluesky Tips and Tools
The Bookkeeping Pattern
TSLite
Monorepo Tips and Tricks
Next.js with Deno v2
Don't Break the Implicit Prop Contract
A Better useSSR Implementation
My Current Dev Setup
There Is No Standard Markdown
Abstract Your API
Development
Onboarding Your New AI Teammate
Tip: GitHub Created Date Filtering
Progressive Identifiers
Roundup Notes in Obsidian with Dataview
Quick Tip - Theme Aware Images
Website Redesign v10
Quick Tip - Specific Local Module Declarations
You're Building Software Wrong
Single File Web Apps
The AI Development Conundrum
A Quick Look at Import Maps
Recommended Tech Talks
Request for a (minimal) RSC Framework
Bluesky Tips and Tools
Building a Custom Ghostty Theme
Offload Complexity, Don't Offload Learning
More Thoughts on Dogfooding
Dogfooding
Git Notes as a Tool for Thought
My Current Dev Setup
There Is No Standard Markdown
Tip: Request and Response Headers
Using Feature Toggles to De-risk Refactors
Hohoro
Funport: True Dynamic Imports in webpack
Software Development
Onboarding Your New AI Teammate
Polish is Important
You're Building Software Wrong
Thoughts
Things Leaders Should Never Do
In Review - I, Robot
Build Momentum
On Taste
Leaving Wayfair
Write it down
The Squeeze
Learning
Starting Fresh
Redesign v6
My New Website
Pull Quotes
Redesign v5
Redesign
10,000 Characters
Blogging vs Working
A New Look
Leaders
Things Leaders Should Never Do
Teams
Things Leaders Should Never Do
Zombie Retros
Team Memes
No Process is Invisible Process
Teams and Caterpillar Tracks
Speedbumps
A Note on Consistency
Culture
Things Leaders Should Never Do
Zombie Retros
Team Memes
Organizations
Things Leaders Should Never Do
Team Memes
Speedbumps
Career
Things Leaders Should Never Do
Offload Complexity, Don't Offload Learning
Leaving Wayfair
A New Resume
Work
Things Leaders Should Never Do
Leaving Wayfair
The Squeeze
Evergreen
Things Leaders Should Never Do
micropost
Tip: Secrets for Cloudflare Workers
Tip: GitHub Created Date Filtering
Link: Next.js Is Infuriating
Dependabot Hell
Link: What the hell is going on right now?
Recipe: Horchata Protein Latte
Zombie Retros
Link: How I build software quickly
Vacation (and streaks)
Polish is Important
<Blank> Driven Development
All Documentation Should Be Dated
Adding Microposts
Service Monitors and Observability
Type Safe process.env
Consistent Local Ports with Wrangler
Being Unopinionated
Stop Snacking
No Process is Invisible Process
Jabs and Fluff: On CTO Office Hours
Finding React Artifacts
Deno
Fast Feedback Systems
Video Games
Delete it
Cloudflare
Tip: Secrets for Cloudflare Workers
Configuring Cloudflare Domains with Vercel
Project Deep Dive: Tails
Consistent Local Ports with Wrangler
Project Deep Dive: Microfibre
workers
Tip: Secrets for Cloudflare Workers
wrangler
Tip: Secrets for Cloudflare Workers
Tip
Tip: Secrets for Cloudflare Workers
Tip: GitHub Created Date Filtering
Roundup Notes in Obsidian with Dataview
Quick Tip - Theme Aware Images
Async Class Creation In JavaScript
Server Side Rendering Compatible CSS Theming
Replacing Dropbox Capture with Raycast
Quick Tip - Specific Local Module Declarations
Bluesky Tips and Tools
The Bookkeeping Pattern
Don't Break the Implicit Prop Contract
A Better useSSR Implementation
Tip: Request and Response Headers
Exporting Custom Slack Emoji
Custom Favicon Recipes
Fixing Zed's language server
Updating Forked Repos
GitHub
Tip: GitHub Created Date Filtering
New GitHub Scams
Book Review
In Review - I, Robot
Books
In Review - I, Robot
snippet
Progressive Identifiers
Quick Git
Multi-step Native HTML Forms
Git Co-Authorship
useInterval
JavaScript
Progressive Identifiers
Async Class Creation In JavaScript
The Bookkeeping Pattern
TSLite
Array Chunking
useConsole
Understanding React 16.3 Updates
CSS in JS
JavaScript Weirdness
Product Review
In Review - The Nuphy Air75 V3
In Review - The Belroy Transit Workpack Pro v2
Gear
In Review - The Nuphy Air75 V3
In Review - The Belroy Transit Workpack Pro v2
Keyboard
In Review - The Nuphy Air75 V3
Random
Build Momentum
On Taste
31
Team Memes
30
Idea: Distributable Web Apps
29
Fractal Refactoring
10x Engineers
Opinion
Build Momentum
On File-System Routing Conventions
The AI Development Conundrum
Links
Link: Next.js Is Infuriating
Link: What the hell is going on right now?
Link: How I build software quickly
Git
Quick Git
Git Co-Authorship
Git Notes as a Tool for Thought
Go To Git Utils
Updating Forked Repos
Bash
Quick Git
recipe
Recipe: Horchata Protein Latte
Birthday
31
30
29
Goal
31
Thoughts on New Years Resolutions
Resolutions
31
Thoughts on New Years Resolutions
30
29
2021: Resolutions
Travel
Vacation (and streaks)
Summer 2019 - Bend Oregon
Summer 2018 Trip
HTML
Multi-step Native HTML Forms
React
Multi-step Native HTML Forms
useInterval
Server Side Rendering Compatible CSS Theming
Resetting Controlled Components in Forms
Request for a (minimal) RSC Framework
Don't Break the Implicit Prop Contract
A Better useSSR Implementation
React Error Boundaries: Revisited
Using Marquee with React and TypeScript
My Two Favorite React Tricks
React Testing Library: Checkboxes and events
useConsole
Stateful Providers
Theme First UI Development
useReducer, don't useState
Hooks Tips Ep. 2 - Migrating Instance Variables
Hooks Tips Ep. 1 - The Dependency Array
React Error Boundaries
Suspense Plus GraphQL
Managing Complex UI Component State
Understanding React 16.3 Updates
Obsidian
Roundup Notes in Obsidian with Dataview
Cursor and Obsidian
My Updated Obsidian Task Management
Simple Obsidian Task Management
Switching back to Obsidian
Switching back to Notion
Roll your own Obsidian sync
Note Taking
Roundup Notes in Obsidian with Dataview
My Updated Obsidian Task Management
Simple Obsidian Task Management
Switching back to Obsidian
On Note Taking
Switching back to Notion
TypeScript
Async Class Creation In JavaScript
Quick Tip - Specific Local Module Declarations
The Bookkeeping Pattern
TSLite
Hohoro
Type Safe process.env
Using Marquee with React and TypeScript
Backpack
In Review - The Belroy Transit Workpack Pro v2
Review
In Review - The Belroy Transit Workpack Pro v2
Switching to iPhone
Redesign
Website Redesign v10
Starting Fresh
Redesign v6
My New Website
Redesign v5
Redesign
A New Look
Theming
Server Side Rendering Compatible CSS Theming
CSS
Server Side Rendering Compatible CSS Theming
My Thoughts on Tailwind
CSS in JS
The Great CSS Debate
Attribute Selectors
Next.js
Server Side Rendering Compatible CSS Theming
On File-System Routing Conventions
The Bookkeeping Pattern
Next.js with Deno v2
Using Feature Toggles to De-risk Refactors
Funport: True Dynamic Imports in webpack
Project Deep Dive: Tails
Project Deep Dive: Microfibre
Setting up Next.js with Tailwind
Setting up Shiki on Next.js
My Updated Next.js Setup
My Opinionated Next.js Setup
Redesign v6
Waku
Server Side Rendering Compatible CSS Theming
Podcasting
Podcasting By Hand
The Bikeshed Pod
Podcasting By Hand
Dropbox
Replacing Dropbox Capture with Raycast
Roll your own Obsidian sync
Raycast
Replacing Dropbox Capture with Raycast
Tools
Replacing Dropbox Capture with Raycast
My Current Dev Setup
Node.js
Quick Tip - Specific Local Module Declarations
A Quick Look at Import Maps
Garbanzo
On File-System Routing Conventions
Personal Knowledge Management
Cursor and Obsidian
React Server Components
Resetting Controlled Components in Forms
Request for a (minimal) RSC Framework
The Bookkeeping Pattern
Goals
Thoughts on New Years Resolutions
30
29
Recommendations
Recommended Tech Talks
Roundup
Recommended Tech Talks
Links
Talks
Recommended Tech Talks
Server Actions
Request for a (minimal) RSC Framework
The Bookkeeping Pattern
Forms
Request for a (minimal) RSC Framework
The Bookkeeping Pattern
Task Management
My Updated Obsidian Task Management
Simple Obsidian Task Management
Bluesky
Bluesky Tips and Tools
Ghostty
Building a Custom Ghostty Theme
Monorepos
Monorepo Tips and Tricks
Navigating Monorepos with Ease
yw
Learning
Offload Complexity, Don't Offload Learning
Learning Go
Deno
Next.js with Deno v2
Deno
Product
More Thoughts on Dogfooding
Dogfooding
Tools for Thought
Git Notes as a Tool for Thought
On Note Taking
Linear Tools Enforce Linear Thinking
Snippets
A Better useSSR Implementation
Type Safe process.env
useConsole
yw
Notes
Simple Obsidian Task Management
Notion
Switching back to Obsidian
Switching back to Notion
APIs
Abstract Your API
Refactors
Using Feature Toggles to De-risk Refactors
Looking Ahead
Leaving Wayfair
2018
Looking Ahead: 2016
Meta
Leaving Wayfair
Afraid
The Message is in the Medium
swc
Hohoro
Projects
Hohoro
The Library-Docs Monorepo Template
Building Better Beacon
Project Deep Dive: Tails
Project Deep Dive: Microfibre
Dollar: Devlog 2
Dollar: Devlog 1
Building in 2016
My First Project of 2016
webpack
Funport: True Dynamic Imports in webpack
Guides
Configuring Cloudflare Domains with Vercel
React Error Boundaries: Revisited
Exporting Custom Slack Emoji
Mac Setup Guide
Vercel
Configuring Cloudflare Domains with Vercel
Slack
Exporting Custom Slack Emoji
Enhancing Slack
OSS
Corporate Sponsored OSS
Project Deep Dive
Project Deep Dive: Tails
Project Deep Dive: Microfibre
Observability
Service Monitors and Observability
CSS-in-JS
On Adopting CSS-in-JS
Zed
Fixing Zed's language server
Go
Project Deep Dive: Microfibre
Learning Go
ChatGPT
AI Driven Development
Hot Take
Jabs and Fluff: On CTO Office Hours
Ideas
Idea: Distributable Web Apps
Literate (web) Programming
Powerpoint
Rant
Fractal Refactoring
10x Engineers
Avoid Distractions
Linear Tools Enforce Linear Thinking
Advice
Avoid Distractions
Tailwind
My Thoughts on Tailwind
Setting up Next.js with Tailwind
Communication
Write it down
On Written Communication
The Message is in the Medium
Dollar
Dollar: Devlog 2
Dollar: Devlog 1
Yarn
Yarn Berry Gitignore Settings
yw
Testing
On Writing Tests
Snapshot Testing
Testing Software
Android
Switching to iPhone
iOS
Switching to iPhone
iPhone
Switching to iPhone
Recap
Year in Music
2020: Year in Review
2018
August
2015
stub
Pair Programming (stub)
Productivity
Start Fresh
Collaboration
On Written Communication
Pair Code Reviews
A Note on Consistency
Draft Pull Requests
Writing
On Written Communication
React Testing Library
React Testing Library: Checkboxes and events
Development Practices
On Code Review
Fast
Stateful Providers
Code Review
On Code Review
Pair Code Reviews
Draft Pull Requests
Node
Writing Node Scripts
Hacking
Hack Sprint
Side Projects
Simple Props
Building a Web Sandbox: Part 1
NextJS Analytics with Airtable
The Rabbit Hole
Building a Live Editor
Start Small, Accept Change
Weekend Projects
A New Resume
Design Systems
Computed Design Tokens
Theme First UI Development
Theme
Computed Design Tokens
Product Development
Enhancing Slack
Meetings
A Note On Meetings
Note
A Note On Meetings
A Note On Anti-Patterns
Photos
February 20, 2020
Summer 2018 Trip
Back Bay
February 20, 2020
Bend
Summer 2019 - Bend Oregon
Design Tokens
Theme First UI Development
GraphQL
Suspense Plus GraphQL
Suspense
Suspense Plus GraphQL
Article
Missing Detail
Log
Matt's Log - October
Launch
You've Launched, Now What?
Burnout
Taking a Break
Components
Managing Complex UI Component State
Calendar
Calendar
Technology
Push vs Pull AI
October 4th
DJI vs GoPro
Collection
Links
Google
October 4th
Web
Pull Quotes
Twitter
10,000 Characters
Competition
DJI vs GoPro
Startups
Powerpoint
Social Media
The Social Max
Thanks
Thanksgiving
Family
Family Time
Tip: Request and Response Headers
Using Feature Toggles to De-risk Refactors
Hohoro
Custom Favicon Recipes
Corporate Sponsored OSS
The Library-Docs Monorepo Template
Building Better Beacon
Project Deep Dive: Tails
Churn Anxiety
Service Monitors and Observability
Type Safe process.env
Consistent Local Ports with Wrangler
On Adopting CSS-in-JS
Project Deep Dive: Microfibre
Pair Programming
AI Driven Development
Go To Git Utils
Using Marquee with React and TypeScript
Finding React Artifacts
Learning Go
Deno
My Thoughts on Tailwind
Setting up Next.js with Tailwind
Setting up Shiki on Next.js
Navigating Monorepos with Ease
My Updated Next.js Setup
A Note On Anti-Patterns
Theme First UI Development
Deploying Automatically using GitHub Actions
Simpler and Smaller
Maintenance Costs
Snapshot Testing
useReducer, don't useState
Start Small, Accept Change
React Error Boundaries
Testing Software
Suspense Plus GraphQL
You've Launched, Now What?
Taking a Break
Managing Complex UI Component State
Understanding React 16.3 Updates
CSS in JS
Redesign v6
JavaScript Weirdness
Calendar
Rebuilding Mustache
My Current AI Stack
Configuring Cloudflare Domains with Vercel
React Error Boundaries: Revisited
Custom Favicon Recipes
Corporate Sponsored OSS
The Library-Docs Monorepo Template
Building Better Beacon
Churn Anxiety
Stop Snacking
Pair Programming
AI Driven Development
Go To Git Utils
Using Marquee with React and TypeScript
Finding React Artifacts
Learning Go
Principles for Automated Testing
Deno
Fractal Refactoring
10x Engineers
Setting up Shiki on Next.js
Dollar: Devlog 2
Navigating Monorepos with Ease
Dollar: Devlog 1
Yarn Berry Gitignore Settings
On Writing Tests
Moving to PNPM
Upgrade Guides
My Opinionated Next.js Setup
My Two Favorite React Tricks
Build Your Developer Toolbox
Updating Forked Repos
React Testing Library: Checkboxes and events
Array Chunking
Writing Node Scripts
useConsole
yw
Hooks Tips Ep. 2 - Migrating Instance Variables
Hooks Tips Ep. 1 - The Dependency Array
Building a Live Editor
Taking a Break
Rebuilding Mustache
The Great CSS Debate
Attribute Selectors
Clientside