Feedy - RSS reader for e-ink (and more)
I’ve used many open source RSS readers. Miniflux, FreshRSS, Tiny Tiny RSS - all great projects, but something was always missing.
I like reading on my Onyx Boox Note Air 4C e-ink reader. The problem is that practically none of these projects are adapted to this type of screen. The same applies to websites themselves.
So I decided to build my own project that would satisfy me.
Simplicity first
From the start, I focused on simplicity. I didn’t want to build a separate frontend in React or Vue that would require its own build process and all that hassle.
I chose:
- SQLite - one file, zero configuration, backups are just copying a file
- FastAPI - fast, simple, great documentation
- HTMX - interactivity without writing JavaScript, HTML that does AJAX
The entire frontend is Jinja2 templates + HTMX + Tailwind. The server renders HTML, HTMX swaps page fragments. Simple and effective.
The process
First approach: universal scraper
Initially, I wanted to approach this broadly. The plan was simple - scrape any page and display it in a clean, readable form. I used the trafilatura library with a fallback to readability-lxml and BeautifulSoup.
Reality checks plans
This approach turned out to be… not quite right. Websites have very different structures. One site keeps content in <article>, another in <div class="content">, yet another scatters it across dozens of nested elements. Automatic extraction sometimes works great, and sometimes returns garbage.
Domain parsers
I settled on a hybrid approach. The general scraping strategy works for most sites, but for problematic ones I created “domain parsers” - dedicated extractors for specific domains.
I have separate parsers for Medium, GitHub, Wikipedia, and even for individual blogs I read regularly.
Is it a perfect solution? No. A site’s structure can change and the parser will stop working. But in practice it works well - sites change rarely, and when they do, fixing the parser takes a few minutes.
Important note: Feedy is a tool for convenient reading, not for bypassing paywalls or stealing content. Remember to visit the original sites - authors deserve your clicks.
Bookmarklet
I also added something like a bookmarklet. You drag a button to your browser’s bookmark bar, and then clicking it on any page lets you quickly add it to Feedy. It automatically detects RSS feeds if the page has one.
Three themes
I created three styles:
- Light - classic, readable
- Dark - for evening reading
- E-ink - no animations, high contrast, optimized for e-paper
The last one was the main reason for creating this project and I’m most satisfied with it.
Summary
Feedy is good enough for me. It does exactly what I need - fetches articles from my favorite sites and displays them in a clean form, friendly to my e-ink.
Maybe someone else will find it useful too, so I decided to share it.
Tech stack: Python 3.14, FastAPI, SQLAlchemy, SQLite, HTMX, Tailwind CSS
Repository:link to repo