UX Affordances of a Stack

What is a stack

A stack is a novel interface for users to navigate, organize, and manipulate items of a variety of "data types" in a unified manner. Concretely, a stack is a visual presentation of an ordered list of items that can be navigated by scrolling up and down, where each item is visually represented by a card roughly the size and shape of a 3x5 index card.

..stack diagram..

Why we need a stack

The DXOS model upends a key relationship between applications and data: rather than each application having a separate silo of data, there is a single shared substrate of data that multiple applications interact with.

How does upending this relationship change the Composer environment?

  • Many diverse types of data coexist. Multiple applications read and write to the same data store, leading to a variety of items of various types and media: documents, images, whiteboards, table rows, person records, etc.
  • Apps are always running. Within Composer, applications can be thought of as all "running" simultaneously. There's no need to "open" or "quit" an application. There's no longer a need to differentiate between the modes of "view" and "edit."
  • Items don't have an inherent location. Items do not live at a specific location in a file system construct as files do, but rather in a database. Thus they can be visible in multiple places in the interface at the same time. (This concept is sometimes called transclusion.)

This reversal creates a need for new user interfaces that are not predicated on an app silo model. We need new UI paradigms. Specifically, we need a way of navigating, organizing, and manipulating items that takes seriously:

  • Transclusion over location
  • Visualize multiple data types
  • Apps as simple views into data

Prior Art

In an application-centric world, there have been various solutions to this general problem.

  • The Desktop Interface: the desktop, folders, overlapping windows
  • macOS Finder Views
    • List
    • Grid
    • Columns
    • Quick Look
  • Block-based editors
  • On mobile, the ubiquity of UITableView on iOS
    • scroll up and down
    • pull-to-refresh
    • swipe left and right on items

Data Structure

Given any collection (ordered list or unordered) of items, that collection can be visualized as a stack. A stack presents an ordering of the collection:

  • manual sort order (stored in the list itself if ordered?)
  • currently active sort order (manual or automatic)
  • hidden item IDs
  • active view mode

Stack Affordances

The UX affordances necessary for a stack to function are as follows:

  • Add item to stack
  • Remove item from stack
  • Re-order stack (manual sort order)
  • Edit item (depending on the preferences)
  • Sort stack automatically
    • most/least recently updated
    • most/least recently created
    • by kind
    • by name
    • by size?
  • Navigate to the stack item
  • Drag item from any other view into the stack
  • Navigate up and down via keyboard

Possible extensions of stack functionality:

  • Hide or archive item
    • the ability to leave something in the list but mark it as "dealt with" - archived or hidden
  • Delete item completely
  • Context action items based on item type
  • Collapse to list view (just headers of the cards)
  • Expand item to full height (but not navigate to the item)
  • Items must be able to customize their own appearance
  • Switch between different views (plugins) for any item
    • view a markdown doc as a doc or as a slide
  • Publish stack as web page
    • this is probably a different plugin actually, just like Presenter is a different plugin

Use cases

How might we use a stack to accomplish a variety of user objectives?

Browsing a diverse set of items

Spaces within Composer can contain a variety of different item types. A stack can be used to visualize the items within a space and allow for them to be quickly navigated to, edited, and/or sorted.

Queue of items to work through (inbox)

  • Rather than having a custom "email" plugin, a stack could be used to sort through and deal with emails
  • Favorited tweets automatically sent to a List, work through as a Stack

Slide deck editor

  • Don't need a full "slide editor" - stack primitives give you most of what you need

Curating a collection of related items - Pinterest

  • Collect multiple items into a stack
  • View the stack in masonry mode

Notification queue

  • Rather than build a custom "notifications" feature in Composer, it can be built simply from the existing stack primitives - no special feature needed
  • Notifications plugin would handle the presentation, but stack would handle the list manipulation

Open Questions

  • What about mobile?
    • Just like we don't use Finder metaphors on mobile (iOS metaphors instead), this interface is meant for Desktops (keyboard and mouse/trackpad, wider screen, etc)
    • Reduce things to Cards - different affordances
  • How do we make it more composable with other DXOS primitives?

Raw Notes

  • Need a new paradigm for manipulating objects in our system b/c the system is different than others
  • Shared data substrate
  • Built for transclusion
  • Multi-media
  • Something in-between editing and browsing
    • Don't need to open the full application in order to edit the item (there are no "full applications")
UX Affordances of a Stack
Interactive graph
On this page
UX Affordances of a Stack
What is a stack
Why we need a stack
Prior Art
Data Structure
Stack Affordances
Use cases
Browsing a diverse set of items
Queue of items to work through (inbox)
Slide deck editor
Curating a collection of related items - Pinterest
Notification queue
Open Questions
Raw Notes