Introducing Bubo RSS: An Absurdly Minimalist RSS Feed Reader
Tags: webdev, netlify, rss
Published: 2019-11-29 00:23:02

---
title: Introducing Bubo RSS: An Absurdly Minimalist RSS Feed Reader
published: true
date: 2019-11-28 00:00:00 UTC
tags: webdev,web-development,netlify,rss
canonical_url: https://george.mand.is/2019/11/introducing-bubo-rss-an-absurdly-minimalist-rss-feed-reader/
---

[Bubo Reader](https://github.com/georgemandis/bubo-rss) is a somewhat irrationally minimalist <acronym title="Really Simple Syndication">RSS</acronym> and <acronym title="JavaScript Object Notation">JSON</acronym> feed reader you can deploy on [Netlify](https://netlify.com) in a few simple steps. I created this one weekend last summer after nostalgically lamenting the [demise of Google Reader](https://killedbygoogle.com/) many years ago. It's named after the [silly robot owl](https://www.youtube.com/watch?v=MYSeCfo9-NI) from the film _Clash of the Titans (1981)_.

**View the demo** → [bubo-rss-demo.netlify.com](http://bubo-rss-demo.netlify.com/ "Bubo Reader Demo")  
**View the source code** → [github.com/georgemandis/bubo-rss](https://github.com/georgemandis/bubo-rss "Bubo Reader GitHub Project")

You will find instructions on the [project's GitHub page](https://github.com/georgemandis/bubo-rss) for how to make your own instance of Bubo Reader, update the list of feeds and deploy to Netlify. If you already have interconnected accounts on those two services it's really quite straightforward!

Read on for more information about the original impetus, design goals and thoughts surrounding this project.

### What Does "Irrationally Minimalist" Mean?

Many RSS readers—including the former Google Reader—would pull the contents of a post into your feed so you could read everything in one place. Although I completely understand why someone would want to do that, I decided even that introduced too much complexity for my liking.

My goal with Bubo Reader was to be able to see a list of the most recent posts from websites I like in one place with links to read them if I want. That's it. If I want to read something, I'll click through and read it on the publisher's site. If I want to keep track of what I've clicked on and read I can reflect that using the `a:visited` pseudo selector in my CSS.

I think it's often overlooked how many problems the browser has already solved for us. Sometimes modern web development feels like fighting against the problems we've already solved as we try to build things that pretend they don't live in the browser.

Bubo Reader does not store posts in a database or keep track of what I've read. If an item is no longer available in the site's feed then it no longer appears in Bubo. If I miss something, that's just life. I can live with that.

### Design Goals for This Project

Many RSS feed reader services have sprouted up since Google Reader left, but they all do more than I need. All I wanted was something that:

- **Had an absurdly simple interface, relying almost entirely on default HTML/browser behaviors and functionality**. I'm using lesser-known HTML like the [`details` and `summary` elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details) to hide and reveal content instead of recreating that wheel in JavaScript, for example.

- **Could be themed with CSS or mildly extended using JavaScript**. For my personal copy of Bubo Reader I changed the font to use the `system-ui` font and bumped the font-size a little, but that's mostly it.

- **Didn't worry about pulling in the link's _content_ into the reader interface**. I'm happy to read most content on the site it originated from and many feeds only provide a short description of th content as it is. Mostly I wanted a single dashboard to know when new stuff is published and available.

- **Didn't rely on a database to see what I've read or keep an archive of content over time**. Again, I found the browser has a way of taking care of this for me. The `a:visited` pseudo selector is enough indication for me to know whether or not I've already read something.

### A Healthier Way to Read Online

I also think this is a healthier way to consume information and news. So much of social media is designed to reward things that hit the dopamine buttons in our brains, manipulate our common, [human propensity for anxiety](https://en.wikipedia.org/wiki/Fear_of_missing_out) or distrubute outright propaganda.

### Refreshing Content

The beauty of running Bubo on Netlify is you can [setup a Build Hook](https://www.netlify.com/docs/webhooks/#incoming-webhooks) to rebuild the site when you want to "refresh" the list of feeds. I'm using [IFTTT](https://ifttt.com) to trigger rebuilds once an hour, which is a perfectly sane rate to consume information at. You could do the same, or use another service like Zapier, EasyCron, setup a cronjob on your server or even setup a cronjob to run locally on your machine and ping the hook as often as you wish.

### What About Authentication?

There is no authenticaton required for Bubo Reader. Netlify does offer Basic Authentication under their [Pro plan](https://www.netlify.com/pricing/), which would probably be the easiest solution to implement. You could also utilize their [Identity](https://www.netlify.com/docs/identity/?_ga=2.147267447.1334380953.1567004741-1681444902.1549770801) feature to add some authentication. I don't subscribe to any private or sensitive feeds, so at the moment that isn't much of a priority for this project.

### Adding New Feeds

Find them in the site's source code and add them to the `feeds.json` file. This is the trickiest part of this whole setup I suppose, but I'm willing to bet the people who clone projects from GitHub and deploy them to Netlify are okay with editing a little JSON from time to time.

The first version of this project used [Puppeteer](https://github.com/puppeteer/puppeteer) to extract the feeds from a site. This was actually quite cool, but would hang or fail periodicially. Builds were slow and there was a lot of work making sure things didn't timeout or use too much memory on the tiny server I'd setup. Simply parsing a list of known RSS feeds was much simpler and faster.

It's on my list to look into converting this into a serverless version that could run using Netlify's Functions, but after using my own project for a month I realized it didn't make the thing feel much more usable to me.

### In Summary

If you find Bubo Reader useful, interesting or it inspires a project of your own I'd love to hear about it! Again, you'll find [the code on GitHub](https://github.com/georgemandis/bubo-rss "Bubo Reader Github Project").