Update for the week ending on Friday, Aug 14, 2026
mtlynch.io
- Published my July retrospective
- Simplified my monthly metrics for months where sales revenue is my only financial metric
- I used to have consulting revenue and sponsorships so it made sense to show a total, but it’s silly to keep summing a single number each month
Refactoring English
Book
- Continued working on section about blog titles
Website
- Added an author photo
- I spent a few hours talking to local photographers but running into various issues with all of them, and then I finally just put up a photo my wife took of me a few years ago.
HN Popularity App
- I moved this to a dedicated repo and domain
- I now host it entirely on Bunny rather than having the app on Netlify and the data on Bunny
- It’s now easier to write unit tests for the app
Little Moments
Little Moments is an open-source web app I’m working on to replace the current family photo sharing app (TinyBeans) I used (which I strongly dislike).
- Added support for deleting media files rather than just metadata
- Pulled a file store interface out of the media processors
- Renamed
FilenamestoFileSizeVariants - Renamed metadata store to distinguish from file store
- Change full-size files to have the same shape as other media variants
Mail offlining project
I’ve been meaning to take my old mail offline because it’s a lot of sensitive information to store in plaintext with a third-party vendor, but I’m deathly afraid of losing email, so I’m trying to be cautious about the move. I don’t want to delete a folder just because I think I have it archived and later find out I didn’t capture all the messages.
- I use two services to archive emails: imapgoose and offlineimap
- Their archives don’t match, which has always made me nervous, but I never set aside time to investigate the exact differences
- I made a mail diff viewer that showed the difference between my imapgoose archive and my offlineimap archive
- offlineimap had stale snapshots of messages that had been moved
- e.g., I moved a file from folder
footo folderbar, but offlineimap had it in both locations, whereas imapgoose correctly only had it in the new location
- e.g., I moved a file from folder
- offlineimap seems to fix malformed messages whereas imapgoose preserves whatever the server has, so I had to canonicalize messages to a single form before comparing for differences
- offlineimap had stale snapshots of messages that had been moved
- The result was that imapgoose had everything that offlineimap had, so I trusted imapgoose as a reliable archive
- Created a local mail archive viewer that’s kind of like a simplified Gmail over my local archives
- It creates a unified view of my mail across my offline archived messages and my mirrored archive of my live Fastmail messages
- It lets me atomically move messages from my live Fastmail mirror to my offline archived folder
Weekly Snippets
- Moved from Netlify to Surge
- This is me dipping my toe into a static hosting platform that isn’t Netlify
- Migrated the code from Codeberg to GitLab
- I accidentally pushed an old branch to Codeberg that added a bunch of data, so I was over their 100 MB limit, even after deleting the branch
restic backups
- Pruned my backups
- Reviewed the contents of my restic snapshots and excluded directories that didn’t need to be backed up but were large or had millions of files
- Added a script for purging ignored patterns from snapshots
- Added a better script for purging my old ZFS snapshot files
go-app-starter
go-app-starter is my personal boilerplate for starting new Go web apps.
- Added AI prompts for backporting improvements from child projects and pushing them down to the projects that don’t have them
- Synced a bunch of improvements among child projects
Misc
- Migrated my VPS data from OVH to Hostinger