Skip to content

Latest commit

 

History

History
109 lines (85 loc) · 5.1 KB

README.md

File metadata and controls

109 lines (85 loc) · 5.1 KB

Notes

This is my implementation of a note-taking app, organized around the following principles:

  • Linking creates structure as necessary. Having to choose a category or folder for notes just makes me tired. I want to write and connect stuff as I think of it. Structure will emerge where it needs to! I should also be able to see all linked/unlinked references to a note.

  • Notes are for me. Sharing is important but secondary, and exporting should be fine in most cases. Note, though, that this means I want importing to work great so I can slurp in stuff from multiple places!

  • Anything I can see, I can edit. There should be as few read-only views in the app as I can manage.

  • Keyboard shortcuts for the win. I want to be able to navigate completely with the keyboard. Vim-ish keybindings, if possible!

  • If I can't organize things I need to do, I'm not going to use the tool. It should handle TODOs nicely (due/defer, mark/complete/cancel, recurrence rules?) It should also be possible to reorder/filter todos in some sort of aggregate view.

  • Aggregate views reveal structure. These look like queries. Maybe I want to see only the first marked TODO in each note? Should be doable.

Keyboard Shortcuts

Shortcut Action Implemented
Alt-Up Move edit cursor up No
Alt-Shift-Up Move node up No
Alt-Down Move edit cursor down No
Alt-Shift-Down Move node down No
Alt-Right Move edit cursor to first child No
Alt-Shift-Right Indent No
Alt-Left Move edit cursor to parent No
Alt-Shift-Left Dedent No
Tab Indent Yes
Shift-Tab Dedent Yes
Enter Split node at cursor Yes
Backspace Join nodes Yes
Esc Stop editing Yes

Interaction Ideas

  • It'd be cool to be able to select/export a group of notes. These could either be viewed in a read-only mode or imported into someone else's database. I guess it would also be possible to structure the export with CRDTs for easy merges.
  • It'd be cool to persistently save a database somewhere shared, but that potentially violates the "no formal structure" principle so it needs to be done carefully.
  • It'd be super slick to do something like idea fight where one could order the children of a node.

Next things to do

  • nice design
  • navigation by link
  • tree editing
    • moving non-edit focus around
      • hitting up and down keys should go to the previous/next sibling
        • this might mean adding rich text support with like elm-rte
    • refinements on existing behavior
      • move to the previous sibling when I backspace through a node
      • hitting tab/shift-tab should preserve the cursor position, if possible
        • Html.Keyed? Blocking keyup defaults as well as keydown?
  • search
    • finding nodes and navigating to their notes
    • backlinks
  • order notes according to most recently updated
  • come up with a consistent design for keybindings (e.g. alt moves edit, alt+shift moves node)
  • offline support (webworker, caching?)
  • exporting to
    • (likely) markdown
    • (less likely) rich text of some kind
  • allow multiple notes to be edited concurrently
  • more metadata (todos, etc)

Finished

  • persistence
  • at some point, I want to move away from using ints for IDs and go to UUIDs. Possibly UUID1s?
  • basic tree editing
    • ability to move a node up and down as well as in and out
      • moving up and down to siblings
      • if you're at the first child, moving up goes to the parent.
      • if you're at the last child, moving down goes to the parent's next sibling.

Notes to Self

elm-rte-toolkit looks cool, and it may make sense to add it later, but don't go for the complexity now! Keep things simple as long as possible!

Layout

Prior Art

  • Roam does bidirectional links amazingly well.
  • Bear has a really nice user experience.

Icons

TODO: I need to add this to an in-app page somewhere.

  • chick by Symbolon from the Noun Project