Blog
Writing about software, AI, and whatever else I'm thinking about.
2026
2025
- Oct 18 My talk from Hono Conference 2025
- Jun 30 Closing a cleaning company
- Jun 17 How I'm doing plain-text accounting
- Jun 16 Re-encoding a media library
- Jun 7 Ecovacs Goat A3000 Review
- May 24 Four Ideas from Extensive Claude Code Usage
- Apr 17 Setting up TeslaMate with Docker and Proxmox
- Apr 14 Rewriting functionality with Claude Code
- Mar 17 Skipping 𝕏 for Lent
- Mar 17 Building a cleaning company
- Feb 24 "Act as my personal strategic advisor"
- Feb 24 Image Binding in Workers
- Feb 22 Redesigning
- Feb 5 Programatically generated weather SVGs
- Feb 4 DIY Error Monitor
- Jan 30 San Marcos TX Life
- Jan 29 The switch to Linear
- Jan 29 Sleepy Time Tea
- Jan 29 Caching Middleware with Deepseek and Workers
- Jan 23 Integrating Workers Assets with Fullstack Apps
- Jan 10 Recursively transcode FLAC files to MP3
- Jan 6 Misogi 2025
- Jan 6 My Morning Coffee
- Jan 1 About
2024
- Dec 27 2024 Year in Review
- Nov 21 Date and time numbers cheatsheet
- Nov 21 How to Generate Types for a Supabase Project
- Nov 18 How to filter shell output with grep
- Nov 17 Running a Ruby on Rails Application in Nix
- Nov 10 Beverage Hydration Index
- Nov 8 Just enough Obsidian
- Nov 8 My starter macOS Nix Config
- Nov 7 Message of the Day
- Nov 6 Success with Obsidian
- Nov 5 Effective web clipping with Obsidian
- Nov 5 Install fonts with Homebrew
- Nov 4 Get started with 𝕏 AI and Grok
- Oct 31 How I Record Videos
- Oct 31 M4 Macs
- Oct 31 Tailwind Child Selectors
- Oct 29 Workers Entrypoints
- Oct 28 An introduction to Cloudflare Workflows
- Oct 27 Announcing the Astro Cloudflare Redirects integration
- Oct 27 Recommended Icon Libraries
- Oct 26 Donor Advised Funds
- Oct 26 Building an indexer
- Oct 25 Effective indexing
- Oct 23 The Astro Rewrite
- Oct 21 ShipFast Vulnerabilities
- Oct 21 The McMaster-Carrification effect
- Oct 10 Building Your Own Radio Network with Liquidsoap
- Oct 8 Releasing my bearblog Chrome extension
- Oct 8 Defer Loading CSS with One Line of Code
- Oct 8 Increasing Lighthouse Score to 100
- Oct 8 Understanding Astro's getStaticPaths function
- Oct 7 An Introduction to Astro's Content System
- Oct 7 How to Add Cloudflare Turnstile to Your Ruby on Rails Application
- Oct 7 The big bearblog syntax highlighting hack
- Oct 6 How to use Lucide icons via a CDN
- Oct 2 Just enough Zustand
- Oct 2 The quest for pure aspirin
- Sep 29 Deploying Astro Applications to Cloudflare
- Sep 28 Shadcn/ui review
- Sep 22 Create a Zellij instance with a useful session name
- Sep 22 Creating a custom post list page in Bear
- Sep 22 Blog RSS auto-backlinks on a GitHub repo
- Sep 22 IDGAF git commit
- Sep 22 Shopping list of non-toxic products
- Sep 18 Honor the change
- Jul 17 Recent developer tool discoveries
- Jun 15 What to do with a newsletter?
- Jun 12 Digital throwaways, physical keepsakes
- Jun 10 Full-stack development is a superpower
- Jun 8 Replaying Majora's Mask
- Jun 5 Second brain alternative
- Jun 5 What comes next after simple chat UIs in AI?
- Jun 1 Quick review of Zellij
- May 29 LLMs and voice are really something else
- May 28 ShipFast and the world of starter kits
- May 27 The WHOOP is quite cool
- May 26 A great usage of QR codes in the real world
- May 26 Authenticity and producing content as a Developer Advocate
- May 25 How to fix 𝕏's broken "Download an archive of your data" feature
- May 25 Second Brain-less
- Jan 17 Domain ranking experiment
2023
- Jul 24 How to fix the "Cannot Use Import Statement Outside a Module" error in JavaScript
- Jul 24 How to check the installed version of Node.js
- Jul 24 How to permanently update your shell $PATH
- Jul 16 How to use the unofficial Threads API (with code samples)
- Jul 12 Three open-source shell setups to improve your terminal experience
- Jun 23 How to set up a new macOS system, using Homebrew and Brewfile
- Jan 20 ROMs
2022
2021
- Mar 30 freeCodeCamp Basic CSS Certification - Complete Study Guide (1 Hour Video)
- Mar 23 freeCodeCamp Basic HTML and HTML5 Certification - Complete Study Guide (1 Hour Video)
- Mar 18 Building a ShareX-style screenshot workflow on macOS
- Mar 16 How to learn React Native
- Mar 12 Three quick JavaScript tips you can start using today
- Mar 10 How to update Git in Ubuntu + Windows Subsystem for Linux
- Mar 9 Get started with exception monitoring
- Mar 5 Everything you need to know from GatsbyConf 2021 in less than 10 minutes
- Mar 1 How to customize your Windows Terminal with custom themes and color schemes
- Feb 23 Address Bar Hacks for Developers
- Feb 13 Redirect anything with lilredirector
- Feb 9 Getting started with Redis
- Feb 3 Understanding the FileList API
- Feb 2 Get started with Tailwind CSS, the utility-first CSS framework
- Jan 26 What could we build with better tools for thought?
- Jan 19 How to start using Emacs, the programmer's editor
- Jan 14 How to build a Discord notification bot for new Ghost members
- Jan 12 Here's what you need to learn and master Vim, the modal text editor
- Jan 8 14 Great VSCode Resources - Dev Setups, Quickstart Videos, Courses, and Deep Dives
2020
- Dec 15 No-code: why does it matter for developers?
- Dec 8 What is Jamstack? Exploring what you need to know, and how to get started
- Dec 1 Everything you need to know to start with GraphQL
- Nov 24 What you need to know to get started with Flutter, the cross-platform app framework
- Nov 17 Everything you need to know to understand Serverless
- Nov 10 A brief guide to understanding Svelte.js
- Nov 3 Human-computer interfaces, where we're at in 2020, and why it matters
- Sep 16 How to capitalize the first letter of a string in JavaScript
- Sep 15 Get an HTML element by class in JavaScript
- Sep 14 How to quit Vim (in five seconds)
2014
2013
- Dec 24 Unity
- Dec 23 Hardcore Ruby
- Dec 23 Retina MacBook Pro
- Nov 25 Diff on Commit Idea
- Nov 24 A thirty-one line test framework
- Nov 9 You Should Learn Vim
- Oct 9 Boxen
- Oct 9 Mavericks
- Sep 11 HTTPS For Free
- Sep 11 Markdown Opinions
- Sep 1 Dotfiles
- Sep 1 Now Playing Script
- Aug 30 Array.unwrap
- Aug 21 Automatic Check-Ins with Tasker
- Aug 12 Nginx and Subdomains - My Configuration
- Aug 6 Hipchat + Ruby
- Aug 5 Deploying a static Jekyll site
- Aug 4 at_most: ActiveRecord limiting in Rails
- Apr 9 AndroVM
- Apr 7 Something Simple (In Todo Apps)
- Jan 29 Tmux, Powerline, and info overload
- Jan 26 ZSH and Octopress