Making software better without sacrificing user experience.
As a designer/developer hybrid, I help software companies improve their user experience and ship more performant products. I also actively maintain several open source projects.
I’m passionate about open source software, usability, performance, privacy, and minimal design. This small piece of the internet stores a growing collection of my personal brain dumps.
Skills & Languages
Core tools are Figma, HTML, CSS, JavaScript & WordPress. Currently improving my skills with Ruby, Rails, MySQL & PHP. I also enjoy tinkering with basic shell scripts and Unix systems.
Design Thought Experiments
- Stop Using Hamburger Menus (Sometimes)
- Better Search Results
- My Coffee Maker Just Makes Coffee
- Blog Anonymously
Articles & Tutorials
2024-06-02 · Building rbenv on OpenBSD 7.5
2024-05-27 · Installing WordPress on NearlyFreeSpeech
2024-04-11 · OpenBSD is a Cozy Operating System
2024-02-23 · Please Make Your Table Headings Sticky
2024-02-16 · Website Backups with Apple iCloud
2024-01-29 · New Domain and Code Forge
2024-01-02 · My Text Edtior is Not Open Source
2023-12-17 · Switching Things Over to ikiwiki
2023-11-02 · Bringing dwm Shortcuts to GNOME
2023-09-26 · The X220 ThinkPad is the Best Laptop in the World
2023-09-11 · Installing Older Versions of MongoDB on Arch Linux
2023-07-21 · Converting HEIF Images with macOS Automator
2023-06-24 · Blogging for 7 Years
2023-06-13 · Improving Laptop Battery Performance on OpenBSD
2023-06-05 · Running VSCode in Chromium on OpenBSD
2023-05-19 · My Robotic Mower Woes
2023-05-11 · Working with `git` Patches in Apple Mail
2023-05-05 · Stop Using Hamburger Menus (Sometimes)
2023-05-01 · Converting My X201 ThinkPad into a Slabtop
2023-04-25 · Applying Email-Based Git Patches in Evolution on Linux
2023-04-13 · Launching Sublime Text with dmenu on Alpine Linux
2023-04-11 · HTML Dark Mode
2023-04-02 · Bypassing the WiFi Hardware Switch on the Lenovo X201
2023-03-16 · Installing Ruby with RVM on Alpine Linux
2023-03-14 · Stop Using Custom Web Fonts
2023-03-09 · Replacing My Eero Mesh Network with Two Mangos
2023-03-03 · Why I Stopped Using an External Monitor
2023-02-08 · Dynamic Viewports with CSS
2023-01-09 · My Coffee Maker Just Makes Coffee
2022-12-23 · I Want to Suckless and You Can Too
2022-12-08 · Adventures in Creating a Minimal Alpine Linux Installer
2022-12-02 · Building openring with Jekyll Build
2022-11-23 · Do You Have an Extra $10?
2022-11-22 · Embracing Slow Tech
2022-11-14 · Migrating from GitHub to sourcehut
2022-11-07 · Never Do Spec Work for Free
2022-11-04 · Setting Up AdGuard Home with Eero
2022-10-14 · Avoiding Featurism
2022-10-03 · Simplifying the Craigslist Gallery
2022-09-22 · RE: Creating a Simple HTML/CSS Notice Box
2022-09-20 · Installing Custom Fonts on Linux from the Command Line
2022-09-19 · Setup Jekyll from Scratch on a New Linux System
2022-09-10 · Don't Make a Blog, Make a Brain Dump
2022-09-08 · A Warning for New Designers: Avoid Dribbble
2022-09-02 · Setting Up Jekyll on Windows
2022-08-12 · Looping Through Jekyll Collections
2022-08-02 · Making a Website Under 1kB
2022-07-29 · Hosting with Codeberg Pages
2022-07-14 · The Linux Desktop is Hard to Love
2022-07-06 · Yet Another Static Site Generator Switch
2022-06-29 · Happily Paying For macOS Apps
2022-06-20 · Clickable Links Inside XML
2022-05-30 · Schools Should Be Using Open Source Software
2022-05-23 · RSS Hacks With XSLT
2022-05-17 · Two Weeks with the DuckDuckGo Browser
2022-05-13 · This Site is Now a Shinobi Website
2022-04-18 · Dear Apple, Please Fix Safari's Default Dark Mode Link Color
2022-03-21 · My Static Blog Publishing Setup and an Apology to RSS Subscribers
2022-03-14 · Setting Up a Pi-hole Server with Eero
2022-03-12 · Transferring Media from macOS to a Jellyfin Server (Raspberry Pi 4)
2022-02-23 · February 2022 Update
2022-02-03 · My Cheapskate Commenting System
2022-01-28 · Convert Files to HTML with macOS Automator Quick Actions
2022-01-06 · Chrome OS Could Become the Future Leader of Computing
2021-12-17 · Icons Should be Complementary - Text is Always Better
2021-12-06 · Hosting a Jekyll Site on Sourcehut
2021-12-03 · Using Netlify for Dynamic URL Redirects
2021-11-25 · Using a New Domain and Switching Static Hosts
2021-11-09 · Modern Improvements for Default Browser Styles
2021-11-03 · A Reality Where CSS and JavaScript Don't Exist
2021-10-28 · Setting Up 1.1.1.1 for Families on a Pi-Hole
2021-10-15 · Batch Converting Images to webp with macOS Automator
2021-09-23 · Enabling Safari Extensions with the macOS Catalina Patcher
2021-09-08 · Create a Performance-Focused WordPress Blog
2021-08-13 · Stuffing an SSD Inside the Raspberry Pi 400
2021-07-24 · Sharing The Things We Use
2021-06-20 · PS4 Download UI with Pure CSS
2021-06-07 · CSS Slope Graphs
2021-05-29 · SOMA Inspired Terminal Display with CSS
2021-05-19 · My Changing Opinion on Personal Website Design
2021-04-27 · Shiny, Animated CSS Buttons
2021-04-22 · 89 Blog Posts in a Single HTML File
2021-04-13 · Create a Mac App Icon with Pure HTML and CSS
2021-04-12 · The Lazy Developer's Dark Mode
2021-03-25 · Click to Load Website Images
2021-03-11 · Introducing PageRoast
2021-02-25 · ThriftyName: $5 Brand Names
2021-02-02 · Self-Hosting Fathom Analytics with DigitalOcean
2021-01-19 · Setting Up Fathom Analytics with Netlify
2021-01-13 · Introducing Notez
2021-01-05 · Animated Radio Tab Toggles
2020-12-28 · Disabling Comments in WordPress
2020-12-08 · Pure CSS Bar Graphs with Graceful Mobile Fallbacks
2020-12-04 · Obvious Javascript 'Injection' Fallback
2020-11-09 · Bidirectional Scrolling: Why Not Both?
2020-10-19 · Menu Toggle with Pure CSS
2020-10-07 · Poor Man's CSS Full-Bleed Layout
2020-09-29 · Simple Navigation Setup in Jekyll 3.9.0
2020-09-16 · Portable Pi: Cheap Raspberry Pi Zero Hacker Terminal
2020-09-09 · Over-Engineering an Oil Tank Gauge
2020-09-02 · My Raspberry Pi Desktop
2020-08-16 · Linux Mint MacBook Air Setup
2020-08-13 · Goodbye WordPress, Hello Jekyll (Again)
2020-07-07 · Improving Github's New Design
2020-06-22 · Keynote Slides with Pure CSS
2020-06-14 · Audio Hotkeys on Linux Mint
2020-06-04 · Quick and Dirty Theme Switcher
2020-05-13 · Mini Interactive Keyboard with Pure CSS
2020-05-06 · Fixing LocalWP on Fedora 32
2020-05-05 · WP Enqueue for Beginners
2020-04-29 · Faking 3D Elements with CSS
2020-03-31 · Stripe Menu Dropdowns (CSS)
2020-03-18 · Base64 All The Things! (Sometimes)
2020-02-07 · How to "FLOSS" as a Web Designer
2020-01-07 · Web Development on a $200 Chromebook
2019-11-29 · Billing for One CSS Change
2019-11-13 · Very Basic Form Styling
2019-11-01 · Improving Tufte CSS for Jekyll
2019-10-06 · Stop Using Sticky Navigation on Mobile
2019-09-28 · Being More Efficient as a Designer and Developer
2019-09-09 · Plain Text Emails, Please
2019-07-30 · Dynamic Checkboxes
2019-07-17 · Styling Empty Table Cells
2019-07-05 · Using HTML Validator Badges Again
2019-06-25 · They Won't Wait: A Warning for Slow Websites
2019-06-20 · Publishing Simple Books With Jekyll
2019-06-14 · Using Hamburger Menus? Try Sausage Links
2019-06-11 · Making Tables Responsive With Minimal CSS
2019-06-06 · Write HTML Like It's 1999
2019-06-04 · Using User-Select
2019-05-29 · News Websites Are Dumpster Fires
2019-05-22 · Text Align: Justify
2019-05-15 · Improving Receipt UX
2019-05-09 · Cut Your Forms in Half
2019-05-03 · First Letter Pseudo Element
2019-04-26 · Minimal CSS: Dropdown Menu
2019-04-23 · CSS Character Unit
2019-04-20 · Browser History Sucks
2019-04-15 · Yes, I Still Use jQuery
2019-04-13 · CSS Value: `currentColor`
2019-04-05 · CSS: Indenting Text
2019-03-26 · Simple Does Not Mean Ugly
2019-03-25 · Skip to Content Button
2019-03-13 · Prescription Form UI Improvements
2019-02-27 · Animated Card Tiles
2019-02-18 · Easy Toggle Switches
2019-02-15 · Super Mario Blocks in CSS
2019-02-05 · Proper UI Hierarchy
2019-01-28 · Tabbed Content Without JavaScript
2019-01-21 · Easy Custom Radio Inputs
2019-01-15 · Basic Gulp Build for Sass
2019-01-08 · Better Box Shadows
2019-01-06 · Over-Nesting
2018-12-19 · Using Parent Selectors in CSS
2018-11-28 · Width or Flex-Basis?
2018-11-22 · Adaptable Flexbox Grid
2018-10-18 · What Happened to Self-Hosted Blogs?
2018-09-28 · Using Multiple CSS Background Images
2018-09-20 · Pure CSS Simple Dropdown Plugin
2018-09-07 · Simple Accessibility
2018-08-07 · Setting Up a Free SSL
2018-04-16 · CSS Video Backgrounds
2018-03-24 · CSS Variables
2018-02-12 · Stay Hungry
2018-01-25 · Open Source Typeface Pairings
2018-01-14 · ET-Jekyll Theme
2017-11-20 · Chasing Performance
2017-11-01 · The Death of Personality
2017-10-10 · Unsolicited Design Review - Dropbox
2017-09-07 · Goodbye CSS Preprocessors
2017-07-10 · Designers Need Thicker Skin
2016-11-15 · The Wonders of Text Ellipsis
2016-06-28 · Aqua UI CSS Buttons
2024-05-27 · Installing WordPress on NearlyFreeSpeech
2024-04-11 · OpenBSD is a Cozy Operating System
2024-02-23 · Please Make Your Table Headings Sticky
2024-02-16 · Website Backups with Apple iCloud
2024-01-29 · New Domain and Code Forge
2024-01-02 · My Text Edtior is Not Open Source
2023-12-17 · Switching Things Over to ikiwiki
2023-11-02 · Bringing dwm Shortcuts to GNOME
2023-09-26 · The X220 ThinkPad is the Best Laptop in the World
2023-09-11 · Installing Older Versions of MongoDB on Arch Linux
2023-07-21 · Converting HEIF Images with macOS Automator
2023-06-24 · Blogging for 7 Years
2023-06-13 · Improving Laptop Battery Performance on OpenBSD
2023-06-05 · Running VSCode in Chromium on OpenBSD
2023-05-19 · My Robotic Mower Woes
2023-05-11 · Working with `git` Patches in Apple Mail
2023-05-05 · Stop Using Hamburger Menus (Sometimes)
2023-05-01 · Converting My X201 ThinkPad into a Slabtop
2023-04-25 · Applying Email-Based Git Patches in Evolution on Linux
2023-04-13 · Launching Sublime Text with dmenu on Alpine Linux
2023-04-11 · HTML Dark Mode
2023-04-02 · Bypassing the WiFi Hardware Switch on the Lenovo X201
2023-03-16 · Installing Ruby with RVM on Alpine Linux
2023-03-14 · Stop Using Custom Web Fonts
2023-03-09 · Replacing My Eero Mesh Network with Two Mangos
2023-03-03 · Why I Stopped Using an External Monitor
2023-02-08 · Dynamic Viewports with CSS
2023-01-09 · My Coffee Maker Just Makes Coffee
2022-12-23 · I Want to Suckless and You Can Too
2022-12-08 · Adventures in Creating a Minimal Alpine Linux Installer
2022-12-02 · Building openring with Jekyll Build
2022-11-23 · Do You Have an Extra $10?
2022-11-22 · Embracing Slow Tech
2022-11-14 · Migrating from GitHub to sourcehut
2022-11-07 · Never Do Spec Work for Free
2022-11-04 · Setting Up AdGuard Home with Eero
2022-10-14 · Avoiding Featurism
2022-10-03 · Simplifying the Craigslist Gallery
2022-09-22 · RE: Creating a Simple HTML/CSS Notice Box
2022-09-20 · Installing Custom Fonts on Linux from the Command Line
2022-09-19 · Setup Jekyll from Scratch on a New Linux System
2022-09-10 · Don't Make a Blog, Make a Brain Dump
2022-09-08 · A Warning for New Designers: Avoid Dribbble
2022-09-02 · Setting Up Jekyll on Windows
2022-08-12 · Looping Through Jekyll Collections
2022-08-02 · Making a Website Under 1kB
2022-07-29 · Hosting with Codeberg Pages
2022-07-14 · The Linux Desktop is Hard to Love
2022-07-06 · Yet Another Static Site Generator Switch
2022-06-29 · Happily Paying For macOS Apps
2022-06-20 · Clickable Links Inside XML
2022-05-30 · Schools Should Be Using Open Source Software
2022-05-23 · RSS Hacks With XSLT
2022-05-17 · Two Weeks with the DuckDuckGo Browser
2022-05-13 · This Site is Now a Shinobi Website
2022-04-18 · Dear Apple, Please Fix Safari's Default Dark Mode Link Color
2022-03-21 · My Static Blog Publishing Setup and an Apology to RSS Subscribers
2022-03-14 · Setting Up a Pi-hole Server with Eero
2022-03-12 · Transferring Media from macOS to a Jellyfin Server (Raspberry Pi 4)
2022-02-23 · February 2022 Update
2022-02-03 · My Cheapskate Commenting System
2022-01-28 · Convert Files to HTML with macOS Automator Quick Actions
2022-01-06 · Chrome OS Could Become the Future Leader of Computing
2021-12-17 · Icons Should be Complementary - Text is Always Better
2021-12-06 · Hosting a Jekyll Site on Sourcehut
2021-12-03 · Using Netlify for Dynamic URL Redirects
2021-11-25 · Using a New Domain and Switching Static Hosts
2021-11-09 · Modern Improvements for Default Browser Styles
2021-11-03 · A Reality Where CSS and JavaScript Don't Exist
2021-10-28 · Setting Up 1.1.1.1 for Families on a Pi-Hole
2021-10-15 · Batch Converting Images to webp with macOS Automator
2021-09-23 · Enabling Safari Extensions with the macOS Catalina Patcher
2021-09-08 · Create a Performance-Focused WordPress Blog
2021-08-13 · Stuffing an SSD Inside the Raspberry Pi 400
2021-07-24 · Sharing The Things We Use
2021-06-20 · PS4 Download UI with Pure CSS
2021-06-07 · CSS Slope Graphs
2021-05-29 · SOMA Inspired Terminal Display with CSS
2021-05-19 · My Changing Opinion on Personal Website Design
2021-04-27 · Shiny, Animated CSS Buttons
2021-04-22 · 89 Blog Posts in a Single HTML File
2021-04-13 · Create a Mac App Icon with Pure HTML and CSS
2021-04-12 · The Lazy Developer's Dark Mode
2021-03-25 · Click to Load Website Images
2021-03-11 · Introducing PageRoast
2021-02-25 · ThriftyName: $5 Brand Names
2021-02-02 · Self-Hosting Fathom Analytics with DigitalOcean
2021-01-19 · Setting Up Fathom Analytics with Netlify
2021-01-13 · Introducing Notez
2021-01-05 · Animated Radio Tab Toggles
2020-12-28 · Disabling Comments in WordPress
2020-12-08 · Pure CSS Bar Graphs with Graceful Mobile Fallbacks
2020-12-04 · Obvious Javascript 'Injection' Fallback
2020-11-09 · Bidirectional Scrolling: Why Not Both?
2020-10-19 · Menu Toggle with Pure CSS
2020-10-07 · Poor Man's CSS Full-Bleed Layout
2020-09-29 · Simple Navigation Setup in Jekyll 3.9.0
2020-09-16 · Portable Pi: Cheap Raspberry Pi Zero Hacker Terminal
2020-09-09 · Over-Engineering an Oil Tank Gauge
2020-09-02 · My Raspberry Pi Desktop
2020-08-16 · Linux Mint MacBook Air Setup
2020-08-13 · Goodbye WordPress, Hello Jekyll (Again)
2020-07-07 · Improving Github's New Design
2020-06-22 · Keynote Slides with Pure CSS
2020-06-14 · Audio Hotkeys on Linux Mint
2020-06-04 · Quick and Dirty Theme Switcher
2020-05-13 · Mini Interactive Keyboard with Pure CSS
2020-05-06 · Fixing LocalWP on Fedora 32
2020-05-05 · WP Enqueue for Beginners
2020-04-29 · Faking 3D Elements with CSS
2020-03-31 · Stripe Menu Dropdowns (CSS)
2020-03-18 · Base64 All The Things! (Sometimes)
2020-02-07 · How to "FLOSS" as a Web Designer
2020-01-07 · Web Development on a $200 Chromebook
2019-11-29 · Billing for One CSS Change
2019-11-13 · Very Basic Form Styling
2019-11-01 · Improving Tufte CSS for Jekyll
2019-10-06 · Stop Using Sticky Navigation on Mobile
2019-09-28 · Being More Efficient as a Designer and Developer
2019-09-09 · Plain Text Emails, Please
2019-07-30 · Dynamic Checkboxes
2019-07-17 · Styling Empty Table Cells
2019-07-05 · Using HTML Validator Badges Again
2019-06-25 · They Won't Wait: A Warning for Slow Websites
2019-06-20 · Publishing Simple Books With Jekyll
2019-06-14 · Using Hamburger Menus? Try Sausage Links
2019-06-11 · Making Tables Responsive With Minimal CSS
2019-06-06 · Write HTML Like It's 1999
2019-06-04 · Using User-Select
2019-05-29 · News Websites Are Dumpster Fires
2019-05-22 · Text Align: Justify
2019-05-15 · Improving Receipt UX
2019-05-09 · Cut Your Forms in Half
2019-05-03 · First Letter Pseudo Element
2019-04-26 · Minimal CSS: Dropdown Menu
2019-04-23 · CSS Character Unit
2019-04-20 · Browser History Sucks
2019-04-15 · Yes, I Still Use jQuery
2019-04-13 · CSS Value: `currentColor`
2019-04-05 · CSS: Indenting Text
2019-03-26 · Simple Does Not Mean Ugly
2019-03-25 · Skip to Content Button
2019-03-13 · Prescription Form UI Improvements
2019-02-27 · Animated Card Tiles
2019-02-18 · Easy Toggle Switches
2019-02-15 · Super Mario Blocks in CSS
2019-02-05 · Proper UI Hierarchy
2019-01-28 · Tabbed Content Without JavaScript
2019-01-21 · Easy Custom Radio Inputs
2019-01-15 · Basic Gulp Build for Sass
2019-01-08 · Better Box Shadows
2019-01-06 · Over-Nesting
2018-12-19 · Using Parent Selectors in CSS
2018-11-28 · Width or Flex-Basis?
2018-11-22 · Adaptable Flexbox Grid
2018-10-18 · What Happened to Self-Hosted Blogs?
2018-09-28 · Using Multiple CSS Background Images
2018-09-20 · Pure CSS Simple Dropdown Plugin
2018-09-07 · Simple Accessibility
2018-08-07 · Setting Up a Free SSL
2018-04-16 · CSS Video Backgrounds
2018-03-24 · CSS Variables
2018-02-12 · Stay Hungry
2018-01-25 · Open Source Typeface Pairings
2018-01-14 · ET-Jekyll Theme
2017-11-20 · Chasing Performance
2017-11-01 · The Death of Personality
2017-10-10 · Unsolicited Design Review - Dropbox
2017-09-07 · Goodbye CSS Preprocessors
2017-07-10 · Designers Need Thicker Skin
2016-11-15 · The Wonders of Text Ellipsis
2016-06-28 · Aqua UI CSS Buttons