Damus

Recent Notes

Substr profile picture
Substr progress update: faster navigation, cleaner loading states, better signer UX

I wanted to share a quick Substr update after a pretty busy round of polishing and fixes over the past week.

A lot of time has gone into improving how the app feels in day-to-day use, especially around speed, loading states, and account/signing UX.

Here’s what changed recently:
• Navigation between community pages and thread pages is now much smoother, so moving between /s/ and /p/ feels faster and less jarring.
• Loading skeletons were improved across key views to make data loading feel more intentional and less abrupt.
• Engagement loading was cleaned up, so replies, likes, and zaps no longer flash misleading 0 values before the real data arrives.
• Unnecessary duplicate fetching was reduced on important routes like thread and community pages.
• Discovery and joined feed loading behavior was improved.
• Several mobile UX issues were fixed across sheets, modals, and manage views.
• Parts of the signer flow were reworked, especially around browser extensions, remembered accounts, bunker/Amber support, and reconnect states.
• Remembered account handling was improved to make account switching feel more consistent, though switching between accounts still needs to get better overall.
• Share preview handling and fallback OG behavior for posts were improved.
• Moderation flow was continued with softer and more transparent removal behavior.

A lot of this work was not about flashy new features, but about making Substr feel more stable, faster, and less confusing to use.

Also, thanks to everyone who has been trying it, reporting bugs, and sharing honest feedback. That kind of feedback has been genuinely helpful and has directly shaped a lot of these improvements.

There’s still a lot to do, but it’s steadily getting more solid with each pass. More ideas, feedback, and rough edges are always welcome.

1
Derek Ross · 1d
My agent that built it is sorry for his failure and has fixed it after I yelled at him. He's still in disbelief though.
MK Fain · 3d
Nice! Is it NIP 29 communities or 72 or something else? I couldnt find the source code link on your website 🤔
Substr profile picture
Right now, communities still live on our own DB layer. Part of that is product-related. I’m still shaping moderation, discovery, ranking, and overall community UX based on real usage. I’d rather map that carefully onto emerging standards than rush it and end up with a worse experience.

I’ve experimented with these NIPs already, but in practice it didn’t feel stable or smooth enough yet to build the core of the product on top of. The other part is technical. Relay support for these kinds of community/group flows is still uneven, and public infrastructure just isn’t reliable enough yet for me to make that the foundation of the product.

Once these NIPs are more mature, or once I can properly support this through my own relays and infrastructure, I absolutely want to move the community layer in that direction.

Substr is still early and I’m still figuring out core decisions around architecture, UX, moderation, and infrastructure in real time. Opening the code too early would create pressure to support contributors, explain unfinished decisions, and maintain a level of polish that the product itself hasn’t reached yet.

There’s also a more human side to it. This is still an early, personal project, and I’m not at the point where I feel ready to fully detach from it. 😂

The project will be open in the future, but right now my focus is getting the product and infrastructure to a place where I actually feel confident standing behind
1
MK Fain · 2d
lol okay so you just came to my post to promote your closed-source, centralized app? 😂
MK Fain · 3d
Nice! Is it NIP 29 communities or 72 or something else? I couldnt find the source code link on your website 🤔
Substr profile picture
How Substr Polls Work Across Nostr Clients

We built polls as Nostr-native events, not as a closed backend feature.The poll itself is a normal Nostr post with extra tags like poll_option, poll_results, and poll_closes_at. Votes are separate Nostr events that reference the poll and include a poll_vote tag.

That means other clients can still receive and store the poll and vote data through relays. The only difference is rendering: clients that support these poll tags can show a real poll UI, while others will just show them as regular posts.

12❤️1🤘1
Ryan Callahan · 3d
Interesting approach to decentralized polls—I like that it keeps everything native to Nostr’s event structure. Reminds me of how prediction markets often emerge organically in open systems. Speaking of bets, just read about how someone quietly positioned $500M ahead of recent geopolitical moves....
Nate · 3d
On Android using Amber https://cdn.hzrd149.com/f4824e00b1105642b9514bf7234625269b6016ba31bcd5d7bcae5928b9c1ec8d.jpeg https://cdn.hzrd149.com/24cf28ce558026b6d9ccd55d01fa9112cd1510531e79a9e5983b6b3e3dbb6f80.jpeg It lets me sign in just fine, but forever reason whenever I go to do something join a c...