I have long had a habit of bookmarking interesting blogs online then never reading them again. Part of setting up my own blog was the RSS feed, and with AI now, I thought it would be quick to take a folder of the ~2k bookmarks and turn it into an RSS feed so I could actually leverage all those links. Plus, I’ve seen all those cool projects where people re-use old electronics, and I wanted to learn how to do this.
So, now I have converted 2,134 bookmarks I never read to 1,661 feeds accessible in a private app hosted on an old Samsung phone that I will now also find excuses to never read. Exciting!

The actual set-up took about ~2 hours, maybe less. I had gone back and forth with Claude for a while about a set-up and technology stack that I wanted for a few days prior, so I already had a clear, straightforward implementation plan. I think it helped that this is a pretty common (as common as projects like this could be I guess) design for hosting small web projects. I’ve seen quite a few blogs that run on old cell phones on the Indieweb by now.
So, stack:
- Termux (from F-Droid),
- First time downloading an app from F-Droid. I received many warnings about downloading an app from an external source. Bit nervous about this as well. Probably the most painful part was just typing the whole script into the command line from the phone keyboard.
- PHP,
- Command line scripts to run were quick to figure out with Claude AI
- Doing this the weekend before the PHP2Shell vulnerabilities were publicized, which made me panic a bit. But since the phone is only accessible on my wi-fi and through Tailscale, I didn’t think it was an immediate concern, and I updated to 8.5.12 within a day.
- Tailscale app to connect to the host phone from my day-to-day phone
- Really convenient application! Recommend for its easy set up.
- FreshRSS with SQLite,
- Again, the set-up scripts largely were plug and play.
- and a small refresh script that runs every 6 hours. With about ~1,600 feeds, this failed in the first few days; I had to set new parameters on the script to increase memory to 512M and not timeout after 300 seconds.
Adding the bookmarks:
- Firefox backup export converted to OPML file,
- Claude AI was able to convert this for me, just pointing it at a /blogs subfolder in my bookmarks.
- You can only do the export on desktop, oddly; the mobile browser wouldn’t let me.
- Scraped RSS feeds from the sites,
- Originally I did not bookmark the RSS feed itself, but just the homepage of each site. So I needed to write a polite as possible script that checked each website for an RSS feed, which Claude AI assisted with. A few sites like Substack have predictable endpoints; the indie blogs switch back and forth between feed styles, so each site usually took a few guesses.
- Unsurprisingly, a number of the sites were either no longer up, or not found, or not actually blogs (my bad when bookmarking), rejected any scripts, or used JS to the extent I couldn’t pull a clear link.
- I resorted to just visiting a few websites that I knew I liked reading and finding the RSS button, and Claude AI was actually able to just guess a few based on its training data that I verified. Not a big lift.
Still to resolve:
- Switching the Tailscale VPN on / off to access the site is an extra step that would be nice not to have.
- Manually trying to find the RSS feed on each site, then copy-pasting into the application is a bit irritating, versus the 1-click “Add to Bookmarks”.
- Additionally, each time I add a feed, all the articles are fetched and appear in the current day, drowning out any other new articles, which is frustrating. I didn’t realize that the RSS feeds fetch seemingly every article.

It feels a bit strange to work on side projects now with LLMs. Extracting the bookmarks from the Firefox backup and converting it to OPML would take me 10x the time it takes the LLM probably. Plus the time to collect the RSS feeds…, I definitely can do more of these projects that I previously wouldn’t have bothered with.
And there is still the excitement of getting something working, but no longer the satisfying click of understanding it, like seeing the exact line in a chess puzzle that wins after staring at it for some time. It’s more now an appreciation or awe at how quickly these tools can write code - but not as personally fulfilling.