An app for saving notes as text blocks arbitrarily arranged on a 2D canvas.
Current working title: Flatland Notes
Like so many free and open source software projects, this is made to scratch a personal itch. It's to help me to write - to help me to think.
I want a place to put my ideas. I want to be able to freely re-arrange them - to have parallel notes laid out side-by-side - with no imposed linear or hierarchal tree structure.
## Main features
- All-direction scrolling 2D canvas - text cards with formatting, draggable to any position - visible links between cards - save data locally and to cloud storage
There are a million apps that already do everything listed above. E.g. Twine. Every graphics editor. Every program in the Microsoft Office suite (they all have drawing tools).
And they do a million other things. I'm making this which will do much less. A simpler application.
I think the basic set of features is enough to support a wide variety of use cases. I'm planning to use it to plan essays, to store bookmarks, for tracking my progress though books and videogames with kanban boards.
## On simplicity
I want this app to be simple. Simple codebase, simple, minimal set features. It should be quick to learn.
But there is tension between keeping a codebase simple and implementing a good, simple-for-humans user interface. Much unwieldiness in software arises from this, when computery structures are imposed upon software users. Ted Nelson has much criticism of this frequently-repeated outcome.
This app will evolve like this: I'll make it minimally usable by me. Then I'll find other users, a small group, and let their feedback guide the process.
## A solution in search of a problem
Ideas for applications:
Timetables - use the x or y axis for time.
2D political spectrum - axis could be left/right x authoritarian/libertarian... but many other combinations are possible.
Maybe it should be extensible into higher dimensions? C.f. Thortspace. High risk of losing coherence...
It won't be all things to all people.
Also it's open source, so people can fork it.
## Other key aims
It should support a LOAD of content. Like, why can't every note I ever make go into this? Therefore: infinite canvas.
Keyboard-only usage should be well-supported.
Considering a plugin interface. Inspired by Federated Wiki.
Simulated physics in the interface.
Navigation aids - prevent user getting lost in blank space.
## A high vision
Spatial Notes is inspired by Jef Raskin's idea of the Zooming User Interface. His was a more ambitious, all encompassing system: ALL the documents on a computer shown on a big canvas, and you navigate by scrolling and zooming.
Maybe this little application will evolve into an OS, some day! I dreamt of an operating system with a zooming UI and no mouse cursor. The laptop's touchpad is dedicated to scrolling and zooming. Text input from keyboard is always be sent to a command line, sitting below the graphical part of the UI.
## Technical implementation details for UI
But for this software, I'm not using totally unorthodox UI. I'm not throwing away the mouse cursor.
I do borrow the ZUI emphasis on zooming and scrolling. And I'm dealing with an infinite canvas. I'm using a click-and-drag interface for scrolling - built on the native browser scrolling behaviour. Mousewheel will control the zoom level. So zooming will be a custom implementation. There will be keyboard controls, too.
On tablets and phones... the UI should seem like standard touchscreen UI for drag-scrolling and pinch-zooming. How much can be native, and how much needs re-implementation? Hard to say now.
Yes, I want this working on my phone! (But this has lower priority than the desktop browser with keyboard + mouse experience. And more specifically, my first focus is on Chrome and Firefox. Current code is buggy in Safari. So be it.)
Ideally, as much as possible is built using native browser functionality.
More realistic mid-term view: the app could support subscriptions to feeds (RSS and such) that automatically push new cards onto your canvas. Need to consider how to handle the distinction between user-made cards and feed-generated-ones.
Maybe cards could have code as well as plain text -- code that manipulates other cards.
Like cells in a spreadsheet.