Until recently, I have been consuming RSS feeds by way of a self-hosted Nextcloud instance that delivers them to my phone. The problem is that using a mobile platform invariably leads to a more shallow reading experience - when scrolling through a large set of feeds it starts to feel more like a news aggregator site like Reddit and less like a curated feed (though I suppose it doesn’t help that I subscribe to the front page of Hacker News). I am far less likely to take notes or really remember what I read, and instead browsing these feeds turned into a time wasting activity more than anything.

To combat this, I started subscribing to more and more individual blogs and long form journalism sites, such as The Guardian Long Read and Longreads. I enjoy the format a lot more and it helps my feeds populate with non-technology commentary. What I don’t like is mobile screens and computer monitors: I find these screens exhausting when trying to read for long periods of time, they have glare and, worse, they are incredibly distracting.

The solution, of course, is to use an e-reader.

The end goal of this little project was to have remote access to long form RSS feeds on my kindle without adding too much friction. To work within these constraints I could not rely on manual updates or on connecting my kindle to my desktop. I just wanted the feeds to magically appear on my kindle’s library, ready to be read anywhere in the world.

Generating feeds

Many websites offer RSS feeds that are unfortunately truncated or deliver nothing but summaries with links to the appropriate website, if they offer RSS delivery at all. I find this distasteful as a matter of principle. More practically, however, it makes it far more difficult to read on the kindle - there is web browser that comes with the device, but it’s not very well suited to load all the bloat that comes with many modern sites.

Fortunately, I am not the only one with this issue. The good people at RSS-Bridge have created software that will generate both RSS and Atom feeds “for websites that don’t have one”. Or, as is my case, for websites that have poor feeds. To quote the RSS-Bridge repository:

_Dear so-called "social" websites._

Your catchword is "share", but you don't want us to share. You want to keep us within your walled gardens. That's why you've been removing RSS links from webpages, hiding them deep on your website, or removed feeds entirely, replacing it with crippled or demented proprietary API. **FUCK YOU.**

You're not social when you hamper sharing by removing feeds. You're happy to have customers creating content for your ecosystem, but you don't want this content out - a content you do not even own. Google Takeout is just a gimmick. We want our data to flow, we want RSS or Atom feeds.

We want to share with friends, using open protocols: RSS, Atom, XMPP, whatever. Because no one wants to have _your_ service with _your_ applications using _your_ API force-feeding them. Friends must be free to choose whatever software and service they want.

We are rebuilding bridges you have willfully destroyed.

Get your shit together: Put RSS/Atom back in.

To get this working I deployed RSS-Bridge with Docker on my server. Although it runs well by default, the documentation is not very clear on how to configure specific services. Turns out that custom configurations must be placed in a /config folder - the same folder that can be mounted by the container itself.

However, the directory is empty when first deployed and I couldn’t find any information on where the rest of the configuration files could be found. The RSS-Bridge documentation simply says that A default configuration file ("config.default.ini.php") is shipped with RSS-Bridge. After digging around the container I noticed that all the relevant files were located at /app (I tried adding that folder as a mount point, but this just led to a host of errors I don’t care to repeat here). By simply copying and editing the relevant config files into /config, RSS-Bridge was now set up.

Some feeds, such as those from The Guardian, also include links to their podcast. And much as I love long read podcasts, those are obviously unsuitable for the kindle. The solution then was to generate the individual feeds from whatever source I want and then re-run those feeds through the Filter feed in RSS-Bridge.

Downloading feeds

With the feeds successfully generated all that was left to do was to have them formatted correctly and then place them in my kindle. Frankly, this was the easy part: Calibre is already able to fetch various feeds with its “News” function. Of course, for this to work Calibre needs to be running, and one of my constraints was that I wanted this to work from anywhere in the world. The obvious solution was to add another service to the Docker RSS stack.

Another nifty feature that ships with Calibre is the ability to email books to an Amazon kindle address: by sending a document to an address that you specify on Amazon’s website you can have new content show up if you’re connected to the internet. Combining this with Calibre’s “News” feature and scheduled download, I now have a regular feed update that I can read on an e-ink display.