Posts
Thoughts on software, agent loops, and building businesses.
July 9, 2026
Hourly SQLite backups to object storage with Kamal
One small service takes a consistent snapshot with VACUUM INTO, verifies it, gzips it, and ships it to Hetzner Object Storage every hour. No extra infra, no host cron.
July 5, 2026
My session died after every deploy
Two small Rails defaults made auth feel flaky: a browser-session cookie and an implicit secret setup.
July 4, 2026
Catch N+1 queries early with the Bullet gem
Bullet flags N+1 queries and needless eager loading while you develop, and fails your test suite when one slips through. Here's how I wired it into a Rails 8 app.
July 4, 2026
Automatic Rails deploys with Kamal and GitHub Actions
Moving from laptop deploys to deploy-on-merge: build on the runner, push to GHCR, ship to Hetzner, ping Telegram.
June 20, 2026
Kamal deploy says green. HTTPS is broken.
The health check and SSL provisioning race on first deploy, and how to catch it before your users do.
June 15, 2026
Getting the most out of your Claude Max plan
How I stopped slamming into the 5-hour usage cap, and trimmed a surprising amount of wasted compute along the way.
May 18, 2025
Redirect naked domain to www with Kamal
A quick recipe for redirecting your naked domain to the www subdomain when deploying Rails with Kamal.
April 21, 2025
Zero-downtime Rails deploys on a single VM: Hetzner and Kamal
How to set up a Hetzner server and ship your first Rails deploy with Kamal.
April 8, 2025
Build a photo gallery in Rails with Cloudinary (free tier)
Notes to my future self on building a photo gallery in Rails with Cloudinary, using a single bucket for dev and prod to stay on the free tier.
April 1, 2025
How to replace email in git history
Change your Git commit history email using git-filter-repo. A step-by-step guide with setup, usage, and common issues to watch out for.
March 30, 2025
Automate releases with GitHub Actions and release-please
Set up automated versioning and changelogs with release-please and GitHub Actions, driven entirely by your conventional commits.
November 1, 2023
Load-more pagination with React Query and Rails
Implementing 'load more' pagination with React Query's useInfiniteQuery against a Ruby on Rails back-end.
October 9, 2023
SPACE metrics for engineering teams
The SPACE productivity framework for engineering teams, broken down across five dimensions.
August 31, 2023
How to add Google Sign-In to Rails without Devise
Implement Google login on your Ruby on Rails app with pure Omniauth, no Devise required.
July 5, 2023
Rails: auto-formatting on VSCode
Use Syntax Tree to auto-format your Ruby on Rails files on Visual Studio Code, and stop arguing about formatting in code review.
June 26, 2023
Using ActiveSupport in plain Ruby scripts
How to use ActiveSupport's convenience methods in plain Ruby, without pulling in all of Rails.
No posts match your search.