Update for the week ending on Friday, Nov 6, 2026
mtlynch.io
- Published “The MustCreate Pattern for Go Tests”
- Replaced CircleCI with NixCI
- And tuned Nix builds to cache better
- Moved source repo from GitHub to Codefloe
- Moved hosting from Netlify to Surge
- Switched external link checks from htmlproofer to Lychee
- I’ve been using htmlproofer for like 8 years and never looked into alternatives, but now I’m checking like 2000 external links on every commit
- Lychee + Nix lets me cache the results so I don’t check unless the links change
- I partitioned the links into five host groups so that I’m not checking every link every time, but it’s spread out enough that I expect most hosts to get checked every few weeks
- Updated URLs to reduce redirects
- Drastically simplified the list of dead link excludes
- Fixed a bunch of dead links
- Added a completion date for Refactoring English
- Matched inline code height to surrounding text and removed extra padding
- Added Prettier coverage for Hugo shortcodes
- Added an `AGENTS.md file
- Improved layout on tag index pages
- Added
.envfiles to.gitignore - Fixed a typo in
NOTICE
Refactoring English
Book
- Published 1.0.12 revision
- Fixed some grammar errors
- Changed PDF rendering to prevent blockquotes from straddling multiple pages
- Continued tuning vertical margins between headings and lists and paragraphs
- Fixed awkward page breaks
- Added a test to make sure chapter titles never are large enough to cause a line break
- Simplified markdown semantics so that newline always means newline
- Previous implementation ignored newlines unless they were preceded by backslash, which revealed I was accidentally swallowing newlines that I meant to be newlines
- Trimmed some low-value tests
Website
- Added a shortcode for generating table of contents headers at site generation time
- Adjusted vertical spacing to match the book
Feedback app
- Ported improvements from go-app-starter
Lockwood Backend
- Ported improvements from go-app-starter
go-app-starter
- Updated Go testing guidance
- Updated to Flyctl 0.4.111 for deployment and development
- Added stricter static analysis for Go code
- Continued tuning the workflow of backporting changes from child repos
- Fixed nix-ci’s default branch name
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).
ScreenJournal
ScreenJournal is basically Goodreads, but for TV and movies. Or letterboxd, but focused on small communities.
- Ported improvements from go-app-starter
HN Observer
HN Observer is a tool I’m working on to predict the outcome of submissions to Hacker News based on historical data.
- Ported improvements from go-app-starter
Grosiree
Grosiree is a shared grocery list web app I’m making with my wife to show her how vibecoding works.
NixOS config
- Added more rules for forgejo in AGENTS
- Added a global
AGENTSrule to tell agents to stop editingREADME.mdorAGENTS.md- All their edits are pretty bad, and it’s easier if I just do it for them.
- Increase frequency of TickTick API polling from every 60m to every 8m
- Reduced the number of things that require restarting my entire AI sandbox VM
- Bumped sandbox VM resources to 12 vCPUs and 24 GiB of RAM
- Refactored code to avoid duplicating my username everywhere
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.
- Updated Docker container to Alpine 3.24.4
- Changed guest links to always use the injected clock
- In production, I was cheating by letting it call
time.Nowdirectly, which made it hard to test certain scenarios
- In production, I was cheating by letting it call
- Fixed a bug in upload failure error messages
- Published a security advisory
- It’s pretty minor, but I guess PicoShare has ended up in some kind of targets list, so I was getting a new security report about the same issue every day until I published it
aw-web-ng
- Fixed aggregation across multiple days
- Fixed date-range error messages
- Ported improvements from go-app-starter
logpaste
- Updated to go 1.27.3
- Eliminated a dependency on Gorilla mux
- Deleted dead links to logpaste.com
- I stopped renewing the domain a while ago
- Deleted a broken CI deployment to Fly.io from CircleCI
- I deleted that server earlier this year
- Updated to go-evolutionary-migrate v2.0.1 for SQLite migrations
Weekly snippets
- Limited Forgejo commit scans to the current week rather than the full history
- Updated Surge to 0.55.0
- Improved logging on forge HTTP requests
Maildir Viewer
- Improved logging when full-text searches fail
- Fixed a stack overflow issue when searching deeply nested HTML email without plain-text alternatives
- Ported improvements from go-app-starter
Misc
- Backed up my WakaTime data and canceled my subscription
- Good few years, but I get better information from self-hosting aw-web-ng