home ~ projects ~ socials

It's Time To Build My Own Notes App

I've decided not to build my notes app right now. After doing some initial prototype work I realized that most of what I do is covered by my Neopoligan format and Neopoligen site builder. You can read more about why I designed it here: Why I Built Neopoligen

I love taking notes. My current collection contains 10,913 entries going back more than a decade. I used nvAlt1for my notes app for years. I tried other apps (e.g. Obsidian2) when nvAlt was getting long in the tooth, but nothing worked quite the way I wanted. Over the past few years, I ended up making my own file format3 and Neovim plugin along with a website builder4 to publish them.

The setup works great for longer form notes, code snippets, and blog posts. I started adding features to the website builder to handle collections (e.g. quotes and bookmarks), but it always felt like it had a little too much friction in plain-text. I moved to playing around with the spreadsheets from LibreOffice5 to store data. It made things easier, but I don't like working the long lines of spreadsheets. Having to use a second app was a bit of a bummer too.

The next step was looking at Zotero6. It has a cool feature where you can give it an ISBN number and it automatically pulls in structured data for the given book. I really liked that. Both the auto fetching and the structured data. I'd keep structured data as attributes in my plain-text format, but it's nice to have enforce the structure for you.

Zotero has an API that I could tie into with my site builder the same way I was planning to do with LibreOffice. But, that would still mean I've got two sources for my content (Neovim plain-text files and Zotero). Having to pick which app to put something into is one of those little frictions that I really dislike. When I want to add a note, I want to open my singular notes app without thinking about it.

So, it's time to go to the next level and build my own notes app.

Ideas

Here's what I'm thinking (in no particular order)

  • This app is just for me. (I'll probably open-source it at some point but after spending a lot of time thinking about how other folks would use Neopoligen, I know I don't want to have to deal with that for this project. I'll be able to get something working a lot faster.)
  • The app will store content and publish a website with the website being a first-class citizen that's considered during all parts of the content set up.
  • If I was on Windows, I'd start this off as an Access Database app. I'm not, so it's going to be a Tauri app with an SQLite DB for the backend.
  • There will be field types that are made up of structured data (could be as simple as a text blob, or a collection of things like first name and last name for an "author" field type)
  • The interface will provide a way to make new field types
  • There will be note types. When you make a new note, you'll pick the type of note you want to make. (e.g. you could make a note which would have one big field in it, or you could make a quote which would have fields for the quote itself, along with the author, a source url, etc...)
  • The interface will provide a way to make new note types
  • When making a note type, fields can be set to, "single" or "multiple" (e.g. there would be an "authors" field for a "book" content type that would have "multiple" "author" fields)
  • Each view into a note will effectively just looking at a nicer version of it's database entry
  • Text fields will be parsed and processed as Neopolitan content
  • Outputting a static site is a primary function of the app
  • Website output will be controlled via Jinja style templates
  • No external requirements for website output
  • One type of field/content will be to include other single entries
  • One type of field/content will be to include multiple other entries (e.g. a collection of quotes that match a tag)
  • Every entry has an auto-generated unique ID
  • Every entry has an auto-generated date added and date updated timestamp
  • Every entry can have tags
  • Built In Search
  • No folder structure, everything will be based off search and nonce words
  • Every note type will have a template field in the db. It'll default to "default" but can be overwritten for different output to the website.
  • Every entry will have a status for private/scratch/draft/published that can be used to determine if they should be published to the site or not
  • Titles are not required
  • The app will be a single binary with no external dependencies
  • There will be only one global collection of notes
  • The output will go to a single website
  • Notes can include other notes (e.g. a note might have a references section with links to other reference notes)

Future Ideas

These are things that won't go in the first version of the app, but probably will at some point.

  • Syntax highlight code blocks
  • Executable code blocks
  • Versioning of entries
  • Image handling
  • Archiving webpages for bookmarks
  • RSS Feeds
  • Plugins
  • API to allow things like browser extensions for bookmarking pages
  • OG Image generation for posts
  • Index pages for collections with pagination
  • Neovim motions for the text fields
  • Automatic data retreival via ISBN, YouTube Id, Spotify Id, etc...
-- end of line --

References

Neopolitan

Neopolitan is my markdown replacement format. I don't have a good page up on it right now to link to though.

Neopoligen

Neopoligen is my static site generator that uses the Neopolitan format. As of this post, I'm pausing development on it while I work to get content stored in this new app. Once the content is stored, all the Neopoligen work will be merged into here to produce the site output.

This was almost my replacement for nvAlt, but it just didn't quite work the way I wanted.

An open-source office suite you can use in place of Microsoft for lots of things.

A free, open-source tool to help collect, organize, annotate, cite, and share research