Damus
JeffG profile picture
JeffG
@JeffG

Currently building Secure Messaging on Nostr. Other stuff connoisseur. Also built Listr, Ostrich.work, Ontolo, Nostr.how.

Relays (4)
  • wss://relay.damus.io/ โ€“ write
  • wss://filter.nostr.wine/ โ€“ write
  • wss://relay.jeffg.fyi โ€“ read & write
  • wss://premium.primal.net/ โ€“ write

Recent Notes

JeffG profile picture
I have a OpenClaw (Clawdbot's new name) running on a server in my house. I wired it up to share an Obsidian vault syncing over a private git repo. I now have an assistant that can I can text over telegram and work with in shared docs. They do research, pull data from github and crunch insights, and track info from me with near zero friction.

Feels like sci-fi. ๐Ÿฆž
JeffG profile picture
The version on zapstore/testflight should be working really well. 6 months ago would have been patchy. ๐Ÿ˜ฌ

We have a completely new version coming in a few weeks that is going to be ๐Ÿ”ฅ
JeffG profile picture
The sloth repo (where we're currently working on app changes): https://github.com/marmot-protocol/sloth

The whitenoise-rs repo (the rust backend to the flutter app): https://github.com/marmot-protocol/whitenoise-rs

The MDK repo (this is the general library that can be used by anyone who wants to build a Marmot Protocol powered app): https://github.com/marmot-protocol/mdk

The sloth repo will eventually disappear and all that code will be moved back to the whitenoise repo (https://github.com/marmot-protocol/whitenoise)
JeffG profile picture
Yeah! Sounds very similar. We're using a set of storage traits in MDK so that the storage layer is abstracted from the code. The traits define the interface that any storage backend has to implement, then MDK can just call those methods when needed and doesn't need to know exactly what is happening in storage. We have two implementations that we maintain; a simple memory storage backend (mostly for tests) and a sqlite storage backend (which is now also encrypted at rest using SQLCipher). I hope that more storage backends will crop up from the community for other databases over time.

I only talked about the Flutter app refactor here but we've done a massive refactor of MDK and the whitenoise-rs crates as well over the last two months. Largely based on the audit feedback but also cleaning up and improving a lot of things based on learnings of having the app out there in the wild over the last 7 months.
JeffG profile picture
Over the past 6 weeks we've been rebuilding the White Noise flutter app from scratch.

We use flutter_rust_bridge to keep all core logic and crypto in Rust. But trying to follow Flutter "best practices" led to too many providers, unclear state ownership, and caching at too many layers.

When we were in Costa Rica back in late November, we took a hard look at what we had and decided to do a spike based on a collection of ideas that @nprofile1q... had. That spike quickly showed a lot of promise and we've combined it with a beautiful new design from @nprofile1q...

The new approach (codename Sloth ๐Ÿฆฅ):

- Hooks for local/ephemeral state, not stateful widgets
- Providers only for shared app state
- whitenoise-rs crate is the source of truth, no Flutter-side caching
- 99.7% test coverage

Simpler patterns, faster iteration, way easier to reason about.

Sloths might be slow but they're the most efficient animals on the planet! This has also given us a chance to incorporate all the security audit feedback into MDK and whitenoise-rs so not only will the app be faster and more beautiful, it'll also be more secure!

I'm getting excited to launch the new White Noise in just a few weeks!
JeffG profile picture
Bitchat uses nostr under the hood to relay messages when you teleport to other regions. Every bitchat user is actually a nostr pubkey ;)