|
||
---|---|---|
docs | ||
nix | ||
review | ||
script | ||
src | ||
tests | ||
vendor | ||
.envrc | ||
.gitignore | ||
README.md | ||
config.json | ||
default.nix | ||
elm.json | ||
modd.conf | ||
shell.nix |
README.md
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
- 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)
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
Icons
TODO: I need to add this to an in-app page somewhere.
- chick by Symbolon from the Noun Project