remoras diaries: part 1

I'm tired of waiting for my ideal notetaking / to-do / self-management app to exist.

Logseq was close. But it's been what, 2 years?, since they started a rewrite. But I knew I wanted the features they would add (databases)! But two years on and that's come at the sacrifice of other features I use (whiteboards), while making others more challenging than I want (self-hosted sync).

So,

Remoras. A fish. Friend of sharks, wales, turtles and rays. A mutualistic relationship to get them where they want to go.

At its core, I want Remoras to be an outliner. Everything is (or could be) a node. It can link to anything else. I don't have to think about where to put a new note; it can just go into the journal.

But I also have Special Systems™ I use to keep my notes organized where it matters.

And if I'm going to do this, I want anyone to be able to use it. This means I don't want to restrict the design to an outliner-only mental model. I want to design an app that is adaptable to different ways of notetaking. From block-based workflows in Roam Research to folder-file systems like Obsidian or database-heavy approaches like Notion – remoras should let you define your notetaking experience.

In these diaries, I'll walk you (really, myself) through what I'm thinking.

This is where it gets kinda weedy. Up first: the base data model. Here's where I'm landing.

1 document. Partly because I'm looking at Loro CDRT. Partly because that (being a single document) seems pretty fundamentally required for an outliner to function well across sync and collaboration.

The document contains a tree. Again, necessary for an outliner.

Now, trees have nodes. Nodes=maps. If we're using Loro, there's some prescription of required Loro-managed fields. But there's also a lot of flexibility. Here's a diagram of where we're at:

Doc
└── Tree
├── Node
│ ├── Node
│ │ ├── Node
│ │ ├── Node
│ │ └── Node
│ └── Node
│ └── Node
└── Node

Before I can show how I envision this maps from Logseq outliner to Obsidian file-folder and others, we need a basic node structure. I'm going real simple here because

weeds

nodes are weeds.

we need a whole other blog just about what the fuck is the node.

So. Simple:

Node = {
"id": "string", // Unique string ID
"parent": null, // Or string = id of parent node
"index": 0, // For ordering nodes
"data": _anything_, // A space for stuff
}

And we'll continue this later tonight / tomorrow / another day because it's dinner time. Toodles!