It makes use of the useHolochain React hook to simplify UI communication with Holochain, Slate for editing and Yjs for realtime sync between clients.
Node to node messaging is used to allow one agent to save a note in another agents source chain.
Start up two agents and clients to see it in action - Everything needed for quick start included in package: testing keys, start scripts etc.
I haven’t been able to successfully make it work with Holoscape yet, something in the install process gets stuck.
Perhaps I will continue developing this demo a bit further on. Something along the lines of Notion/HackMD should be part of the Holochain ecosystem early on.
I hope to find the time (and collaborators ) in the new year to develop this demo into something fully functional. The data model / zome structure would need to be worked on a bit, markdown support in the editor would be nice. What else would be basic requirements?
Maybe a way to link notes together and display a graph overview, like RoamResearch.com
From within a note, if you typed /link it would allow you to create a hyperlink which references another note. If you click on it, it brings that note into the workspace.
I also think graph edges are underrated, so in the graph overview you could not only display the notes with edges between them, but also include the quality of these edges by overlaying the sentence the hyperlink was included in. Example:
Note title: Apple
A sentence within the note: These grow on trees.
Boring graph of linked notes: Apple -----------------------------> Tree
Awesome graph with edge tags: Apple -----These grow on trees-----> Tree
Let me have a go at this because this is something I’ve had in mind for a long time, and your PoC is a very nice substrate. I likely won’t get far but let’s see
I hope I can become one soon! I’m still in my first semester of my Web Dev course, so a lot of time still until there
TBH, I don’t think you are missing much on basic requirements. Maybe exporting the notes to different formats? A way of bringing some coherence (tags, links, whatever) to the content that is being created? @marcus suggestion is super cool. I bookmarked RoamResearch a long time ago, but it didn’t come to mind.
Nice @marcus, will definitely have a look at RoamResearch! Would be interesting to explore how linking like that would play out in a collaborative settings.
For instance, many users would probably link to the same common [[holochain]] page, yes? If so, who owns that page? Does everyone have access to edit that page? Are there moderators? Are we looking at something capable of building public wiki like structures or does the linking take place only between one users “private pages”?
The Slate editor is built for being extensible. One could easily imagine a range of /-commands similar to the way Notion does it.
/todo-list /color red /holochain persona kristoferlund /junto msg=id123 @marcus /vote dotvote options=[xxx, xxx, ...]
… etc
The plugin system of Slack comes to mind. But, in the world of holo, plugins would be represented by DNAs and zomes.
Yeah, and I’d like to sketch out a generic design pattern for collaborative work on a shared resource as well.
Agent A (owner) creates a resource
Agent B (collaborator) request access to edit
Owner approves request - grants capability
Owner & collaborator edits resource at the same time - synchronised by using node to node messaging and signalling.
Owner (or collaborator, depending on access) saves shared resource to owners chain
Owner gets tired, wants to transfer ownership to collaborator
Owner requests ownership transfer (could be other way around as well)
Collaborator approves, copies latest entry (or full history) to own sourcechain.
(old) Owner marks entry as deleted
Hidden in that flow I think hides a few nice generic components that could be made crates / npm packages for all to use.
An Yjs node connector for holochain, using node to node messaging and signalling.
A “signalling server” zome / dna used in conjunction with the above connector to allow for collaboration on any data structure
An “ownership” zome / dna used to managed shared and private resurces. Convenience functions such as transfer_ownership(), request_edit_capability(), etc.
@kristoferlund I think these are excellent and important questions to be asking — looking beyond the immediate app to look for the right generic patterns that can be applied to other things in the same collaborative problem space. The one I’m most interested in is the ownership/permissions zome and would love to collaborate on that.
Does this mean you’re putting some more attention on the project now? I’d love to jam on this a bit too.
I’m currently building an app around different modes of writing, starting with meditation. You can find a project log here and the GitHub Repo here.
I’ve also been playing a bit with Roam Research recently and it’s certainly an interesting take on networked note taking. I’ve also taken Tiago Forte’s Building a Second Brain course way back in 2017 and have built my own second brain in Evernote.
I wish that would be the case! Would love to put some time into exploring notes related ideas - roam research is interesting indeed! But, I have really little spare time on my hands just now, the project will have to hibernate for now.