top | item 30904405

Show HN: CRDTs+WASM for local-first, collaborative note-taking in the browser

20 points| sambigeara | 3 years ago |fuzzynote.xyz

15 comments

order

sambigeara|3 years ago

Hi HN! Author here.

A little while ago I shared the terminal based version of the project (https://github.com/Sambigeara/fuzzynote) with the community. I since got inspired, and disappeared into my loft for 9 months to work on leveraging the core logic for use in a WASM-based web client. So you can now sync your notes between your terminal and any reasonable modern browser (some early limitations in mobile)!

The project has (finally) reached MVP and is ready for use, and any feedback is very welcome.

(Direct link to app https://fuzzynote.app)

0des|3 years ago

This is so cool :) I can't wait to use this. I was just describing something similar to a friend I was collaborating with recently, and actually uttered the words "hey you know, somebody should make ..." And here it is!

shaunxcode|3 years ago

What CRDT library are you using? Or is this something new?

riidom|3 years ago

In your pricing list do you mean "TBA" instead of "TBC"? Or maybe it's just my english, then ignore me :)

sambigeara|3 years ago

Haha, good point - perhaps "TBA" would have been more appropriate here! Thanks. I've been so far more focused on getting MVP out, so haven't given a lot of thought to the specific pricing tiers yet, but I hope to get all that set up really soon (pending some profiling/feedback etc).

turtlebits|3 years ago

Not sure if I'm missing something, but this just looks like a text editor (with an extremely confusing UI). Why do you have to use the search input to add anything?

It also seems way to large for the functionality (2.6MB compressed)

sambigeara|3 years ago

I totally agree that the UX is basic and unclear at present. Lots to do on that front; on design, documentation and otherwise! Appreciate the feedback.

You don't have to search in order to add anything, though. Focusing on the (empty, or otherwise) search and pressing Enter will add an item below. Enter on any item will do the same. However, the text within the first search-group will be invisibly prepended to each line you add whilst it's filled. This is a method by which you can group notes via a common prefix. Also, each TAB-separated search group is applied to the result set individually! There's some stuff in the help popup that might make things a bit clearer.

The binary size is an unfortunate side-effect of golang's webassembly compilation sizes. I can't (yet) use tinygo as the compiler as I rely on some unsupported packages. The app will be progressive soon enough, to minimise downloads and optimise startup.

Edit: I should probably mention as well, that on top of the basic textual capabilities, the web app is managing all data syncing/merging/playback/collaboration, continually. The cloud infrastructure is very basic, namely there as plumbing to ship DB files to the appropriate places. All the heavy lifting is done locally! Incidentally, this paves the way for potential E2E encryption (the app is ready, the key management/distribution etc is the challenge here)

chaosprint|3 years ago

Did you implement CRDTs manually or depend on yjs?

sambigeara|3 years ago

Manually! The CRDT itself is an event log. The client state is built from a secondary data structure which replays from the log (the extent of the "replay" determined by how much data needs to be merged etc)