-
Notifications
You must be signed in to change notification settings - Fork 121
Roadmap
em is a process-oriented note-taking app that facilitates sensemaking flow.
A flow state... is the mental state in which a person performing an activity is fully immersed in a feeling of energized focus, full involvement, and enjoyment in the process of the activity. [1]
We can experience flow states with anything when the conditions are right. Athletes, musicians, programmers all experience flow. Why not also with sensemaking in our everyday lives? This includes journaling, note-taking, planning, outlining, analyzing, synthesizing, brainstorming, distilling, summarizing, consolidating... any cognitive-linguistic conceptual activity. Pen and paper have always enabled these activities. Yet digital technology is more than simulated paper. We can leverage virtuality to extend our symbolic processing capacities and enable more powerful and fluid sensemaking experiences. As social systems collapse, environmental threats heighten, and cultural change speeds up, we need good sensemaking and good sensemaking tools more than ever before.
em provides a personal thoughtspace coupled with interactive controls that facilitate the emergence of a conceptual flow state. em maps shortcuts and mobile gestures to semantic operations (what your mind is doing) rather than mechanical operations (what the computer is doing), creating a tight feedback loop between thinking and writing.
An embodied, cybernetic relationship with technology that extends our collective cognitive, linguistic, symbolic, and conceptual capacities so that we may more deeply, thoughtfully, and wisely make sense of ourselves and the world we live in.
em is released as public source under the Do No Harm License.
Development of em is funded by the Cybersemics Institute, a U.S.-based 501(c)(3) nonprofit founded by Raine Revere.
em is in alpha status.
em development is currently guided by five major objectives. Within the objectives, epics represent groups of related tasks that require significant development effort. Some of the key issues are included below, but please view the Milestones for an up-to-date list.
em must be speedy and smooth up to 100,000 thoughts. This would allow a reasonably prolific thinker to use the app for 2-3 years. At time of writing, performance issues emerge around 10,000 thoughts, although em is actively being used by its founder with about 25,000 thoughts. Larger capacities must be adequately handled in the areas of performance, storage, and load times.
(For a lifetime of sensemaking, em should eventually support 1,000,000 thoughts or more.)
-
🗽 Independence
There are several architectural upgrades that involve refactoring the codebase into more "independent" pieces. Tight coupling in these areas represents a significant impediment to the goal of supporting 100,000 thoughts. Creating a solid architecture that can grow is essential to scaling thought capacity and achieving production-level performance.
-
Independent Edit #495Changing a thought currently requires changing the context of all its descendants. This could involve hundreds or thousands of thoughts. Instead, changing a thought should only change its immediate connections.
- Independent Render #188
- Thoughts are currently rendered in the DOM as nested elements. Since ancestors are containers of descendants, they cannot be removed, even when they are no longer visible, as that would also remove all of their descendants. Instead, thoughts should be rendered as siblings and their x position controlled programmatically. This will not only allow hidden thoughts to not be rendered, but also more complex animations and transitions.
- Independent Update #304, #230
- There are known syncing issues when editing on multiple devices that result in modified or even deleted thoughts. This is likely due to update collisions, as both
thoughtIndex[].contexts
andcontextIndex
use arrays which are not easily merged. Instead, thoughts and contexts should be stored as objects so that individual thoughts can be added/removed without potentially overwriting the other thoughts with a state that has been updated on another device. There may be other syncing issues, but this is a known problem that must be addressed first.
- There are known syncing issues when editing on multiple devices that result in modified or even deleted thoughts. This is likely due to update collisions, as both
-
-
📉 Front-End Optimization
Standard performance measurements and optimizations are needed to ensure a smooth and snappy user experience.
The user's data is sacred. Any risk of data loss or corruption is the highest priority. There are extensive unit tests for the front-end state (reducers), but data integrity issues can be introduced through timing issues with sync, multi-client interaction, undo/redo consistency, and local storage persistence.
The features and capabilities of a sensemaking tool should be part of an integrated design that affords sensemaking flow. While many more features have been designed, these are the essential features necessary to use em as one's daily sensemaking platform.
- 🏙 Context View
-
Initial - Commands work across normal and context views #320
- Nested context views
-
-
↗️ Import/Export - 📎 Linking
- Inline Links #869
- 📱 Multi-Device
- Realtime sync
- ✏️ Recently Edited
#180,#323, #246 - 🙂 Onboarding Experience
- Test tutorial
- Improve help system
- Search #317 #318 #874
-
🛠 Toolbar-
Initial
-
🔠 Sorting- 🗄 Table View
- 🗑 Undo/Redo
-
Basic #105 - Persistence
- History
-
- Collaboration
- Publish
-
Initial - IPFS Pinning
- Self hosting
- Mutable
-
- Share
- Public
- Permissioned
- Collaborative Editing
- Publish
- Import/Export
- Google Docs import
- Notion import
- Roam import
- Integrations
- API
- Stand-Alone React Component
- UI
em has been built mobile-first, offline-first from the start. However, significant work is required to adapt the codebase to work as a native app. The current plan is to use Expo + React Native Web to create a (mostly) shared codebase between native and web.
em is open to contributors from the open source community. In order to cultivate developer engagement, the codebase should be robust, well-organized, follow best practices, offer an API, and keep up-to-date with relevant new libraries and techniques.