Browse everything you (used to) know
Tanagram is, in part, a notebook for capturing all your thoughts. But unlike other notebook apps, which make you create distinct "notes" sparsely populated with content, Tanagram is designed to work at the level of individual thoughts.
Tanagram isn't yet-another-notebook-app though. It pulls in everything from your digital life — photos, articles, calendar events, chats and emails, todos, web-browsing history, time tracking results, and more — and creates links between relevant content to help you organize all the data that you come across. For example, meeting notes can be automatically linked to the corresponding calendar event, as well as the relevant articles you Googled during that meeting (if you'd like). Later, you can come back to that specific calendar event to re-discover all the relevant results from that meeting. That's much better than having to go to a different app to find your notes and keeping a dozen tabs open that you'll eventually file away.
In Tanagram, every piece of information is a node. Nodes can represent a range of content, such as a one- or two-sentence thought or annotation on an article, a specific email message, a todo, or a photo or file. Tanagram supports app-native rich text nodes which can be as long or as short as you'd like, as well as native vector graphics and drawing, optimized for tablets. All nodes are versioned, with each change recorded with its timestamp and an optional description of the change. And Tanagram provides various ways to view nodes, including a layout that enables mind-maps. A public URL can be enabled for every node, so you can share a specific article annotation, email message, or thought through a direct link.
Nodes are related to other nodes through links. Any node can link to any other, and nodes are bidirectional. Links can be created to point to a specific version of a node, or float with the most-recent version of its nodes. Links themselves can have sub-content, like a text node describing why a link was added or the context in which the link is relevant. Nodes can be manually linked, but many links will be created automatically — for example, adding a task to a todo list links the task to the list. Adding an annotation to an article links the annotation to the article. Where possible, the article's author and referring site (the site you found the article on) is also linked to the article, and as a result, your annotation has a second-degree link to those attributes as well.
Tags are a built-in type of node. Tags can be created as a global tag, or one that only exists within another tag. This enables tags to model a wide range of content organization strategies. Nodes can be manually tagged; it will also be possible to build integrations on top of the Tanagram API that automatically set tags on nodes upon each change.
Tanagram is not currently designed to be a social product. However, it would be interesting to browse relevant portions of other people's knowledge graphs. Tanagram will have a private following mechanism: you can follow other people, but they won't know about it and you won't know who follows you. For the people you follow, you will be able to see the nodes they've linked from a node you have in common — you can see notes all your work collaborators have linked to a meeting you all attended, or the commentary left on an article by someone you respect. Node links are private by default, but they can be published to your followers.
Find what you actually meant
Importing everything into Tanagram allows it to find useful, relevant results when you ask for it — especially if it's content you would've otherwise forgot you had. Tanagram's primary value should be in enabling you to reliably browse and search for the information you're looking for, even when you only have the faintest idea of what to actually search by. Importing content across channels allows Tanagram to un-silo that information. For example, if you're looking for an article that a friend sent to you, you shouldn't have to search your email, texts, and then Slack to find it — you're looking for the article itself, but shouldn't need to be concerned with the channel that it was sent through.
Tanagram's primary UI is built around a timeline. Every event and activity on a node is located in its proper place on the timeline so you can browse temporally — for example, you can see everything you read, wrote, edited, and everyone you conversed with in the past week. In this way, Tanagram is a logbook of all the work you've done.
Tanagram's timeline supports zoomable granularity, allowing you to drill into how you spent time on a particular day (useful for time tracking), or getting a high-level overview of what you worked on over a month, quarter, or even year.
Fuzzy timerange search
Search queries in Tanagram can be parameterized by time ranges, such as "a few days ago" or "last week". In our vernacular, these ranges are fuzzily defined and perhaps inaccurate (e.g. "last week" might turn out to be earlier this week, or in fact two weeks ago). Tanagram will do its best to translate these phrases to specific date ranges, automatically expanding its best guess if needed. The exact parameters used in the search are exposed in the UI so you can manually tune them if you'd like.
(This is a very experimental/vaguely-defined idea) Tanagram search can use the global knowledge graph (conceptually, merging everyone's individual knowledge graphs behind-the-scenes) to identify synonyms and terms related to your search query. This may be useful when you're trying to search by the derivative you've remembered from the original piece of information, but not necessarily its specific content. If you're looking for topic A, and someone else has tagged that same content with topic B, and someone has meaningful links between A and B, then your search for A should return results for B as well if they're relevant. This should also work for additional degrees of transitivity, accounting for relevance — if you're searching for topic A, and there are links between A and C, and between C and B, results for B and C should be considered as well.
Work at the speed of thought
Tanagram has to be fast in everything it enables. It has to get out of the way as much as possible, taking care not to slow you down so that you can navigate around and get things done as fast as you can think. This is accomplished through fundamental architecture decisions as well as carefully-designed UI. Speed is a feature.
Many related apps today are built with web technologies, delivered through the browser or Electron on the desktop. While it may be easier to develop a UI built using web technologies, such an experience comes with tough tradeoffs in responsive performance and interactions that “feel” native. Fully native apps allow Tanagram to deliver an exceptionally fast, fluid user experience where every interaction responds within 100ms. Native apps also enable extensive access to data that might be difficult to ingest otherwise, such as iMessage conversations and browser history. Finally, fully native apps can effectively use client hardware to perform reactive and speculative computation on-device (rather than requiring a round-trip to a server), which further improves the perceived user experience.
Tanagram's client apps will be built offline-first, with all relevant data stored locally; changes are first persisted to local device storage before synced with the server. All changes will be serializable and diffable, and push notifications will be used to update client apps on other devices. These apps will be built in the order that I expect to use them most, starting with an app for macOS, then for iPadOS/iOS and Apple Watch.
Keyboard shortcuts should enable almost every interaction in Tanagram. Much of Tanagram's interface will be built from a standard set of components, each with a standard set of supported keyboard shortcuts — for example, every list in Tanagram should support the same keyboard shortcuts for navigating up and down, selecting multiple items, adding and removing items from a selection set, and selecting an item. Similarly, every input field in Tanagram should support the same keyboard shortcuts for moving the cursor around and formatting its content.
There will be a global keyboard shortcut to invoke a command palette, which will provide fuzzy-matching for every command that can be performed within the current context. Similarly, there will be a global keyboard shortcut to show a command history containing a list of the actions you've performed, including those triggered by keyboard shortcuts. This is helpful when you've accidently triggered a keyboard shortcut without knowing what you pressed or what it does; a command history serves as a visual undo.
It is imperative that Tanagram doesn't get in your way when you're trying to record a thought — you shouldn't have to wait for the app to load, wonder which notebook to create a note in, or have to decide how to bring in content in an unwieldy format. Personally, at least, I also don't like seeing the gravitas of a whole blank page just to write down a sentence or two and feel guilty about adding yet another note that will get lost in a massive, unorganized list. At the same time, Tanagram shouldn't require a large amount of administrative upkeep to keep organized. It should perform as much of that work automatically as it can, using contextual clues for reference.
The quickest way to input information is not to have to do it at all. Tanagram will automatically ingest your digital “exhaust” as you use your computer — your web browsing history, git commits, and incoming triggers like emails, chat messages, and custom webhooks. For information that can't be automatically captured, Tanagram supports several direct input methods. You can type it in from a persistent input field, record photos, videos, or audio directly from the app, drag in a file, click on a browser extension button, and more.
Once in, Tanagram will extract as much metadata as it can to help organize your content. It will look at the date, embedded metadata such as geocoordinates on image files, the location of your client app, and content-specific metadata, such as the sender of an email as well as the CC list. That way, you can later use Tanagram to search for that email from your manager that you got while standing it line at your favorite coffee shop.