This repository has been archived on 2024-04-17. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 
Go to file
Brian Hicks 9e9e1ba22e interpret ELM_FLAGS correctly 2020-05-14 17:02:19 -05:00
docs use a screenshot instead of an ASCII drawing 2020-05-12 16:10:35 -05:00
nix add nix packaging 2020-05-14 16:45:17 -05:00
review remove unused stuff everywhere 2020-05-13 17:01:39 -05:00
script interpret ELM_FLAGS correctly 2020-05-14 17:02:19 -05:00
src load PouchDB via ES6 module 2020-05-14 16:33:51 -05:00
tests only render the cover button if there's a messsage for it 2020-05-14 05:58:11 -05:00
vendor vendor custom element builtin 2020-05-14 14:42:00 -05:00
.envrc start using ninja 2020-05-14 13:48:36 -05:00
.gitignore ignore results 2020-05-14 16:45:09 -05:00
README.md mark done in README 2020-05-14 09:18:17 -05:00
config.json add pouchdb-server 2020-04-29 08:46:05 -05:00
default.nix interpret ELM_FLAGS correctly 2020-05-14 17:02:19 -05:00
elm.json first pass at a relative time widget 2020-05-13 17:32:23 -05:00
modd.conf interpret ELM_FLAGS correctly 2020-05-14 17:02:19 -05:00
package-lock.json add a bunch of review rules and conform to them 2020-05-13 16:54:15 -05:00
package.json remove unused stuff everywhere 2020-05-13 17:01:39 -05:00
shell.nix use modd and devd for the developer experience 2020-05-14 15:09:17 -05:00

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.
  • 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
  • the module layout reflects some old design ideas (Node.Content, Node being separate from Database.Row)
  • too many things are named Node. There's Node, 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
  • 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
  • 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)

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