Doing the ground work
Morgenblau Devlog #002

Hi and welcome back,
It’s been a minute since my last update here, but progress has been happening steadily behind the scenes. If you regularly read my personal blog, you might have seen that I’m currently doing a 30 day challenge where I commit at least once per day to the Morgenblau repo (and post about it on Bluesky). This gave me momentum, and Morgenblau is finally starting to take shape :)
In the meantime, another RSS reader based on ATproto has launched. It’s called Glean and you definitely should check it out if you haven’t yet! I’m very happy to see different takes on how the protocol can make an RSS reader better. And I will also do my best to integrate with the other apps in this niche (currently Glean and Skyreader) as best as I can. Because after all, the more people use any of the three products, the better features like discovering new feeds get. Exciting times!
In this devlog, I want to update you on two things that didn’t really fit in the short daily Bluesky posts. Let’s begin!
Tech stack analysis paralysis
When I first started building Morgenblau, it was clear to me that I’d build it in a TypeScript-based stack. Something like SvelteKit or Tanstack Start. Because it’s the programming language I have the most experience with, and the ATproto tooling there is excellent.
What’s not excellent in TypeScript-land however, at least in my opinion, is the fact that you need external tools & services for literally everything. Especially for backend features that go beyond having serverless functions that just run on demand. Things like background jobs, for example. Or a cache. I somehow always seem to think that it won’t be a big deal down the road, but when I get there, it always frustrates me how scattered the whole ecosystem is. Don’t get me wrong, for writing frontend code, I really enjoy using a TypeScript-based library, particularly React. For the backend, not so much.
That’s why after a couple of days of scaffolding Morgenblau with Tanstack Start and playing around with it, I switched to a stack I’m really enjoying these days: Laravel with Inertia/React on the frontend. It’s what I use at my day job, and the DX of Laravel is just unmatched for building apps as a solo dev. It is a “batteries included” framework, which means that 90% of things you need for developing an app (ORM, Auth, Queues, DB, …) work out of the box and can be easily configured. And with Inertia, the “glue” between the backend and frontend, one can still use React on the frontend. Which meant that with the help of Claude Code, I could pretty much port over the whole frontend from the Tanstack version in one go and didn’t lose that much time.
The only problems with this stack for Morgenblau in particular are the following:
The ATproto tooling for PHP (which Laravel is based upon) is really lacking compared to other languages. All the packages are made by third parties and sometimes not really up to date with what you get when you use the first party ones.
On the other hand, the biggest benefits of using Laravel, the tight DB integration with the Eloquent ORM and out-of-the-box auth, don’t really matter as much in an ATproto context. Both are pretty much fully handled by the protocol and the users’ PDSs. So you’re essentially just making your life harder without many of the benefits.
Which finally led me to the stack that I’m currently using (and very much enjoy): Go with a simple React-based frontend. Re-choosing React made it easy to not start from scratch again. And Go is the other language apart from TypeScript in the ATproto ecosystem that has excellent support for first-party packages. I also had this itch to try out Go for a long time, and this is the perfect excuse for it.
So that’s where we stand now: Morgenblau is now mainly a Go application, and it already feels way better than the Laravel-based version. It’s snappier but still leaner. And because of the solid standard library, it doesn’t have that many external dependencies apart from the ATproto packages like Indigo. This in particular, plus the fact that Go apps can be hosted in a simple way (essentially just put the binary on your server), makes me very excited about this stack when I think of the long-term vision I have for Morgenblau.
After all, I want to build a great product that lasts for a long time and not worry about hosting or relying on dozens of packages.
Updates to the product
When I wrote about the initial concept for Morgenblau in the last issue, I told you about the “three distinct views of the Atmosphere” (Discover, Consume, Create) and the “four first-class citizens” (posts, microblogs, videos, and podcasts). After starting to use the dev version of Morgenblau a bit, I’m making the following adjustments to the original plan:
Morgenblau won’t have a dedicated “create” view. The more I thought about building this feature, the weirder it felt. The app should embody a calm way of consuming content and interacting with it via the Atmosphere. Not make you think about what to post to Bluesky next.
This decision also allows me to move away from the strict “three top level pages only” approach I originally took. Right now, the main nav looks like this, which makes it way easier to let users discover the various parts of Morgenblau.

Podcasts are not a part of Morgenblau (yet). I feel like adding podcast support only makes sense when you build a native app that can be run in the background. However, Morgenblau will start out as a web app, and it doesn’t make too much sense to build a whole podcast player into it. In the long-term though, I’d love to think more about how we could re-add podcasts as first-class citizens. Maybe with a standalone app like Feedbin does.
What’s definitely staying is proper video support. It’s the feature I miss most in many other readers. YouTube is way too cluttered and distracting nowadays, and just subscribing to a few channels via RSS is definitely the smarter way to consume it.
I am already proud of how clean the viewing experience looks right now in Morgenblau. And it will only get better from here :)

A question for you
I want to finish each issue of this devlog with a question to you to a) get to know you better and b) learn more about how I can make Morgenblau better for you.
So my question to you for today is:
How are you currently discovering new blogs/feeds to read?
Just reply to this email or write a comment below with your answer (or any other feedback/ideas you have, of course).
Talk to you soon, Dominik
Add a comment: