Aimlessly Going Forward

blog by Tomas Sedovic

Notes App That Treasures Your Data

programming, announcement, project

This post has been inspired by seeing couple of new note-taking apps on Hacker News recently. What always happens is this: someone creates a notes app. It looks beautiful, feels great, then I test it out and immediately lose the data entered.

These two are no exception:

https://notational.co/app

https://standardnotes.org/

They’re both fine apps (I’m especially intrigued by Standard Notes), but there’s a way they treat the entered data that means I can’t really use them.

This post is going to be a bit of a brain-dump with a bit of an MVP (open source) at the tend.

No Explicit Save Action

The virtue of automatic saving is what every note app I’ve tried seems to promise on the surface, but never actually delivers.

Here’s what I mean:

  1. Open your favourite note-taking app in two separate web sessions (could be two browsers or normal + incognito mode) and put them side by side.
  2. Open the same note in both.
  3. Pick the same spot in the note
  4. Quickly type something in both windows
  5. Press Reload/F5 on both pages

Do you see everything you’ve typed in both windows?

(if you do, please tell me about it!)

I’ve never encountered a note-taking app that didn’t lose some of what you typed. This is absolutely vital for me. Obviously this need to work across multiple computers and clients (if the app has say a phone/desktop version as well).

Without this, the fact that it doesn’t have a save button is actually detriment: it will silently drop your data. In other words, it replaces a simple (yet outdated) concept of the save button with a more elaborate save action.

So you end up having to watch a little “syncing/saved” notification somewhere in the corner, or wait before whatever you typed fully appears in the other window or compulsively reload your note every time you want to write to it to make sure you’ve got the up-to-date contents.

I don’t often have the same note open up in multiple windows/computers but sometimes I do and the entire point of not having a save button is that you never need to worry about losing your data.

I have seen two apps that are not designed for taking notes that do this corectly: Etherpad and Google Docs. They’re both collaborative editors and as it turns out, to not lose any data you entered is the same problem space, solvable by the same tool: Operational Transformation.

This is all assuming when you’re online. I’m pretty sure etherpad doesn’t handle being offline well and I’ve no idea about Google Docs. But assuming you store to the local storage, OT should be able to handle being offline and syncing when you get back. I think.

The Silver Lining

There’s an open source project by Seph Gentle (josephg) that provides Operational Transformation:

https://github.com/josephg/ShareJS

A few years back, there was a demo website that used it to “implement etherpad in 4 lines” – basically, you set up the API/sharejs object and attached it to a textarea. It seems to be down now but it was impressive.

Since then, the project underwent a bit of an evolution, the development there ceased and two new things came out of it: ShareDB and LiveDB. I know nothing about those, so if you’re thinking about using this, you should probably look into those instead.

My Ideal Notes App

Everyone’s have different needs & whatever. Here’s what I require from a notes app:

Non-negotiable:

Important:

Nice to have:

Documara

So several years back after a few false starts, I glued together ShareJS, a bunch of coffee-script code and put up a very rudimentary UI & API.

I called it “documara” because faux-japanese words are fun and their domain names tend to be available.

I’ve been using it ever since.

It’s a bit buggy, uses an outdated version of sharejs because upgrading it was a pain, old version of nodejs, outdated express and it’s ugly as fuck. But it’s stable and I’ve never lost a single byte I put in there.

For the reasons above and a hope I’d work on improving it eventually, I kept it private. I’m opening the code up warts an all in hopes that either:

  1. Someone builds on documara and turns it into a product
  2. Gets inspired by it and does note syncing right

To reiterate, I would love to pay for a hosted solution that does this.

Of the wishlist above it ticks all the non-negotiables, everything except fulltext search in the important list and a very rough metadata and api.

You can check out the code here:

https://github.com/tomassedovic/documara

It’s been my first and only Node project. May your deity of choice bless the essence of your being.

Screenshot and link to the website for the Dose Response game

Hi! I wrote a game! It's an open-world roguelike where you play an addict called Dose Response. You can get it on the game's website (pay what you want!), it's cross-platform, works in the browser and it's open source! If you give it a go, let me know how you liked it, please!