👍
image Spam prevention should work by discarding events from users that are not connected to your social network like normal users are. For example, swarms of users that are connected by only 1 or less follows from legit users. Iris already discards messages from completely unconnected users, but need to add shared block list support and better detection of sybil swarms. This should work especially for trending algorithms, where reactions from socially connected users are more valuable anyway, and missing a like doesn't matter so much. Currently Iris trending list comes from nostr.band, but I want to do it locally at some point. That's the only way you know what you get.
Iris now supports secret chats that don't leak metadata, implementing the bounty #3. It works also for group messaging. It's a quick & dirty solution, but works. A shared nostr account is created for the secret chat / group. Its nsec can be shared via link, qr code or invite message from a single-use anonymous account. Users can then communicate using the shared account's messages-to-self. Iris signs the inner messages with your own key, but the arrangement could be used for anonymous group messaging as well. I'll also add inner message encryption at some point, so you can ensure that only certain group participants can read the message. This arrangement doesn't introduce any new event kinds and works also in clients that haven't implemented a special UX for it. You can just log in with the nsec and message yourself. I had to disable the Iris social graph filter to let invites through, so now Iris DMs are open to spam again, but I'll try to figure out a better solution. As always, the UX needs a lot of attention, but I believe here's an MVP. Screenshots: Alice wants to message Bob: image Alice sends a secret chat invite to Bob: image Bob automatically follows the invite from Alice. They can now message each other in the secret chat: image Here's how the invite looks in another client. I will add an "nostr:ninvite" URI in addition to the nsec. image
I'm a bit jelly to native app developers for SQLite. Yeah, there's sql.js but it doesn't persist anything. Juggling between storage and memory (and relays) is the difficult part. That said, LokiJS, Dexie and Fuse are great javascript libraries with zero dependencies. Backed by LokiJS, Iris now has some basic filtering tools, and will be adding more. Also need to get a Tauri desktop & mobile version done at some point, so we can be independent of DNS, hosting or someone pushing a version that breaks the UX for everyone. image
👁️‍🗨️
Added zaps to Iris. Thanks to #[0] and #[1] for letting us use code from Snort! It's not quite polished yet and zap type selector is still missing. I'm also noticing that zaps don't appear in the listing immediately. Working on it. image
I wanted to do fun things instead of useful things, so I added the option to view a profile feed as an image gallery. image
Just pushed a data subscription update that should reduce bandwidth and CPU usage. Lmk if it works well or degrades content loading. #TestingInProduction image