Decoy Space

HomeShimiHouse Sitting

Creating my upgraded note-taking tool

Notes

During COVID, I developed a system for myself which radically transformed my life. Before, I'd been a chronic procrastinator, desperately trying various approaches to get myself into the habit of being productive. I tried punishing myself for not meeting my goals, I tried rewarding myself with treats for hitting my goals, I tried forms of bullet-journaling, though it never stuck for me. Whatever I did, nothing really felt right.

However, in 2019, I wanted to set up a small business, and to help track ideas, people, etc, I had a small note-taking app which allowed me to create notes, and add tags to it, where the tags were ordered in a hierarchical nature, allowing me a lot of flexibility in how I could search for things.

While the business ended up not going anywhere, I quickly realised that my life could absolutely use something like this, and so I created a more advanced version of it, called Notat (Notes + Tags + Attributes).

With this app, everything was either a note, a tag, or an attribute. You could add tags & attributes to notes. You could add attributes to tags. You could even add attributes to tags that had been added to notes. It was incredibly simple, but also incredibly flexible as a schema.

The real power of this though, is that with this standardized format that all my data was coming in, I could very easily add code to do clever things with it. I set up automated habits for myself. I had advance reminders of when important people's birthdays were coming up. I had automated feeds pulling data from EventBrite for events that might potentially interest me in my local area, already filtered by some of my own custom criteria. I had an exercise routine that allowed me to really track my progress. The amount that this thing helped me get some structure to my life is truly amazing.

These days I don't procrastinate in going to the gym, I'm just up and doing it. Same for the boring household chores. I think there are areas where I have gone overboard in my current usage of it, but it's a constant game of experimentation and recalibrating.

However, as useful as its been, the big downside is that it was built as a desktop app using javascript + electron. Now during COVID this wasn't a problem, because none of us were going outside of our homes anyway. But since life has started back up again, I've been finding that I've been doing more and more workarounds to handle this limitation of the tool which has otherwise revolutionised my life.

Another problem with my current version is that with it being used for task management, event management, content feed, exercise tracker + habit tracker is that sometimes the different parts are a little too intertwined. Organising tags on things to keep them organised and not have one part of the program pulling in notes that I didn't intend it to has been something I've had to keep a close eye on. On top of that, I have a couple of other apps that are also built on the same system, one for managing my finances, one for managing my recipes & groceries, and these suffer from the opposite problem that they're too removed from the rest of the life management. For example, if I have a special event coming up, I might like to tie some recipes to that, remind myself that I'll have to keep in mind certain allergies etc. Or be able to tie costs to a particular event, so that when my expenses are up for a particular month I don't need to do too much digging into why that is.

To solve this problem, keeping all my data linkable in the same database, while still being kept distinct, not devolving into a big garbled mess, I've added the concept of spaces to the new version. Each note is tied to a space, and when querying for notes you use a modified version of SQL I wrote specifically for this which only allows you to query within a particular space, searching for what tags/attributes have been added to them, for example: getNotes("#Tentative AND ((@Start BETWEEN {2024-06-05} AND {2024-07-09}) OR NOT @End.Exists())", calendarSpace). Alternatively, you can query for all notes across all spaces that reference a particular tag, as a way to get an entire cross-system view of a particular item.

The final big change that I've made in this new version is that previously Notes & Tags were entirely separate entities, whereas in this version I realised I could get some really nice benefits from making Tags actually be Notes! When you're creating a new Note, you get the option to set its own Tag, which is either public (available for reference by ALL other notes) or private (only available for reference by notes within the same space). The main motivation for this was that in my current system I had projects, which themselves contained a collection of tasks that would need to be completed for the project to be marked complete, and a number of projects may be part of some overall goal that I wanted to achieve. My old Tags approach just didn't support that in a particularly nice way, whereas the new approach can handle it so gracefully, it's something that I'm incredibly happy with.

So the new schema of my note taking tool now looks like this....

Notu Schema

So, it's now time to build it as a set of components that I can then piece together into a website for myself. Of course, putting it on the web brings extra security concerns, something I've been quite fortunate in not having to worry about too much with my current version being just a desktop application.

With how much the current version of this tool has helped me, despite its limitations, I'm so excited to see what the next version can do.