Snippets

Chad Retz Retzle Conceptual

Created by Chad Retz

retzle

Overview

Retzle is a communications application built around updating channels with posts targetted to certain people. People can choose to read the channels if they wish. This is essentially the concept defined here but using the word "channels" instead of "streams" and some added features.

High-Level Concepts

Below are a set of conceptual components of the system. At the end of each section is a list of possible attributes for each component (which may include duplicates in the case of foreign references).

Account

An account is what a person logs in to. An account is meant for a single person. Possible login vectors include email/password, OAuth w/ popular services, SAML, etc.

Accounts are not directly referenceable in any way. Accounts may have multiple handles, and must have at least one handle to post, receive non-public posts, or subscribe to channels.

Possible attributes:

  • ID - UUID
  • Supported auths - one or more ways to login
  • Handles - collection of handles

Handle

A handle is the equivalent of a user on any other system except that they cannot be logged in to directly. However, a single account may have multiple handles so they are basically supported "sockpuppets". Unless explicitly enabled on a per-handle basis, only the account holder will know the handle belongs to him. Account holders may choose to say "handle X and Y are the same person" but can't necessarily say what account they belong to because an account is not directly referenceable.

A handle is accessed at /HANDLE_NAME.

Handles may subscribe to channels and group them into channel groups. Handles may create channels under their handle. A handle channel is accessed at /HANDLE_NAME/CHANNEL_NAME.

Possible attributes:

  • Account - the owner
  • Name - URL-safe name
  • Friendly name
  • Channels - all owned channels
  • Root channel group - top level channel group containing hierarchical set of channel subscriptions

Organization

Organizations are basically channel owners. They essentially act just like handles except they don't belong to a single account but rather a configurable group of handles. An organization is accessed at /ORG_NAME. Organizations may create channels under themselves. An organization channel is accessed at /ORG_NAME/CHANNEL_NAME.

Organizations can have permissions on what handles can create channels or they can have permissions on their channels in general.

Possible attributes:

  • Name - URL-safe name
  • Friendly name
  • Channels - all owned channels
  • Admin handles - collection of admin handles for this organization (can read, write, create, delete, and update everything)
  • Writer handles - collection of handles that can create and read posts across all channels (this can be "everyone" of course too)
  • Reader handles - collection of handles in addition to writers that can read posts across all channels (this can be "everyone" of course too)

Channel

A channel is a collection of posts. A channel is named and belongs to a handle or an organization. Channels may have a set of handles that are allowed to read and/or write or they may be public. This provides a representation of handle groups because posts can be directed towards entire channels.

A channel is accessed at /ORG_OR_HANDLE_NAME/CHANNEL_NAME.

Possible attributes:

  • Owner - handle or organization owner
  • Name - URL-safe name
  • Friendly name
  • Posts - all posts
  • Admin handles - collection of admin handles for this channel in addition to the ones for the owning organization or owning handle (can read, write, create, delete, and update everything within this channel)
  • Writer handles - collection of handles in addition to the inherited writers of the owner that can create and read posts in this channel (this can be "everyone" of course too)
  • Reader handles - collection of handles in addition to the writers that can read posts in this channel (this can be "everyone" of course too)
  • Unread post and message references/counts - per-handle unread post and message references/counts

Channel Group

Channel groups are defined by individual handles as a way of organizing channel subscriptions. A channel group can have channels or other channel groups as children. This essentially makes a tree like structure of subscribed channels. Organizing channels into hierarchical groups like this allows handles to group things like post feeds and unread message counts.

Possible attributes:

  • Handle - the handle this group is for
  • Parent - if not root, the parent channel group
  • Friendly name
  • Children - all child channels and channel groups
  • Unread post and message references - collection of all child channel unread post and message references/counts no matter how deep

Post

Posts are top-level channel submissions that have a title and content or a link. Posts are sent to a single channel. Posts may be directed to a certain set of handles in the channel or directed to everyone in the channel. Currently directing posts to organizations is not supported, but of course channels can be created as each representation of a handle group is needed. Remember, posts are not "sent" to a handle, but rather are sent to a channel and are directed to handles. This means that if a handle is not subscribed to a channel (or otherwise looking at it), he will not notice the post.

Even if a handle is allowed to read the channel, if a post is not directed to him he will not be allowed to see it. This means people should try to always post to everyone in the channel unless there is a specific reason to keep the post (and its messages within) private.

Posts are accessed at /ORG_OR_HANDLE_NAME/CHANNEL_NAME/POST_SLUG.

Posts can easily be things like blog posts, forum posts, and simple web links (all with or without discussion called "messages"). Since hierarchical messages can be disabled and latest-first viewing can be defaulted on the channel or post, posts can also represent simple chats (or complex chats if leaving the "hierarchical"-ness of the messages enabled).

Possible attributes:

  • Channel - the channel owner of this post
  • Name - URL-safe slugified title
  • Title
  • Link - optional web link for this post, mutually exclusive with Content
  • Content - optional content of the post, mutually exclusive with Link
  • Messages - all messages of this post
  • Creator - handle or organization that created this (or is created on behalf of)
  • Writer handles - collection of handles in addition to the inherited writers of the owner that can create and read messages in this post (this can be "everyone" in the channel of course too)
  • Reader handles - collection of handles in addition to the writers that can read messages in this posts (this can be "everyone" in the channel of course too)
  • Unread - per-handle boolean on whether the post itself has been read
  • Unread message references/count - per-handle unread messages in this post

Message

Messages are attached to posts. They can be heirarchical in nature if the post's settings allow this. Unlike posts, they cannot be directed to certain handles.

Possible attributes:

  • Post - the post owner for this message
  • Parent - parent message if not top level
  • Author - handle that wrote this or the organization it is written on behalf of
  • Subject - optional (if subject is supported/required)
  • Content - content of the message
  • Children - all child messages
  • Unread - per-handle boolean on whether this message has been read

Comments (1)