import{d as o}from"./chunks/git.data.BNwuPjHI.js";import{M as n,q as s,Q as e,K as r,u as a,ag as i,p as l}from"./chunks/framework.Sr2_9k8k.js";const c=e("h1",{class:"p-name"},"Orchard",-1),h=["innerHTML"],d=i('
This is an app I'm designing and at least building a mock for. I'd like it to either get built directly into Commune or integrate with it. The purpose of the app is to organize and grow a Network of Knowledge (or Digital Garden) sorted by topic. It achieves this through a concept called message gardening, the process of converting casual conversations into formal, referenceable stores of knowledge.
The problem I have that I'm trying to solve is having a lot of conversations about various topics stretching back far into the past and across many platforms. I often want to review something I said on a given topic and find it difficult to do so. This app would make it far easier to retrieve my notes on any topic. It's different than a traditional note-taking app because it works with conversations directly, which is how my "notes" on a topic initially start out as. As a secondary effect, this will also fix some of the issues described in the chat glue comic. I'd like it to eventually support even more of the ideas proposed in that comment, like replies and reactions to parts of a message.
The main way you interact with the app is by conversing. As you converse in your group chats and DMs, which are technically through matrix but can bridge to other platforms like discord, you can specify topic changes. These will break the conversation up into pieces, and each piece gets added to each of the topics it was about (with links to the convo from before and after that one). If a piece was about multiple topics it forms a link between those topics and considers them in some way related. These links are represented as lines in the topics graph, and cause the topics to be physically closer within the graph. Topics can use slashes to indicate hierarchy, which will also place them next to each other in the graph.
In addition to including conversations, I want to support freeform notes that also discuss one or more topics. Through leaf's compositional structure, in theory any entity should be able to be added to the network.
Another type of non-conversation note could be excerpts from online articles, which could be automatically cited.
When allowing these kinds of notes, users should be encouraged to split notes as small as possible. This allows us to avoid needing something like Garden-RSS by just showing that a note has updated, and showing the new content.
By integrating with commune on the server side, the network could be maintained by the entire community, allowing any (trusted) members to mark topic changes. This has the benefit of making maintenance easier on any individual, but also it means users wanting to catch up on the conversations can now do so via the graph, ignoring any conversations that don't mention any topics that user doesn't particularly care about.
Allow clients to "follow" those communal networks, replicating them locally and merging them together (aliasing similar topics as necessary). This allows users to get very large networks much more easily, and further incentivizes contributing to the communal networks.
A local LLM could assist in marking topic changes automatically, allowing you to get the benefits of the conversation being broken up for catching up even while on a non-commune chat.
LLMs could also be given the topics as context and be able to query the network for knowledge.
The client will be a matrix client that stores all the messages locally. It'll use Fedi v2 to store the messages and other data, making the whole app Local-First Software. The rest of the app will be a web-based UI, using Neutralino.js or an alternative.
Actually, tauri apparently doesn't require rust per-say, and has things like mobile support and a better dev experience.
The server will be something that ensures commune servers can share topic changes across the community.
Consider using Animata components
',22),b=JSON.parse('{"title":"Orchard","description":"","frontmatter":{"public":"true","slug":"orchard","tags":["My Projects"],"title":"Orchard","prev":false,"next":false},"headers":[],"relativePath":"garden/orchard/index.md","filePath":"garden/orchard/index.md"}'),p={name:"garden/orchard/index.md"},y=Object.assign(p,{setup(u){const t=n();return(m,g)=>(l(),s("div",null,[c,e("p",null,[r("634 words, ~3 minute read. "),e("span",{innerHTML:a(o)[`site/${a(t).page.value.relativePath}`]},null,8,h)]),d]))}});export{b as __pageData,y as default};