[Devlog 1] Why notes suck

[Devlog 1] Why notes suck

I know I know—another note-taking app. It's a second brain, a medium for thought. Everyone and their dog is trying to crack it (or sell it), a testament to the problem's complexity. We're offered gimmicks like a million features or a graph view, which flee the core issues.

  1. The more you write, the more you need to maintain.
  2. Context-unaware editing leads to redundancy and mess.
  3. Reading pages of notes is shit for retention.

And I think these are hackable.

The Minifesto

If corporate monotony wasn't enough, I have to use Confluence daily. It's less buggy than Jira, but it feels like a place to dump some proof you worked this week and forget it forever. My company hoards thousands of documents, 90% of which are never opened or actively ignored.

I once thought linked note-taking apps (Obsidian, Logseq, Notion) were the answer. However, gaining momentum takes forever, and updating a large vault becomes a chore as notes aren't change-tolerant, leaving no room for actual review. The community tries to fix this with plugins like auto tags and Anki, but this enthusiasm rarely translates to reliability.

IMHO, notes should be fun to write, require minimal upkeep, and stay ordered and searchable. Ideally, the writing act should be uncomplicated, and the underlying machine almost magical.

  • Related page suggestions as you type with powerful search and navigation
  • Study mode with adaptive spaced repetition

This way, you will never find yourself looking at four old documents on the same topic, unsure which is relevant. You'll see latent and apparent relations, notice deprecation, and form context as you edit, and reviewing your pretty notes becomes frictionless and effective.

Building the Thing

I used react-complex-tree and tiptap for the editor and made some custom Nodes to render page links and suggestions. I'm using compromise to (approximately) check when keywords change so I can more thoroughly parse keywords and update suggestions server side.

The backend is microservices because I have a mild Docker Compose fetish. I've gone for ScyllaDB with Elasticsearch sitting on top. In a previous project using just Scylla, I learned that Scylla loads all rows into memory for non-PK queries; a search engine this time felt like a good idea. I have an Express API exposed to the front and an internal NLP engine for better keywords—context awareness, entity disambiguation, lemmatisation—and thus better link suggestions. There is no LLM or bespoke model building for now; we can get close enough with traditional tools.

We'll soon have the expected bells and whistles, like caching (for auth, file tree fetching) and encryption, which I can rip out of old projects. Tiptap will make it easy to introduce real-time collaborative editing with its outstanding Conflict-Free Replicated Datatype (CRDT) implementation. However, these aren't priorities for a personal knowledge management system.

I'm working mainly on the "study mode," not just normie spaced repetition and active recall. Nabu will look through your notes and dynamically generate flashcards for review. I typically make flashcards from notes for more effective study, but dense notes are more traversable, so why not have both at once?

Immediate next steps:

  • Move the currently underlined suggestions to a separate bubble menu. My custom tiptap InlineUnderline Node changes the underlying editor content, which can cause conflicts within CRDTs. I also don't want to suggest pages to collaborators they don't have access to
  • Create a more intuitive UX and an in-app walkthrough on the first login
  • Editor image support
  • Templating, to avoid typing out preferred formats over and over

And perhaps, if everything goes to plan:

  • Vim/Emacs keybindings
  • Self-updating and self-reordering notes
  • GitHub integration and code-aware NLP to bridge technical and business logic

If you, dear internet person, know how to scale search, create less jarring UX or design attractive but legible interfaces, please assist :)