Holo.txt - collaborative notes editing on Holochain

Hi, I wanted to make a really basic demo of a collaborative notes editing app on Holochain. This is what I came up with.

:link: GitHub - kristoferlund/holotxt: Proof of concept Holochain app showcasing simple collaborative notes editing.

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.

11 Likes

Cool! I love it :slight_smile:

1 Like

Nice hook, will definitely be using it! Also Slate and Yjs are exactly what I’ve been looking for, simple collaborative writing tools. Nice!

2 Likes

Following the hell out of it because I wanted to build something a bit more complex than this, but fundamentally based on what you just built.

3 Likes

I hope to find the time (and collaborators :slight_smile:) 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

1 Like

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 :laughing:

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.

1 Like

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.

Of potential interest: http://www.uprtcl.io/

3 Likes

Yes, uprtcl is super interesting!

If so, who owns that page? Does everyone have access to edit that page?

It’s almost as if this is the perfect use-case for some Holochain validation logic!

1 Like

Yeah, and I’d like to sketch out a generic design pattern for collaborative work on a shared resource as well.

  1. Agent A (owner) creates a resource
  2. Agent B (collaborator) request access to edit
  3. Owner approves request - grants capability
  4. Owner & collaborator edits resource at the same time - synchronised by using node to node messaging and signalling.
  5. Owner (or collaborator, depending on access) saves shared resource to owners chain
  6. Owner gets tired, wants to transfer ownership to collaborator
  7. Owner requests ownership transfer (could be other way around as well)
  8. Collaborator approves, copies latest entry (or full history) to own sourcechain.
  9. (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.

… what else?

4 Likes

@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.

2 Likes

Great! I started a separate thread for “standardised common traits”.

And a doc for collaboration:

https://hackmd.io/kWfnGNR4Ta-K1h0jpK71Hw?both

1 Like

Added some error handling, history list and fixes for the app to run ok with 0.0.42-alpha5.

ezgif-5-4fe180a74f39
:link: GitHub - kristoferlund/holotxt: Proof of concept Holochain app showcasing simple collaborative notes editing.

3 Likes

Short update: Holoscape 0.0.9 is out and with that an updated version of Holo.txt.

:link: https://github.com/kristoferlund/holotxt

3 Likes

Tried this on Holoscape a few minutes ago and I want to congratulate @kristofer, it’s a neat concept!

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.

So yeah, notes are fascinating to me, haha… :man_shrugging:

1 Like

I wish that would be the case! :slight_smile: 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.

1 Like