Downread is finally in (semi-closed) beta. Sign up is still limited, as it's still running on *really* small servers, but here we go:
https://t.co/qDPbmka0Ww
#buildinpublic
While reviewing new Downread feeds, I came across this post: https://t.co/mHODZpdMte
And it's so true. While I make a living writing overcomplicated systems with cloud functions, Kubernetes, and cloud databases, I would never design such a system for myself. In a corporate environment, it's what people are experienced with, and "nobody has been fired for choosing AWS or Azure". So it kind of makes sense. But it's still the most expensive way to write a slow system.
Downread is very different. The software is deployed directly on the server, using agent-generated installation scripts. All data is as local as possible. The server's database is running on the same system as the server itself (I even tried libsql, but eventually gave up), and the database is mostly a data store. I try to keep everything in memory, and the data sharded to allow scaling without unneeded distribution. We'll see how it holds up in practice soon, but the load tests are promising.
It's July, and I thought by this time I would have a Downread beta ready. What happened? I realized that I need to move all EU personal data to separate servers. Downread now has two sets of servers, sharing public data but separating personal data. I am not a huge fan of this GDPR theater, but it is what it is. The heat wave didn't help either last week. The EU changes are mostly done, but probably cost me 2 weeks or so..
#buildinpublic
I've started doing load tests for Downread, and I am really happy with the results. The average request is handled in less than 10ms, while running on the cheapest $5/month 2 vCPU server I can rent. Once the server is warm, it's getting even better.
The whole design of Downread is to run as cost-efficiently as possible, so I can offer a generous free plan without going broke. Looks good so far.
Claude is down, so time for an update.
My pre-beta TODO list is shrinking, but tonight I had an idea I definitely need to implement: with my latest design, it has become super easy to use Downread without authentication. So I will do that. 30 feeds max, no private feeds, but everything else will work like the real one. Will make it really easy to try Downread, and I probably won't even need a landing page. You will go straight into the reader.
#buildinpublic
No beta yet, but focusing on better ways to handle RSS overload. Also using Fable to squeeze some of the older bugs. It's really good at finding solutions. But sometimes still needs to be nudged in the right direction.
Working on my mile-long to-do list. Today: support for YouTube. While Downread has always had rudimentary support for YouTube, today I added features like fetching the description and avatar and rendering all the info I get. This is what it looks like now:
#buildinpublic
I'm still working through my To-Do list for opening up the beta. Today, I added a reporting / flagging system, which is needed because users are submitting feeds to the feed catalog. Yesterday, I added a filter for the feed list.
#buildinpublic
Downread is now feature-complete. I have a few issues that still need to be resolved, and a beta will need a simple invitation system and a way to limit users. But other than that, I think I've come really far.
#buildinpublic
I'm trying Gemini 3.5 in Antigravity right now, and the code makes a good impression so far.
I think what irritates me most is that 'Antigravity' is such a 'cool', informal-sounding name. But the code agent is the complete opposite, very systematic, making plans for everything, producing artifacts. It doesn't feel as effortless as Claude Code or Codex.
It seems like most RSS readers work with (residential) proxies to avoid being blocked. So far, after adding 3.6k feeds, I was mostly lucky and didn't see a lot of issues, though. This may be because I am using Server4You, a relatively unknown hosting provider. But the only major site that caused issues was the Washington Post. No matter what I did, it refused to connect.
Today I finally gave in and set up my first proxy. It's a simple Cloudflare worker, and to my surprise, I can add the WP now. It's still causing additional issues right now. There are like a dozen different WP RSS feeds, but they all declare the same URL as their canonical URL, so Downread merges them into one. But that will be fixed soon - I have a new, more intelligent approach to detecting duplicate feeds anyway.
#buildinpublic
Oh, and while I know that many people won't ever get to a situation where they have read all posts, Downread makes it quite easy because it takes less effort to skip them, compared to other readers. That read flow is something I focus on, and I am very excited about the next improvement: single-click feed skipping. Basically, you can read all your feeds, provided that they fit on the screen and you don't need to scroll down, by just clicking on the same large area (or touch at the right bottom of your screen, if you're on mobile). No mouse/finger movement needed.
The last few days, I have added a random feed feature to Downread. It is the suggested feed when you run out of unread posts in your subscriptions, but you can also access it directly. It's like a firehose from a curated list of feeds, with some limits to prevent feeds from dominating it. It's still a bit heavy on entertainment news because these are the sites that generate the most posts (besides sports news, which I don't include). I think it's a great addition anyway.
#buildinpublic
Why I donโt just ship the MVPโฆ
For better or worse, you could say that my RSS reader Downread is MVP-worthy. It generally works. Despite the occasional flaw, Iโd claim that the UI is already more pleasant to use than Feedly, which I used until a few weeks ago. Common wisdom would be to release it to more people and gather user feedback.
But I believe that unless you have a truly unique piece of software, an MVP hurts. I tried a lot of beta software, and generally, they had enough flaws that I stopped using them. And then never bothered to try them again, even if they may be perfect now.
These days, the market is flooded by vibe-coded apps that generally work, but are just not that refined. And there are established competitors that work well for many people. And Gobbler, a brand-new web RSS reader. Not to mention countless open-source products that may be less user-friendly, but they are free in every sense.
So why not ship? My feeling is that the product must be perfect. This may be a perfect example of product release anxiety, but still... I donโt want somebody to look at it and decide itโs just another piece of AI slop. I donโt want people to think that itโs not a significant upgrade in usability to Inoreader or Feedly. Even if I canโt match their features for now, I want people at least to see my vision of improved usability. And I canโt do that when itโs not working flawlessly.
I spend a lot of time refining the UI to make it feel right. I think I have achieved this for the use case of reading a feed on both mobile and desktop devices. I am not 100% sure the tablet interface will stay as it is now, but itโs also ok. The next crucial part was what to do at the end of a feed, and after a lot of experimentation, I think I have found a solution that feels intuitive and keeps the user in the flow. And right now, I am trying to find a good solution for what happens when the user runs out of unread posts to read.
I need to communicate that all posts have been read, and give options on what to do next - either find other feeds, or just do nothing and maybe keep the tab open. In the latter case, I try to keep the user informed of any new posts that have been posted, and make it easy to start reading again. As of this writing, it's not ready, but making good progress.
#buildinpublic
I am currently fixing all the little things in https://t.co/IGGgZpx1oa to make it perfect. I haven't done any big features in the last few weeks, besides maybe the new list view mode. Here a screenshot.
#buildinpublic
Just returned from vacation, which I used as an opportunity to try https://t.co/IGGgZpx1oa as a user. I'm very happy with it at this point, even if I added about 30 TODOs, mostly for smaller UI improvements.
Also, the system ran without any restarts for two weeks, which is good.
I wasn't going to do any major changes for Downread anymore, but this week I noticed that I don't handle private RSS feeds very well. Basically, they are published in a public feed... so now I am in the middle of a major refactoring of the subscription system ๐
#buildinpublic