<rss
      xmlns:atom="http://www.w3.org/2005/Atom"
      xmlns:media="http://search.yahoo.com/mrss/"
      xmlns:content="http://purl.org/rss/1.0/modules/content/"
      xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
      xmlns:dc="http://purl.org/dc/elements/1.1/"
      version="2.0"
    >
      <channel>
        <title><![CDATA[hodlbod]]></title>
        <description><![CDATA[Christian Bitcoiner and developer of the coracle.social nostr client.
Learn more at https://coracle.tools]]></description>
        <link>https://hodlbod.npub.pro/tag/communities/</link>
        <atom:link href="https://hodlbod.npub.pro/tag/communities/rss/" rel="self" type="application/rss+xml"/>
        <itunes:new-feed-url>https://hodlbod.npub.pro/tag/communities/rss/</itunes:new-feed-url>
        <itunes:author><![CDATA[ hodlbod]]></itunes:author>
        <itunes:subtitle><![CDATA[Christian Bitcoiner and developer of the coracle.social nostr client.
Learn more at https://coracle.tools]]></itunes:subtitle>
        <itunes:type>episodic</itunes:type>
        <itunes:owner>
          <itunes:name><![CDATA[ hodlbod]]></itunes:name>
          <itunes:email><![CDATA[ hodlbod]]></itunes:email>
        </itunes:owner>
            
      <pubDate>Fri, 05 Jan 2024 22:03:37 GMT</pubDate>
      <lastBuildDate>Fri, 05 Jan 2024 22:03:37 GMT</lastBuildDate>
      
      <itunes:image href="https://i.nostr.build/AZ0L.jpg" />
      <image>
        <title><![CDATA[hodlbod]]></title>
        <link>https://hodlbod.npub.pro/tag/communities/</link>
        <url>https://i.nostr.build/AZ0L.jpg</url>
      </image>
      <item>
      <title><![CDATA[Groups on Coracle — finally!]]></title>
      <description><![CDATA[Coracle now has closed groups! Read about why I built them the way I did, what's possible, and what's coming.]]></description>
             <itunes:subtitle><![CDATA[Coracle now has closed groups! Read about why I built them the way I did, what's possible, and what's coming.]]></itunes:subtitle>
      <pubDate>Fri, 05 Jan 2024 22:03:37 GMT</pubDate>
      <link>https://hodlbod.npub.pro/post/1704491208030/</link>
      <comments>https://hodlbod.npub.pro/post/1704491208030/</comments>
      <guid isPermaLink="false">naddr1qqxnzdesxs6rjvfjxqurqvesqgsf03c2gsmx5ef4c9zmxvlew04gdh7u94afnknp33qvv3c94kvwxgsrqsqqqa28zalvec</guid>
      <category>nostr</category>
      
        <media:content url="https://i.nostr.build/rEoG.jpg" medium="image"/>
        <enclosure 
          url="https://i.nostr.build/rEoG.jpg" length="0" 
          type="image/jpeg" 
        />
      <noteId>naddr1qqxnzdesxs6rjvfjxqurqvesqgsf03c2gsmx5ef4c9zmxvlew04gdh7u94afnknp33qvv3c94kvwxgsrqsqqqa28zalvec</noteId>
      <npub>npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn</npub>
      <dc:creator><![CDATA[ hodlbod]]></dc:creator>
      <content:encoded><![CDATA[<p>Today marks the biggest release so far in Coracle's history. There have been many good days, like when I introduced Coracle to the nostr telegram group, or when I got my fellowship with FUTO, or when I got my grant from OpenSats, or when I got to speak at Nostrasia. But in terms of realizing the vision I've had for the software - for over two years - today is the day.</p>
<p>Coracle now has private groups.</p>
<p>This means you can now send almost any nostr event over an encrypted channel to the rest of the group's members. This is substantially different from group chats, in that it uses rotating shared keys to provide weak forward secrecy, better scaling, and dynamic member access. This more closely approximates one of the most popular social media products in existence - The Nostr is now a direct competitor of The Facebook.</p>
<p>I built this for my community. I wanted something "good enough" to entice people to leave the advertising-fueled surveillance honeypot that is Facebook. In order to work, it needed to at least support notes, events, and marketplace listings. Although support is still quite basic, Coracle has checked all three of these boxes.</p>
<p>Before I get into the details though, it's important to mention that these groups should not be considered "private" any more than Facebook groups or Mastodon servers are (although privacy is substantially better). A better analog might be WeChat, which uses encryption with the same set of trade-offs. So don't post anything to private groups that might get you in trouble!</p>
<p>With that said, it's possible to run a highly private group. The backbone of this spec is e2e encryption, but relay selection can play an important part in hiding metadata from the rest of the network. If you have a relay you trust to protect notes and not share metadata, your security is significantly increased.</p>
<h1>Prior art</h1>
<p>Nostr-compatible group products aren't a totally novel thing, as it turns out. In fact draft <a href="https://github.com/nostr-protocol/nips/pull/580/files">NIP 112</a> has been around since June, and is already implemented in <a href="https://arcade.city/">ArcadeCity</a>. So why am I creating a new standard? I'l get into the positive benefits of my approach more below, but the quick answers are:</p>
<ul>
<li>The new <a href="https://github.com/nostr-protocol/nips/pull/746">encryption standard</a> is going to break compatibility anyway. If we can end up with a better spec, now is the time.</li>
<li>ArcadeCity development seems to have stalled.</li>
<li>NIP-72 communities already have a ton of traction, and match what I'm trying to achieve with encrypted channels.</li>
</ul>
<p>Of course I'm highly indebted to the project, the design of which is still visible in my final design.</p>
<p>Another product that exists to do something similar in a nostr-compatible way is Soapbox by Alex Gleason. This is a great project, particularly since his Mostr project bridges the ActivityPub world and Nostr. ActivityPub works well for highly centralized communities, but the architecture suffers from this centralization too. In particular, not even DMs are e2e encrypted, and just like regular notes are protected only by authentication enforced by servers.</p>
<p>Finally, there's NIP 29, which is fiatjaf's competing groups project. This has some interesting properties, for example the ability to "fork" a group by linking events together. However, similar to ActivityPub it relies exclusively on relays to protect user privacy, and in a fairly non-standard way. You do get to take advantage of nostr's multi-master architecture though, and signatures are also stripped from events in order to discourage propagation through the network.</p>
<p>None of these solutions quite satisfied me, so I built my own.</p>
<h1>How it works</h1>
<p>One of the coolest things about a NIP 72 community-based group spec is that is supports a spectrum of privacy requirements. A group admin might choose to publish group metadata privately so that it's only visible to the group, publicly so that other people can find the group and ask to join, or leave off a private component entirely.</p>
<p>Likewise, since private groups are backwards-compatible with public communities, it's easy to add a private component to existing groups. This can be useful especially for groups run by a business or content publisher, since public exposure is a good thing but certain group members might have more or less access. This could be used to support a patreon-type model, automating group membership based on subscription tier, for example.</p>
<p>An important aspect of the design that makes automation possible is the concept of a dedicated administration key. By decoupling this key from the original creator of the group, ownership can be shared as simply as sharing the key. This allows multiple admins to manage the group simultaneously either manually or using automations built into the group relays or special purpose bot-clients.</p>
<p>This of course raises the issue of admin access revocation, which isn't possible - that is, until we have a solution for key rotation for normal accounts. Once that's in place, the same process can be used to rotate group admin keys.</p>
<p>In the meantime, it's also trivial to reduce the exposure an admin key gets. You wouldn't generally want to simply paste the key wherever it's needed, but luckily that problem has already been solved as well. Instead of giving every admin or admin bot the key, it's trivial to set up an nsecbunker that authorizes each admin client - and can revoke access as needed.</p>
<p>This level of administration is of course fairly complex, but I think it's important to think through the requirements businesses and other advanced users will eventually impose and anticipate them as we're able, not through over-engineering, but through simple concepts that can be reused.</p>
<p>One other neat feature of this NIP is the definition of invite codes, which are essential for running a private group at any kind of scale. When requesting access to a group, a user can send along a "claim", which can be anything - for example a static invite code, a payment receipt, or an explanation of why they want to join. This claim can be validated by hand by a human, or processed by a bot to instantly admit the new member to the group.</p>
<p>When a new member is admitted to the group, the admin can either share an existing access key with them, or they can rotate the key for the entire group. If relays expire access keys after a certain amount of time, this can create a weak form of forward secrecy, where attackers won't be able to access old content, even if they gain access to the admin key.</p>
<h1>Limitations and Future Work</h1>
<p>The bar for new nostr clients has risen significantly since I first put Coracle out there. The new groups component is far more mature than Coracle was for much of its early life, but it has its rough edges. Many of these just need to be smoothed out through further UX work, but some are more technical in nature.</p>
<ul>
<li>The groups spec relies on NIP 44, which isn't yet available in most signer extensions. That means that unless you log in with your private key (please don't), you won't be able to create or gain access to any private groups.</li>
<li>Hybrid groups (public groups with a private area) aren't really tested yet, or fully supported in Coracle's UI. It's an open question whether this is even a good idea, since it becomes pretty hard for users to know if they're posting publicly or privately in every context.</li>
<li>Moderation is not implemented, so if you're creating a public group there is currently no way in Coracle to approve posts. Also, groups created in Coracle don't show up in Satellite for some reason —&nbsp;this is something I'll be working on improving.</li>
<li>Whether this approach actually scales is another question. It's very hard to build member lists of hundreds of thousands of people, and without a relay helping to filter events, it might become prohibitively expensive to download and analyze all the events posted to a group. We'll see what develops as the design matures and the implementation undergoes stress testing.</li>
</ul>
<h1>Conclusion</h1>
<p>Something I like about both nostr and bitcoin is that it empowers the users of the software. The corollary of this of course is that it's important to exercise this power with care - real damage can be done with this group spec, just as real damage can be done to bitcoin holders through low entropy key generation or poor key handling practices. So please, if you're going to implement this spec, communicate clearly with your users its limitations, and encourage them to run their own relays.</p>
<p>Nevertheless, I am stoked to be another 1% closer to my goal of helping my community - and anyone else who uses nostr - to exercise individual sovereignty and protect their freedom and privacy. Let's keep at it.</p>
]]></content:encoded>
      <itunes:author><![CDATA[ hodlbod]]></itunes:author>
      <itunes:summary><![CDATA[<p>Today marks the biggest release so far in Coracle's history. There have been many good days, like when I introduced Coracle to the nostr telegram group, or when I got my fellowship with FUTO, or when I got my grant from OpenSats, or when I got to speak at Nostrasia. But in terms of realizing the vision I've had for the software - for over two years - today is the day.</p>
<p>Coracle now has private groups.</p>
<p>This means you can now send almost any nostr event over an encrypted channel to the rest of the group's members. This is substantially different from group chats, in that it uses rotating shared keys to provide weak forward secrecy, better scaling, and dynamic member access. This more closely approximates one of the most popular social media products in existence - The Nostr is now a direct competitor of The Facebook.</p>
<p>I built this for my community. I wanted something "good enough" to entice people to leave the advertising-fueled surveillance honeypot that is Facebook. In order to work, it needed to at least support notes, events, and marketplace listings. Although support is still quite basic, Coracle has checked all three of these boxes.</p>
<p>Before I get into the details though, it's important to mention that these groups should not be considered "private" any more than Facebook groups or Mastodon servers are (although privacy is substantially better). A better analog might be WeChat, which uses encryption with the same set of trade-offs. So don't post anything to private groups that might get you in trouble!</p>
<p>With that said, it's possible to run a highly private group. The backbone of this spec is e2e encryption, but relay selection can play an important part in hiding metadata from the rest of the network. If you have a relay you trust to protect notes and not share metadata, your security is significantly increased.</p>
<h1>Prior art</h1>
<p>Nostr-compatible group products aren't a totally novel thing, as it turns out. In fact draft <a href="https://github.com/nostr-protocol/nips/pull/580/files">NIP 112</a> has been around since June, and is already implemented in <a href="https://arcade.city/">ArcadeCity</a>. So why am I creating a new standard? I'l get into the positive benefits of my approach more below, but the quick answers are:</p>
<ul>
<li>The new <a href="https://github.com/nostr-protocol/nips/pull/746">encryption standard</a> is going to break compatibility anyway. If we can end up with a better spec, now is the time.</li>
<li>ArcadeCity development seems to have stalled.</li>
<li>NIP-72 communities already have a ton of traction, and match what I'm trying to achieve with encrypted channels.</li>
</ul>
<p>Of course I'm highly indebted to the project, the design of which is still visible in my final design.</p>
<p>Another product that exists to do something similar in a nostr-compatible way is Soapbox by Alex Gleason. This is a great project, particularly since his Mostr project bridges the ActivityPub world and Nostr. ActivityPub works well for highly centralized communities, but the architecture suffers from this centralization too. In particular, not even DMs are e2e encrypted, and just like regular notes are protected only by authentication enforced by servers.</p>
<p>Finally, there's NIP 29, which is fiatjaf's competing groups project. This has some interesting properties, for example the ability to "fork" a group by linking events together. However, similar to ActivityPub it relies exclusively on relays to protect user privacy, and in a fairly non-standard way. You do get to take advantage of nostr's multi-master architecture though, and signatures are also stripped from events in order to discourage propagation through the network.</p>
<p>None of these solutions quite satisfied me, so I built my own.</p>
<h1>How it works</h1>
<p>One of the coolest things about a NIP 72 community-based group spec is that is supports a spectrum of privacy requirements. A group admin might choose to publish group metadata privately so that it's only visible to the group, publicly so that other people can find the group and ask to join, or leave off a private component entirely.</p>
<p>Likewise, since private groups are backwards-compatible with public communities, it's easy to add a private component to existing groups. This can be useful especially for groups run by a business or content publisher, since public exposure is a good thing but certain group members might have more or less access. This could be used to support a patreon-type model, automating group membership based on subscription tier, for example.</p>
<p>An important aspect of the design that makes automation possible is the concept of a dedicated administration key. By decoupling this key from the original creator of the group, ownership can be shared as simply as sharing the key. This allows multiple admins to manage the group simultaneously either manually or using automations built into the group relays or special purpose bot-clients.</p>
<p>This of course raises the issue of admin access revocation, which isn't possible - that is, until we have a solution for key rotation for normal accounts. Once that's in place, the same process can be used to rotate group admin keys.</p>
<p>In the meantime, it's also trivial to reduce the exposure an admin key gets. You wouldn't generally want to simply paste the key wherever it's needed, but luckily that problem has already been solved as well. Instead of giving every admin or admin bot the key, it's trivial to set up an nsecbunker that authorizes each admin client - and can revoke access as needed.</p>
<p>This level of administration is of course fairly complex, but I think it's important to think through the requirements businesses and other advanced users will eventually impose and anticipate them as we're able, not through over-engineering, but through simple concepts that can be reused.</p>
<p>One other neat feature of this NIP is the definition of invite codes, which are essential for running a private group at any kind of scale. When requesting access to a group, a user can send along a "claim", which can be anything - for example a static invite code, a payment receipt, or an explanation of why they want to join. This claim can be validated by hand by a human, or processed by a bot to instantly admit the new member to the group.</p>
<p>When a new member is admitted to the group, the admin can either share an existing access key with them, or they can rotate the key for the entire group. If relays expire access keys after a certain amount of time, this can create a weak form of forward secrecy, where attackers won't be able to access old content, even if they gain access to the admin key.</p>
<h1>Limitations and Future Work</h1>
<p>The bar for new nostr clients has risen significantly since I first put Coracle out there. The new groups component is far more mature than Coracle was for much of its early life, but it has its rough edges. Many of these just need to be smoothed out through further UX work, but some are more technical in nature.</p>
<ul>
<li>The groups spec relies on NIP 44, which isn't yet available in most signer extensions. That means that unless you log in with your private key (please don't), you won't be able to create or gain access to any private groups.</li>
<li>Hybrid groups (public groups with a private area) aren't really tested yet, or fully supported in Coracle's UI. It's an open question whether this is even a good idea, since it becomes pretty hard for users to know if they're posting publicly or privately in every context.</li>
<li>Moderation is not implemented, so if you're creating a public group there is currently no way in Coracle to approve posts. Also, groups created in Coracle don't show up in Satellite for some reason —&nbsp;this is something I'll be working on improving.</li>
<li>Whether this approach actually scales is another question. It's very hard to build member lists of hundreds of thousands of people, and without a relay helping to filter events, it might become prohibitively expensive to download and analyze all the events posted to a group. We'll see what develops as the design matures and the implementation undergoes stress testing.</li>
</ul>
<h1>Conclusion</h1>
<p>Something I like about both nostr and bitcoin is that it empowers the users of the software. The corollary of this of course is that it's important to exercise this power with care - real damage can be done with this group spec, just as real damage can be done to bitcoin holders through low entropy key generation or poor key handling practices. So please, if you're going to implement this spec, communicate clearly with your users its limitations, and encourage them to run their own relays.</p>
<p>Nevertheless, I am stoked to be another 1% closer to my goal of helping my community - and anyone else who uses nostr - to exercise individual sovereignty and protect their freedom and privacy. Let's keep at it.</p>
]]></itunes:summary>
      <itunes:image href="https://i.nostr.build/rEoG.jpg"/>
      </item>
      
      <item>
      <title><![CDATA[Where is my coracle going?]]></title>
      <description><![CDATA[A meandering vision statement for the future of the Coracle nostr client.]]></description>
             <itunes:subtitle><![CDATA[A meandering vision statement for the future of the Coracle nostr client.]]></itunes:subtitle>
      <pubDate>Tue, 26 Sep 2023 23:53:37 GMT</pubDate>
      <link>https://hodlbod.npub.pro/post/where-is-my-coracle-going/</link>
      <comments>https://hodlbod.npub.pro/post/where-is-my-coracle-going/</comments>
      <guid isPermaLink="false">naddr1qqvhw6r9wfjj66tn94khjttrdaexzcmvv5kkwmmfdensygyhcu9ygdn2v56uz3dnx0uh865xmlwz675emfsccsxxguz6mx8rygpsgqqqw4rs9ch9mg</guid>
      <category>nostr</category>
      
        <media:content url="https://image.nostr.build/529222f4d6befc4ecf3014a3c959938fddea8a5ea38e12f4222e3c3197982aa4.jpg" medium="image"/>
        <enclosure 
          url="https://image.nostr.build/529222f4d6befc4ecf3014a3c959938fddea8a5ea38e12f4222e3c3197982aa4.jpg" length="0" 
          type="image/jpeg" 
        />
      <noteId>naddr1qqvhw6r9wfjj66tn94khjttrdaexzcmvv5kkwmmfdensygyhcu9ygdn2v56uz3dnx0uh865xmlwz675emfsccsxxguz6mx8rygpsgqqqw4rs9ch9mg</noteId>
      <npub>npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn</npub>
      <dc:creator><![CDATA[ hodlbod]]></dc:creator>
      <content:encoded><![CDATA[<p>I've never piloted one, but I'm inclined to think that a coracle would be very hard to steer. No rudder, no keel, the thing is circular, it's not exactly a seagoing vessel. I've found the same to be true of my eponymous software project. I have many definite ideas of where I want it to go, most of which are in tension with one another. Plus, I'm prone to getting distracted by adding new features that aren't really core to my mission (whatever it is).</p>
<h1>What it ain't</h1>
<p>That fact was brought home to me this week as I worked for the nth time to repair the damage my refactoring did to the public chat feature in Coracle. This was the first feature I added as a response to popular demand and hype over a new NIP being added to nostr, way back in December 2022. Coracle was (I believe) the first general-purpose client to support public chat, which I hoped would bolster its notoriety.</p>
<p>I don't know if it helped Coracle's popularity, but it has cost me several weeks of development time in maintenance and abstraction cost since it was introduced. While it wouldn't be hard to apply the same content filtering work I've added to feeds in Coracle to chat, I'm not sure I want to continue to have my time stolen by sunk cost. And with the increasing frequency with which chat groups are being hijacked by spammers of various kinds, I no longer have the option of leaving chat alone.</p>
<p>So I've decided to remove group chat from Coracle. The implementation is still available, at <a href="https://chat.coracle.social">chat.coracle.social</a>, but unless a wild maintainer appears, it won't be receiving any updates for the foreseeable future. Chat was never a goal of my project, and while it may be one of the more popular features of Coracle, it's one of the least crucial.</p>
<p>This is just one of many illustrative features. In the same release in which I removed chat, I also added a background music player for kind 1808s. This is equally frivolous —&nbsp;but even more fun. It will likely live for a while, and disappear again someday.</p>
<h1>Set a course for ???, warp speed</h1>
<p>Now that Coracle is basically working™️ I need to take a step back and figure out what I want it to be. Even if I don't know where I'm headed, I'm still moving pretty fast. In order to make the best use of my grant from OpenSats, it's imperative that I at least have a mission statement.</p>
<p>In explaining to Vitor why I was removing chat, I accidentally articulated a pretty good one:</p>
<p><np-embed nostr="nevent1qqsfwxqv4qq5ajdx8yaksg2fwcw0enpykxvkl9kf2meqgheaq7f3ycgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdufeeexz"><a href="https://njump.me/nevent1qqsfwxqv4qq5ajdx8yaksg2fwcw0enpykxvkl9kf2meqgheaq7f3ycgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdufeeexz">nostr:nevent1qqsfwxqv4qq5ajdx8yaksg2fwcw0enpykxvkl9kf2meqgheaq7f3ycgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdufeeexz</a></np-embed></p>
<p>The reason for this emphasis comes from the people I originally set out to build for: my church community. These people are generally not "internet-native". They aren't active on reddit, twitter, discord, twitch, tiktok, or youtube. To the extent they use social media, they post pictures on instagram, and buy and sell goods on facebook marketplace.</p>
<p>The features required to support a facebook analog are fairly obvious, and include event calendars, private groups, and marketplaces. However, there are a few dimensions to the problem that make building such a product more challenging than building a twitter clone.</p>
<h2>Product complexity</h2>
<p>One of the most consistent pieces of advice I've received about building a facebook clone is: don't. Facebook succeeded because it bundled multiple standalone tools into a single interface, and tied them together with a single social graph.</p>
<p>This is one of the things nostr solves — no longer do you need an everything app, if you can use micro-apps on an everything protocol. When I built <a href="https://zephyr.coracle.social">zephyr</a> last week, I was again stunned at how powerful building on nostr is. In half a day I put together something that would be impossible with traditional technologies —&nbsp;because if you don't have the ability to produce content on a centralized platform, you don't have the ability to consume it either.</p>
<p>But protocols feel different from platforms, especially for the layman. The other half of facebook's value add is (was) a simple and intuitive user interface, which not only made the different components available, but made them accessible as well. I don't think micro-apps, web app stores, or nostr browsers are complete solutions to the UX problem. Nothing can replace a design tailored to your specific end user.</p>
<h2>Privacy and parochialism</h2>
<p>Social graph partitioning is an essential part of designing a social network. In twitter-like applications, an an effective strategy might be described as "whatever". In other words, as long as you are able to 1. connect to the people you want to follow and 2. discover new content, you're fine — there's no need to be exhaustive or exclusive.</p>
<p>But tighter-knit communities require exclusivity. And by "community" I should qualify that I do not mean a reddit-style common interest, but a real locus of interdependence — whether intellectual, economic, or familial. You don't self-select into true communities except by way of a long (sometimes very long) probationary period.</p>
<p>But, as we learned from mastodon's failures, people are also members of multiple overlapping communities simultaneously. This means that an application designed to serve a person in multiple roles across multiple communities needs to be able to address those differing social circles according to their permeability. Enforcing community privacy using encryption might be appropriate for very tight groups like families, while other groups might want more lax rules about content sharing or member admission.</p>
<p>On nostr, relays are an excellent primitive for implementing access controls, and may be sufficient for all but the most private communication. I've also experimented with <a href="https://github.com/nostr-protocol/nips/pull/706">encrypted groups</a> (nostr-in-nostr), but the juice might not be worth the squeeze — the additional complexity of gift wrapping might not be necessary if relays can be trusted not to leak data.</p>
<p>Two different approaches to group-specific relays could be used, depending on the level of trust required for the community: an Uncle Jim model where one or more admins host the infrastructure, or a virtual relay model where the group admin creates a private space on commoditized infrastructure.</p>
<h2>The value of decentralization at a small scale</h2>
<p>Now, of course if you have admins, you've basically opted back in to siloed, centralized platforms, unless shared identity is a value add. Single sign on could be attractive, but not overwhelmingly so —&nbsp;I think the thing that makes an identity shared across multiple platforms compelling is the ability to cross-post.</p>
<p>Unless content is protected by encryption, this is always possible, and would be very good for end users. Allowing content from outside a group to be pulled into a group allows the group to comment on it using its own idioms and values. It also enables loose coupling between weakly-related communities (for example a church and the town it is located in).</p>
<p>This would work very well for community groups, which aren't usually too picky about driving engagement, but would work less well for publishers or media brands, even if cross-posting of content would be beneficial to their curated communities. Instead of increasing the value of your community, it could be seen (and exploited) as advertising for competing siloes.</p>
<h2>Multiple types of engagement</h2>
<p>Finally, there are multiple types of relationship that might be emphasized to a greater or lesser degree in one community vs another. Facebook-style "friends" are generally less focused on ideas, and more on maintaining relationships. I wouldn't want to read what my mom posts on social media, but I do want to stay in touch with her. In contrast, twitter-style "follows" are more oriented towards the flow of information itself, rather than relationships. An application directed at handling both types of "community" would need to respect the difference between the two.</p>
<h1>Toward something, anything</h1>
<p>With all that in mind, here's an attempt at articulating my vision for Coracle, loosely based on the <a href="https://www.eosworldwide.com/">EOS model</a> (no, not that EOS).</p>
<p>While my focus above has been on individuals as members of real-life communities, in practice many of these groups can be defined by a common interest in a given content "publisher", which is a more concrete (and practical) use case. This might be something as big as a newspaper, or as small as a substack or patreon. The content provides something for members of the group to talk about.</p>
<p>It seems to me that groups that are not content-focused operate in much the same way, except that topics are selected by group members, rather than by administrators. So the general strategy would be to build a product that can be used more informally by primarily targeting content publishers.</p>
<h2>Core Values</h2>
<ol>
<li>Real life &gt; digital life</li>
<li>Inorganic advertising is cancer</li>
<li>Encourage purposeful engagement</li>
<li>Different communities should be distinct, but mutually beneficial</li>
</ol>
<h2>Mission Statement</h2>
<p>To enrich the social media experience of individuals in their capacity as members of multiple overlapping real-world intellectual, economic, or relational communities.</p>
<h2>Target Market</h2>
<p>Small publishers who want to create a place for subscribers to interact with the publisher's (public and paid) content and one another. Media brands who are open to the benefits of cross-posting across siloes.</p>
<h2>What does it look like?</h2>
<ul>
<li>Anyone can create a group hosted on self-hosted or commodity relays, or a mixture of both.</li>
<li>A mixture of public and encrypted content for a given group</li>
<li>Cross-posting of public content between groups</li>
<li>Private content exclusive to group members</li>
<li>Multiple tiers of group membership </li>
<li>Configurable access control: admins, moderators, write access, read access</li>
<li>Invite codes, including referral discounts/rewards</li>
<li>Integrated calendar events (public and private)</li>
<li>Integrated marketplaces (publisher merchandise or peer-to-peer)</li>
<li>Support topical threads (oriented around publisher content) and member microblogging</li>
</ul>
<h2>Goals</h2>
<ul>
<li>A relay implementation that supports virtual relays with all required access controls</li>
<li>A group spec that supports granular content permissions and visibility</li>
<li>An end-user interface that supports browsing multiple groups and non-group content</li>
<li>An admin interface for group administration</li>
<li>White-labeled configurable client implementation</li>
</ul>
<h1>Addendum: Ditto</h1>
<p>Alex Gleason has been working on <a href="https://gitlab.com/soapbox-pub/ditto">Ditto</a> of late, which is first of all a way to reconcile ActivityPub and Nostr using a server implementation that supports both protocols, but which has the interesting side effect of marrying the siloed, exclusive ActivityPub model with nostr identities. This could be a good solution for branded clients and tighter community control, especially since it allows for the use of existing tools from ActivityPub's more mature ecosystem.</p>
<p> I intend to keep a close eye on Ditto as it matures. I hope that even if the two projects have a significant amount of overlap, that the problem space is big enough to allow for variations in execution, especially since Coracle has the ability to be fully nostr-native.</p>
<h1>Conclusion</h1>
<p>If you're currently a user of Coracle, don't worry too much, I won't be making any drastic changes anytime soon. I do think that the twitter-like, group-independent part of nostr is valuable, at least as a supplement to more cohesive communities. However, in order to achieve such an ambitious project, I'll have to exercise the discipline to remain focused and cut out any fat that accumulates. We'll see how I do.</p>
]]></content:encoded>
      <itunes:author><![CDATA[ hodlbod]]></itunes:author>
      <itunes:summary><![CDATA[<p>I've never piloted one, but I'm inclined to think that a coracle would be very hard to steer. No rudder, no keel, the thing is circular, it's not exactly a seagoing vessel. I've found the same to be true of my eponymous software project. I have many definite ideas of where I want it to go, most of which are in tension with one another. Plus, I'm prone to getting distracted by adding new features that aren't really core to my mission (whatever it is).</p>
<h1>What it ain't</h1>
<p>That fact was brought home to me this week as I worked for the nth time to repair the damage my refactoring did to the public chat feature in Coracle. This was the first feature I added as a response to popular demand and hype over a new NIP being added to nostr, way back in December 2022. Coracle was (I believe) the first general-purpose client to support public chat, which I hoped would bolster its notoriety.</p>
<p>I don't know if it helped Coracle's popularity, but it has cost me several weeks of development time in maintenance and abstraction cost since it was introduced. While it wouldn't be hard to apply the same content filtering work I've added to feeds in Coracle to chat, I'm not sure I want to continue to have my time stolen by sunk cost. And with the increasing frequency with which chat groups are being hijacked by spammers of various kinds, I no longer have the option of leaving chat alone.</p>
<p>So I've decided to remove group chat from Coracle. The implementation is still available, at <a href="https://chat.coracle.social">chat.coracle.social</a>, but unless a wild maintainer appears, it won't be receiving any updates for the foreseeable future. Chat was never a goal of my project, and while it may be one of the more popular features of Coracle, it's one of the least crucial.</p>
<p>This is just one of many illustrative features. In the same release in which I removed chat, I also added a background music player for kind 1808s. This is equally frivolous —&nbsp;but even more fun. It will likely live for a while, and disappear again someday.</p>
<h1>Set a course for ???, warp speed</h1>
<p>Now that Coracle is basically working™️ I need to take a step back and figure out what I want it to be. Even if I don't know where I'm headed, I'm still moving pretty fast. In order to make the best use of my grant from OpenSats, it's imperative that I at least have a mission statement.</p>
<p>In explaining to Vitor why I was removing chat, I accidentally articulated a pretty good one:</p>
<p><np-embed nostr="nevent1qqsfwxqv4qq5ajdx8yaksg2fwcw0enpykxvkl9kf2meqgheaq7f3ycgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdufeeexz"><a href="https://njump.me/nevent1qqsfwxqv4qq5ajdx8yaksg2fwcw0enpykxvkl9kf2meqgheaq7f3ycgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdufeeexz">nostr:nevent1qqsfwxqv4qq5ajdx8yaksg2fwcw0enpykxvkl9kf2meqgheaq7f3ycgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdufeeexz</a></np-embed></p>
<p>The reason for this emphasis comes from the people I originally set out to build for: my church community. These people are generally not "internet-native". They aren't active on reddit, twitter, discord, twitch, tiktok, or youtube. To the extent they use social media, they post pictures on instagram, and buy and sell goods on facebook marketplace.</p>
<p>The features required to support a facebook analog are fairly obvious, and include event calendars, private groups, and marketplaces. However, there are a few dimensions to the problem that make building such a product more challenging than building a twitter clone.</p>
<h2>Product complexity</h2>
<p>One of the most consistent pieces of advice I've received about building a facebook clone is: don't. Facebook succeeded because it bundled multiple standalone tools into a single interface, and tied them together with a single social graph.</p>
<p>This is one of the things nostr solves — no longer do you need an everything app, if you can use micro-apps on an everything protocol. When I built <a href="https://zephyr.coracle.social">zephyr</a> last week, I was again stunned at how powerful building on nostr is. In half a day I put together something that would be impossible with traditional technologies —&nbsp;because if you don't have the ability to produce content on a centralized platform, you don't have the ability to consume it either.</p>
<p>But protocols feel different from platforms, especially for the layman. The other half of facebook's value add is (was) a simple and intuitive user interface, which not only made the different components available, but made them accessible as well. I don't think micro-apps, web app stores, or nostr browsers are complete solutions to the UX problem. Nothing can replace a design tailored to your specific end user.</p>
<h2>Privacy and parochialism</h2>
<p>Social graph partitioning is an essential part of designing a social network. In twitter-like applications, an an effective strategy might be described as "whatever". In other words, as long as you are able to 1. connect to the people you want to follow and 2. discover new content, you're fine — there's no need to be exhaustive or exclusive.</p>
<p>But tighter-knit communities require exclusivity. And by "community" I should qualify that I do not mean a reddit-style common interest, but a real locus of interdependence — whether intellectual, economic, or familial. You don't self-select into true communities except by way of a long (sometimes very long) probationary period.</p>
<p>But, as we learned from mastodon's failures, people are also members of multiple overlapping communities simultaneously. This means that an application designed to serve a person in multiple roles across multiple communities needs to be able to address those differing social circles according to their permeability. Enforcing community privacy using encryption might be appropriate for very tight groups like families, while other groups might want more lax rules about content sharing or member admission.</p>
<p>On nostr, relays are an excellent primitive for implementing access controls, and may be sufficient for all but the most private communication. I've also experimented with <a href="https://github.com/nostr-protocol/nips/pull/706">encrypted groups</a> (nostr-in-nostr), but the juice might not be worth the squeeze — the additional complexity of gift wrapping might not be necessary if relays can be trusted not to leak data.</p>
<p>Two different approaches to group-specific relays could be used, depending on the level of trust required for the community: an Uncle Jim model where one or more admins host the infrastructure, or a virtual relay model where the group admin creates a private space on commoditized infrastructure.</p>
<h2>The value of decentralization at a small scale</h2>
<p>Now, of course if you have admins, you've basically opted back in to siloed, centralized platforms, unless shared identity is a value add. Single sign on could be attractive, but not overwhelmingly so —&nbsp;I think the thing that makes an identity shared across multiple platforms compelling is the ability to cross-post.</p>
<p>Unless content is protected by encryption, this is always possible, and would be very good for end users. Allowing content from outside a group to be pulled into a group allows the group to comment on it using its own idioms and values. It also enables loose coupling between weakly-related communities (for example a church and the town it is located in).</p>
<p>This would work very well for community groups, which aren't usually too picky about driving engagement, but would work less well for publishers or media brands, even if cross-posting of content would be beneficial to their curated communities. Instead of increasing the value of your community, it could be seen (and exploited) as advertising for competing siloes.</p>
<h2>Multiple types of engagement</h2>
<p>Finally, there are multiple types of relationship that might be emphasized to a greater or lesser degree in one community vs another. Facebook-style "friends" are generally less focused on ideas, and more on maintaining relationships. I wouldn't want to read what my mom posts on social media, but I do want to stay in touch with her. In contrast, twitter-style "follows" are more oriented towards the flow of information itself, rather than relationships. An application directed at handling both types of "community" would need to respect the difference between the two.</p>
<h1>Toward something, anything</h1>
<p>With all that in mind, here's an attempt at articulating my vision for Coracle, loosely based on the <a href="https://www.eosworldwide.com/">EOS model</a> (no, not that EOS).</p>
<p>While my focus above has been on individuals as members of real-life communities, in practice many of these groups can be defined by a common interest in a given content "publisher", which is a more concrete (and practical) use case. This might be something as big as a newspaper, or as small as a substack or patreon. The content provides something for members of the group to talk about.</p>
<p>It seems to me that groups that are not content-focused operate in much the same way, except that topics are selected by group members, rather than by administrators. So the general strategy would be to build a product that can be used more informally by primarily targeting content publishers.</p>
<h2>Core Values</h2>
<ol>
<li>Real life &gt; digital life</li>
<li>Inorganic advertising is cancer</li>
<li>Encourage purposeful engagement</li>
<li>Different communities should be distinct, but mutually beneficial</li>
</ol>
<h2>Mission Statement</h2>
<p>To enrich the social media experience of individuals in their capacity as members of multiple overlapping real-world intellectual, economic, or relational communities.</p>
<h2>Target Market</h2>
<p>Small publishers who want to create a place for subscribers to interact with the publisher's (public and paid) content and one another. Media brands who are open to the benefits of cross-posting across siloes.</p>
<h2>What does it look like?</h2>
<ul>
<li>Anyone can create a group hosted on self-hosted or commodity relays, or a mixture of both.</li>
<li>A mixture of public and encrypted content for a given group</li>
<li>Cross-posting of public content between groups</li>
<li>Private content exclusive to group members</li>
<li>Multiple tiers of group membership </li>
<li>Configurable access control: admins, moderators, write access, read access</li>
<li>Invite codes, including referral discounts/rewards</li>
<li>Integrated calendar events (public and private)</li>
<li>Integrated marketplaces (publisher merchandise or peer-to-peer)</li>
<li>Support topical threads (oriented around publisher content) and member microblogging</li>
</ul>
<h2>Goals</h2>
<ul>
<li>A relay implementation that supports virtual relays with all required access controls</li>
<li>A group spec that supports granular content permissions and visibility</li>
<li>An end-user interface that supports browsing multiple groups and non-group content</li>
<li>An admin interface for group administration</li>
<li>White-labeled configurable client implementation</li>
</ul>
<h1>Addendum: Ditto</h1>
<p>Alex Gleason has been working on <a href="https://gitlab.com/soapbox-pub/ditto">Ditto</a> of late, which is first of all a way to reconcile ActivityPub and Nostr using a server implementation that supports both protocols, but which has the interesting side effect of marrying the siloed, exclusive ActivityPub model with nostr identities. This could be a good solution for branded clients and tighter community control, especially since it allows for the use of existing tools from ActivityPub's more mature ecosystem.</p>
<p> I intend to keep a close eye on Ditto as it matures. I hope that even if the two projects have a significant amount of overlap, that the problem space is big enough to allow for variations in execution, especially since Coracle has the ability to be fully nostr-native.</p>
<h1>Conclusion</h1>
<p>If you're currently a user of Coracle, don't worry too much, I won't be making any drastic changes anytime soon. I do think that the twitter-like, group-independent part of nostr is valuable, at least as a supplement to more cohesive communities. However, in order to achieve such an ambitious project, I'll have to exercise the discipline to remain focused and cut out any fat that accumulates. We'll see how I do.</p>
]]></itunes:summary>
      <itunes:image href="https://image.nostr.build/529222f4d6befc4ecf3014a3c959938fddea8a5ea38e12f4222e3c3197982aa4.jpg"/>
      </item>
      
      </channel>
      </rss>
    