The main things clients need to do. This can evolve into a more detailed specification, maybe implemented by a high-level library or by #patchql.
Started by cinnamon on 2019-06-26
Inspirations:
Layers from high level to low level
Users decide what they want to see - freedom of attention / free listening
Users decide who can see them and their content - choose your audience
Users own their data; their profile is their space
Accessible by a diversity of humans
"Calm technology", anxiety reducing design, no dark patterns
Systemic health
Some of the use cases below could be combined into more general functions. Each of these will also need more options like pagination and filtering.
Options
Algorithmic feed sorting?
Get the default view (messages related to people you follow)
Get messages for a channel
Get messages for all channels you're subscribed to
Get messages related to a user (authored by, liked, follow events, block events…)
Get messages by message type (gatherings, …)
Get a complete thread
Get a single message and its metadata and backlinks
Get threads you're participating in
Get threads started by you
Get mentions
Get recently used channel names
Get recently used tags
Get messages by tag
Search by user, blob, message, channel, tag, or full text
List of usernames sorted by how connected you are to them (for @mention autocompletion)
Search images/blobs
Publish a post / comment / blog
Publish a private message
Publish a blob
Delete-request a message
Delete-request a blob?
Publish/edit a gathering
Like/react to a post
(Un)Tag a post (public or private)
(Un)Subscribe to a channel (public or private)
Get feed of private messages
?
Get for a user, respecting blocks, only showing from appropriate people (TBD)
Set for a user
Follow/unfollow
Block/unblock and Ignore/unignore (private block)
List of blocked users and who blocked them
List of people you blocked
List of people blocking you (? maybe best to skip this one)
Some kind of invite code system to find friends more easily
Get/set list of words and channels you want to hide (stored as private message or as client-specific setting?)
Other blocking policies, like
Get current user's identity
Get a user profile
Set your user profile
Get/set sameAs
data for your account
Get the set of sameAs
feeds for a user
Get a user's tags
Get a user's subscribed channels
Get a list of channels used in the user's posts
List of "Who to follow" users - this requires some thought; how do we choose them?
Get a blob data
Get & set public web gateway visibility
Get info about storage space used by feeds & blobs
"Clear cache", remove blobs, compact the log
Join a pub by invite code
List pubs following you (hosting your content)
List pubs you're following (bringing people into your social radius)
List all pubs?
List peers you're connecting to right now (pubs and local peers)
Get indexing progress bar info
List local SSB identities & create new ones (and set scuttleverse cap key)
Get/set replication hops
Control which pubs you connect to
Turn local peer finding on/off
Seen/unseen status of messages
Tor settings?
Render markdown to HTML & handle emojis
Author markdown, autocomplete emojicodes and @usernames
Hash-based avatar images or colors
Remove location metadata from images that you post
These settings are specific to the client you're in and will not be saved to your SSB feed.
Safe reading mode
Hide a specific thread so it won't keep popping to the top of your feed
Font size, font color, contrast, color-blind-safe colors, font typeface (e.g. dyslexia fonts)
Grayscale mode
Infinite scroll on/off
Disable images or click-to-view them
Disable animated images
Disable unread notification badges
Auto-expand content warnings
Hide / de-emphasize engagement stats and numbers (follower count, like count, etc)
Keyboard shortcuts
Image alt-text
Spellcheck