Update for the week ending on Friday, Sep 18, 2026
mtlynch.io
- Published August retrospective
Refactoring English
Book
- Iterated more to clean up the print version
Book website
- Fixed redirects to HN popularity contest that accidentally broke in the migration to Surge
- Added a testimonial from Vincent Bernat
- Added support for purchasing team licenses
- Backported book improvements to the public excerpts
- Fixed low-contrast issues to meet WCAG standards
- Tweaked wording on landing page
Webhooks server
- Started working on a replacement API to Buttondown
- Refactored route registration to match my other Go projects
- Simplified failure reporting
- Added importers for historical CSVs from Kicktstarter and Stripe
- Added a SQLite database to persist transaction metadata
Feedback app
- Worked on switching feedback app authentication to custom Refactoring English webhooks server
- Currently, it authenticates users by verifying that their email address exists as a paid subscriber on Buttondown and then sends them a magic login link.
- I’m switching it to remove the dependency on Buttondown, so it checks my custom webhooks server instead
HN Popularity Contest
- Fixed Vincent Bernat’s page to aggregate his old domain name with his new.
- Updated preprocessing script to fix malformed URLs
- HN weirdly allows URLs like
https:///example.com(extra forward slash), so I canonicalized them to normal format - There were also URLs with
:443appended to the domain name, so I stripped those out.
- HN weirdly allows URLs like
- Used AI to update metadata for a bunch of authors
- Used AI to add more excluded domains
- Fixed author name for yoseftk.com
- Fixed a character encoding bug that could make excludes sorting non-deterministic
Mail Archiver
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.
- Added asynchronous full-text search
- Added exclusion for URLs and mailto links after realizing words appear in random base64-encoded values in URLs
PicoShare
PicoShare is a minimalist web-based file sharing tool I’m working on. I’m often frustrated that I can’t just send someone a link directly to a file because every file-sharing service tries to re-encode images/video or wrap their own viewer around other files, so I’m making a simple self-hostable tool that lets you upload files and share them with other people.
- Added support for protecting downloads with a passphrase
- Added icons for expiration and note labels
- Cleaned up the UI on a few pages
- Refactored the entry metadata update tests
- Removed legacy bang download routes
- Replaced
?placeholders withsql.Namedin file chunk queries - Refactored
sharedSecretFromEnvto return the shared secret rather than the passphrase - Simplify how we serve the download view
- Simplified
Clockinterface to singleNowfunction - Did a similar simplification with the space check function
- More strictly parse entry IDs at creation time
Misc
- Bought a new 2 TB SSD
- My main NixOS SSD is 2 TB, but I keep running out of space and having to delete containers or VMs.
- I have 20 TB of NAS storage, but I can’t run containers or VMs there.
- I sprung $450 on a new Samsung 990 PRO and was excited to get it
- The day I got it, I started prepping my NixOS config to install the drive and configure it to host all my VMs and Podman containers.
- I use an LLM to help, and it says my NixOS config already shows two additional SSDs installed: a 2 TB Samsung 980 EVO and another 1 TB SSD
- I think it must be wrong, and then I remember that when I switched from Windows to NixOS, I kept my Windows drive on hand in case I needed to retreat back to Windows.
- I haven’t logged into the Windows OS in over a year and completely forgot about the spare SSD.
- So, I’m returning the new SSD and I wiped my Windows SSD to use as my VM/container SSD.
- I still have the spare 1 TB SSD that I have to figure out what to do with.
- Struggled with Wise
- I created an account in 2021 but haven’t used it since 2022
- I have a new vendor that wants to pay via Wise, so I logged into my old account
- Wise put me through the new user flow, which was confusing, and I had to do a bunch of ID verification steps
- They wouldn’t let me attach a bank account without giving them permission to dig into my private bank history via Plaid and Yodlee.
- Usually I can decline this and do the manual deposit steps, but Wise doesn’t allow it
- I finally tried testing a transfer into my account by depositing $5 from my credit card, and it immediately shut down my account
- I called support, and they said I had created a duplicate account with the same email address and phone number (how can I create two accounts with the same email?!?), so they shut down my duplicate account
- I asked how I can get back to my “original” account, and they said it was “automatically deactivated” in 2024 but didn’t explain why
- I asked what the path forward is, and they said I could file a formal complaint, so I did. No response yet.
- Brought back logging for DB migrations
- I accidentally dropped this when I extracted the logic to a reusable library