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.
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 |
- 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.
- 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.
- ability to move a node up and down as well as in and out
- persistence
- nice design
- navigation by link
- sidebar improvements
- display and sort by last modified time
- show first couple rows of content
- package to be deployed by Nix
- links to a note should change if you change the title
- backlinking
- syncing with CouchDB / PouchDB servers
- the module layout reflects some old design ideas (
Node.Content
,Node
being separate fromDatabase.Row
) - too many things are named
Node
. There'sNode
,Node.Content.Node
, and I think a few others - there aren't any inline formats. I'd like italic, bold, and
inline code
at a minimum. Possibly:highlights:
or~strikethrough~
too?- I'd like a few more block formats too...
>
for blockquotes in particular
- I'd like a few more block formats too...
- default selection to the end of the text box
- show the incoming links along with their titles
- fix encoding issue on notes.bytes.zone serving
- make it possible to edit an empty node
- get rid of onBlur handler (just use esc)
- I'd really like some level of autocomplete for note titles in notes
- auto-link URLs
- hitting backspace at the beginning of a non-empty node should not delete it
- automatically create notes when they're first linked?
- only show incoming links for notes, not nodes
- profile some large notes and try to make them much faster
- brackets are valid syntax for non-link reasons. Don't block that!
- don't discard content as easily when something's invalid ] ]
- change the page title to the current note
- tree editing
- moving edit focus around
- hitting alt-up and alt-down should go to the previous/next sibling
- 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?
- alt-shift-up and alt-shift-down to move nodes
- preserve cursor position when joining nodes with backspace (put it at the join point)
- delete selected text when splitting with enter (but if it's collapsed, no change)
- alt-enter or shift-enter or something should insert a linebreak in the current node
- cmd-enter should close the node in addition to Escape
- moving edit focus around
- search
- finding nodes and navigating to their notes
- backlinks
- 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)
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!
TODO: I need to add this to an in-app page somewhere.
- chick by Symbolon from the Noun Project