Show HN: CRDTs+WASM for local-first, collaborative note-taking in the browser
fuzzynote.xyz
fuzzynote.xyz
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)
It also seems way to large for the functionality (2.6MB compressed)
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)
Honestly, this was a personal project that got a bit carried away. The initial iteration was just a simple terminal app that allowed me to fuzzy-search through a lot of my notes quickly, with the ability to store and access a plain text file against each. I was rsyncing to the cloud so I could access my data across different machines, but got frustrated at the lack of conflict resolution, so figured I'd build a mergable data structure and use that. It _then_ became annoying that I couldn't easily access my list on the go, and hence the web app was born.
I actually (amusingly) built this completely on my own, which certainly made things more challenging WRT testing the collaborative components. Have certainly had the opportunity to test it a bit (mostly for "life" things such as sharing shopping lists...) but hopefully opening up the MVP will get some more organic and extensive usage and the opportunity for some good feedback!
Another thing to solve is ever-growing data sets. I've tinkered with some mechanisms to combat this (namely compacting the CRDT event log based on a bunch of rules) but this is tricky and I'd prefer the app to mature a little before I implemented this. Also on the backlog! Lots to do for sure.