Update for the week ending on Friday, Jan 16, 2026
mtlynch.io
- Published my December 2025 retrospective
- Fixed some dead links
- Linked to meshcore-open on my MeshCore post
- Fixed a dead link to buy Bowling Alone
- Started experimenting with merging book reports into notes
Refactoring English
- Published new chapter on overcoming writer’s block
- Worked on chapter about staying in flow state
- Fixed some cross references
- Asciidoc is pretty lax about syntax, so I didn’t realize my cross-reference syntax was wrong but still working until I had a more complex cross-reference
- Switched my build from Woodpecker to Nix CI
LLM Sandbox
Continued working on my LLM sandbox so I can run LLM agents in “yolo mode.”
- Tried to add firefox to the sandbox container, but it seems like running Firefox under a podman container is hopeless.
- Tried using podman machines so that the sandbox is an actual VM, but it kept failing, and I didn’t see enough value in the additional protection to debug it.
- I now mount my host’s global
.gitconfig as read-only so I can let the sandbox make commits with my info - Added common Linux utilities to the sandbox (e.g., curl, grep, jq, sed)
- Start codex with
--searchso it can search answers online
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).
- Continued working on design doc
ScreenJournal
ScreenJournal is basically Goodreads, but for TV and movies. Or letterboxd, but focused on small communities.
- Added an activity feed
- Added timeouts for the HTTP server
- Prevents slow loris attacks
- Added more rigorous checks for query errors
- Switch to cryptographic randomness for generating secret links
- Prevented a timeout on SMTP connections
- Refactor the app to share a single SQLite connection
beancount-chase-bank
- Added support for cash deposits
- Chase just changed the representation of cashback rewards to be cash deposits
- Switched to uv for managing dependencies
- uv just plays more nicely with Nix and feels smoother than legacy pip
- And fixed up some stuff I forgot and then again and again
- Cleaned up stale rules in
.pylintrc
go-evolutionary-migrate
I saw someone else created a simple SQLite migration library and realized I keep copy/pasting the same file to every project, and I could extract it to a reusable Go module.
- Implemented a basic version
- Updated to ncruces/go-sqlite3 v0.30.4
- Switched PicoShare to use it
- Switched ScreenJournal to use it
Streamablize
My personal utility for converting videos to web-streamable videos
- Improved error handling for ffmpeg
- Added go tests to the Nix build
- Added an AGENTS.md
Pointer Brother
Pointer Brother is a utility app I use for quick screenshot and image manipulation.
- Added a download as PNG option
- Used an AI agent to add playwright tests
MeshCore
libmeshcore-client
I realized I’m not actually implementing the peer-to-peer protocol; I’m implementing a library for device-client communication, though it reuses a lot of data structures from MeshCore’s peer-to-peer protocol implementation.
- Continued working on Python bindings
- Fixed my copyright notice
howdy-neighbor
- Switched from Woodpecker CI to NixCI
- Tested libmeshcore-client library in production
- But it actually broke the app, so I rolled it back
- Updated the README to point to meshcore-open
meshcore-open
- Improved the login error message display in the repeater login dialog
- Worked on a PR to auto-login when we have a saved password
HN Observer
HN Observer is a tool I’m working on to predict the outcome of submissions to Hacker News based on historical data.
fusion
fusion is an open-source RSS reader I found when looking for an RSS aggregator to host on my NixOS system. I like that it’s written in Go and uses SQLite as a backend, so it’s pretty easy to self-host. The maintainer is very responsive to PRs as well.
- Overhauled the app to switch from svelte to vanilla HTML/JS/CSS
- This was an experiment to see how well a sandboxed AI agent running in “yolo mode” could do
- Result: Looks pretty good! I might end up continuing with this to move the whole stack to a style I prefer.
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.
- Started working with an LLM to replace bulma with bootstrap5
- It got surprisingly far without me supervising
- I used Bulma when I started the project becuase I wanted to try something simpler than Bootstrap, but I now prefer Bulma and this is my only non-Boostrap project
- Switched to link tags instead of CSS @import
Awesome WM config
- Made my password managers “scratchpad” style so I can summon them to any desktop wtih a hotkey
- Added a hotkey to launch applications with gmrun
- It’s quick and has auto-complete
- Got rid of the hotkey for “maximize window”
- I didn’t even realize I had it and had trouble figuring out how to undo it
- I have a “fullscreen” button which basically does the same thing
Misc
- Started experimenting with zeitkapsl, an E2EE photo app
- Like: Feels snappy
- Like: Indie-run, and privacy focused
- Like: Pretty easy to use
- Dislike: Server is closed-source, so you can’t self-host it
- Dislike: The UI doesn’t make photo privacy clear, but I spoke directly to the devs and got a better understanding
- Submitted a PR to fix wording on an error
- Made some fixes to Phillip Dubach’s Cloudflre RSS Aggregator, based on the HN Popularity Contest
- Did monthly bookkeeping
- 1:1 with another founder