The source detail page is also coming along nicely.
Saving posts in Morgenblau has landed, which also means that a second lexicon is now officially in use.
Published a lexicon for the first time 🥳
Well, four actually + the permission set. Which means that the permission screen now looks really clean :)
Link to the lexicons: pdsls.dev/at://did:plc...
I originally wanted to use Skyreader's lexicons fully, but by now, I think having our own lexicons might be beneficial (like Glean does it).
We're still gonna interoperate with the other two readers though!
Wrote about the plans in the spec: tangled.org/dominik.soci...
The sources tab now is a bit more polished and shows post frequencies and when the last post was published so you can quickly spot noisy or abandoned feeds.
Decided to remove the “Create” part from the app. Instead, the menu now looks like this:
Discover: People & sources to follow
Sources: Manage/view individual sources
Library: Saved articles and ones shared by your network
Digest: “Feed” with daily buckets
Fixed a small bug where users always got redirected to the current day when closing an article, even when that article was from another day.
Feed entries in Morgenblau are now grouped into daily digests so you don’t have to worry about neither unread counts nor overwhelm when opening it.
Hope this gives more of a “newspaper”- instead of an “infinite feed”-feeling.
Codebase pretty much halved and the app is way more performant and “ATproto-native” now. Very happy with how this migration turned out: D
Had this sudden urge to try out Go this week and decided to just go for it on an experimental branch.
So far, the difference has been night and day when it comes to the available ATproto tooling. Will report back how the experiment goes.
YouTube videos now also open in a clutter-free interface inside of Morgenblau.
Soooo much better than the native ui 😮💨
The reader becomes usable 🥳
Extraction for feeds without embedded content also works pretty well (see second article that I open in the demo).
The feed now uses Inertia's deferred props feature to enable skeleton loaders instead of long waiting times.
Show thread (2 posts)
Favicons for feeds now get properly fetched with the help of this package: github.com/php-feed-io/...
Started with the visual polish today. Always makes me more excited to work on an app when it starts to actually look good.
A bit of behind the scenes improvements today: Made the feed fetcher more robust (e.g. auto-muting failed feeds after a while). Having Miniflux & FreshRSS as a reference really helped here.
Worked a bit more on the feed-io setup from yesterday and changed some AI workflow related tooling.
Reading tip for the day:
First PR on Tangled merged: The first iteration of the “Add Subscription"-Flow is done 🙌
Tangled is now the official home of the Morgenblau repo with GitHub being only a mirror (was inverted before). PRs, issues, etc. all live on ATproto from now on 🌌
Made a couple more improvements to the "Add subscription" flow (like not allowing to accidentally add the same feed twice).
Started to work on the “Add Source” flow. Save to PDS already works, the UI still needs a bit of polish.
Morgenblau is now being powered by Laravel + Inertia + React.
Probably worth it's own blog post about the why behind the decision, but the TLDR is: Laravel is just my favorite framework and where I'm most productive in :)
About finding your builder community online.
Small copy to clipboard interaction in billow.software.
Billow was pixel-perfectly designed by @cedric.design in Framer.
To implement the design, I created a little plugin that generates a markdown spec from any selected frame to paste into Claude Code as reference.
Works great so far 🙌
CMDK Menu in billow.software
A quick little demo* of Kai, the annotation tool I've been building over the past week.
Hugely inspired by agentation.dev, but I wanted to create something framework agnostic that you don't have to install inside your project.
Highlights from today's work on billow.software:
Polishing the auth flow for billow.software today 🪄
As always, h/t to @cedric.design for the clean design.
Worked on the main layout with its "scrolling window"-like structure this morning.
Don't mind the content for now, just placeholders :)
Today, I started to design the overall layout for morgen.blue.
In the process, I discovered this beautiful icon set, which I really like:
www.basicons.com
Getting started…
Github: github.com/hfrdmnk/morg...
Tangled Mirror: tangled.org/dominik.soci...
I just sent the first devlog newsletter for Morgenblau: buttondown.com/dominikhofer...
If you haven't subscribed yet and want to follow the process, you can do so over at morgen.blue
Some core concepts to explore for morgen.blue.
(I'll write a bit more about them in the next newsletter issue.)
Quoting @dominik.social
In case you missed my blogpost from yesterday: I'm building my own take on an atproto-based RSS reader!
If you're interested, you can follow along by signing up over at morgen.blue or by checking this tag on my website: dominikhofer.me/tag/morgenblau
I’m building my own RSS reader.
Turned @spatie.be's Laravel guidelines (spatie.be/guidelines) into a proper agent skill using Anthropic's skill-creator skill (what a name).
Some interesting patterns in there, we'll see how it goes 🤞
With the exams finished and my new personal website out in the world, it's time to dive into the world of iOS development again 🥳
I will talk more about the app in the next couple of days, but as a little teaser, here's the icon :)
Things are getting serious if I end my prompts to Claude Code with "Only present the plan if you're 99+% sure that it will work".
Dynamic offers in billow.software