Writing · 79 posts · new post every month
The blog.
Frontend craft, developer tooling, and the things I learn along the way.
Lighthouse 41 to 100 - Delete the Cool Thing First
I shipped a WebGL fluid simulation on my homepage and Lighthouse gave me a 41. Here is everything I had to delete, measure, and un-animate to get to 100 on a real phone.
Read post
2026
47 posts- Aug 01, 2026 Glance - A Self-Hosted Alternative to Claude Artifacts 3 min read
- Jul 07, 2026 The Five Ways to Bring Your Boss a Problem 3 min read
- Jul 06, 2026 A Sandbox That Boots in 60ms - MicroVMs vs Containers for Untrusted Code 3 min read
- Jul 06, 2026 Rendering Millions of Points in the Browser Without Killing the Tab 3 min read
- Jul 06, 2026 The Part of the Job AI Can't Grade - A Developer's Edge in the Age of AI 3 min read
- Jul 06, 2026 You Can't Avoid the Hard Part - When to Take the Big Swing 3 min read
- Jul 05, 2026 Being Cheap With Your Tools Is a Tax on Your Time 3 min read
- Jul 05, 2026 A Different Favicon for Dev, Preview and Prod 3 min read
- Jul 05, 2026 You Are the CI Now - Local CI With gh-signoff 3 min read
- Jul 04, 2026 Make Claude Build Your Slides with reveal.js, Not a Design Tool 3 min read
- Jul 04, 2026 Don't Just Ship With AI. Learn With It. 4 min read
- Jul 04, 2026 Orchestrating AI Models Like a Tech Lead 4 min read
- Jul 04, 2026 Forget Job Titles, Staff Your Team by Archetype 3 min read
- Jun 05, 2026 Distill Your Codebase to Its Essence 6 min read
- Jun 01, 2026 Give Claude Permanent Memory with Basic Memory MCP + Obsidian 7 min read
- May 31, 2026 Building a Homelab Automation Stack with Hermes Agent 10 min read
- Apr 15, 2026 Bun.SQL: I Stopped Fighting Node.js and Finally Built a Backend 4 min read
- Apr 14, 2026 Ghostty AppleScript: Auto-Build Your Project Terminal Layout on Startup 4 min read
- Apr 13, 2026 nvim-treesitter Was Archived. Here's What You Actually Need to Do. 3 min read
- Apr 10, 2026 How I Built My Personal AI Assistant with Bun and the Claude Agent SDK 3 min read
- Apr 09, 2026 LazyVim: The Neovim Distro I Wish I'd Started With 3 min read
- Apr 08, 2026 Stop Burning Tokens: How I Cut My Claude Code Costs in Half 3 min read
- Apr 07, 2026 The MCP Servers Worth Installing in 2026 (Frontend Dev Edition) 3 min read
- Apr 06, 2026 Claude Code Security: AI That Scans Your Codebase Like a Security Researcher 4 min read
- Apr 03, 2026 Bun's Terminal API - Write CLI Tools Without the Boilerplate 3 min read
- Apr 02, 2026 fzf — The One CLI Tool I Recommend to Everyone 3 min read
- Apr 01, 2026 Bun Is Now Part of Anthropic — What That Actually Means for You 3 min read
- Mar 31, 2026 Neovim 0.12's Built-in Plugin Manager — Should You Ditch lazy.nvim? 3 min read
- Mar 30, 2026 Claude Can Now Control Your Mac — Here's How I'm Using It 3 min read
- Mar 28, 2026 The 2026 Mac Terminal Setup: Ghostty + Starship + Catppuccin 2 min read
- Mar 27, 2026 Claude Code /loop - Recurring Autonomous Workflows That Actually Work 3 min read
- Mar 26, 2026 avante.nvim vs CodeCompanion - AI Inside Neovim in 2026 3 min read
- Mar 24, 2026 Claude Code Hooks and Subagents - The Advanced Stuff 3 min read
- Mar 21, 2026 Ghostty Panes vs tmux Panes - When to Use Which 3 min read
- Mar 18, 2026 My CLAUDE.md That Actually Works 3 min read
- Mar 17, 2026 Ghostty + tmux - The Productivity Setup I Actually Use 3 min read
- Mar 16, 2026 Ghostty 1.3 — Scrollback Search and My Updated Config 3 min read
- Mar 15, 2026 My Neovim Config - Opinionated, Minimal, and Actually Usable 5 min read
- Mar 13, 2026 AeroSpace - Stop swiping, start switching 5 min read
- Mar 12, 2026 How to keep code quality high when AI writes the code 5 min read
- Mar 07, 2026 clipssh - Paste Screenshots Into Your Remote Terminal 2 min read
- Mar 06, 2026 2026 Is the Year of CLIs, Skills, and APIs 4 min read
- Mar 03, 2026 Building for Agents - When AI Becomes Your Primary User 5 min read
- Feb 25, 2026 You Don't Need OpenClaw - Claude Code Is Already a Personal AI Assistant 6 min read
- Feb 23, 2026 How I Turned Slack Chaos Into Linear Tickets With Claude Code 4 min read
- Feb 21, 2026 How I Actually Use Claude Code - A Workflow That Works 3 min read
- Feb 21, 2026 Building Reusable Bun Modules - Why Bun Makes It Stupidly Easy 5 min read
2025
9 posts- Nov 07, 2025 Seamlessly Switch Between Personal and Work GitHub Accounts on macOS 6 min read
- Oct 25, 2025 A Minimal Ghostty Config (That Actually Makes Sense) 3 min read
- Aug 16, 2025 AI Coding Revolution: How Artificial Intelligence is Changing the Way We Code 5 min read
- Aug 15, 2025 How to Enable Borders on Vim LSP Hover Information (The Simple Way) 5 min read
- Jun 03, 2025 The Magic of Smooth Scrolling: Two Lines of CSS That Transform User Experience 3 min read
- May 01, 2025 Linear MCP Server – The AI Sidekick You Didn't Know You Needed 2 min read
- Apr 04, 2025 GitHub's MCP Server Goes Public - A Game Changer for AI Development 4 min read
- Feb 19, 2025 Vibe Coding: When AI Becomes Your Coding Bestie 4 min read
- Feb 11, 2025 Connect to Sentry MCP Server - A Developer's Guide 3 min read
2024
5 posts- Jul 28, 2024 Demystifying codebases: How to use AI to understand complex codebases easily and quickly? 4 min read
- Mar 02, 2024 The Ten Commandments of Software Development 2 min read
- Feb 26, 2024 Things learnt from BunJS to CRA migration 3 min read
- Feb 10, 2024 Supercharge your Git Workflow with the Jira-Git Commit VSCode Extension 5 min read
- Jan 20, 2024 Enforcing coding standards via Typescript, Husky and Lint-staged 4 min read
2023
4 posts2022
13 posts- Dec 27, 2022 Frontend Performance Optimisation 4 min read
- Nov 18, 2022 Useful CSS Generators 3 min read
- Sep 24, 2022 You don't need these many state variables 2 min read
- Aug 20, 2022 My take on CSS Grids 4 min read
- Aug 12, 2022 Monitor your website speed using Pagespeed API and Google Sheets 3 min read
- Aug 10, 2022 How to create React Hooks? - A simple guide 3 min read
- Aug 05, 2022 How to cache your Gatsby site for faster builds in Github Actions? 2 min read
- Jul 27, 2022 Dynamic OG images for your Gatsby blog 5 min read
- Jul 15, 2022 How I started a tech blog? 3 min read
- Jul 12, 2022 Growing your Online Presence - 101 3 min read
- Jul 10, 2022 How to post to Instagram using an API? 2 min read
- Jun 27, 2022 How to Select a Random Value from an Array? 3 min read
- Jun 19, 2022 Bookmarklets - No more boring tasks 3 min read