I work remotely 98% of the time. Most of the communications, materials, and products are transported over email. It’s pretty easy and handy, but fragile. It’s the Internet equivalent of passing notes with paper airplanes. I’ve looked into a lot of alternatives (corporate wiki/blog or online groups come about the closest), but none of them seem quite sufficient. So I’m thinking of building something myself. Following is an informal first stab at a list of my requirements. Maybe someone can guide me to something that already exists?
- Conversation-oriented. Automatic threading of conversations.
- Privacy must be tunable. Whoever starts a conversation automatically becomes its moderator, and then invites participants. The author may then designate other moderators as well. Moderators may invite individual users or pre-defined groups of people, and grant them rights to the conversation. Rights include (at minimum) the ability to read a conversation, the ability to respond, the ability to add tags, and the ability to moderate. Two special groups receive no notifications but can be granted rights: “All registered users” and “Anonymous users”. The latter group may only be granted “read” privileges. Default privileges for new conversations must be user-configurable.
- Only registered users may start a conversation or define a group. The registration process has to be just painful enough to prevent automated registration.
- Moderators may ban users from a conversation, or any future conversations they moderate. Registered users may “Mark as spam” or “Flag inappropriate” to provide input to the moderator and the site host. Moderators may establish automated rules for expulsion from conversations based on that input (including the rights granted to the users who provided it), and site hosts may establish automated rules for deletion of accounts (with tunable warnings in both cases).
- A node in a conversation may be linked to other conversations by moderators or users with “respond” access – each link will only be visible to a user if they have read rights to the other conversation.
- Moderators may select portions of an existing conversation to designate as a separate conversation, optionally linked from the original. New moderator(s) may then be designated for the new conversation, and rights and membership may be independently assigned. Moderators may relinquish their moderator status, if at least one other moderator exists for the conversation.
- Moderators may delete conversations, remove participants, or remove/edit individual responses.
- A user may be a member of any number of groups, at the discretion of the group’s moderator and the consent of the user. A user may request to be added to a group (if the moderator makes it visible to them), or the moderator may invite the user. Groups have the following rights: users/groups who can see that the group exists, users/groups who can see the list of the group’s members, users/groups who are members of the group, and users/groups who can moderate the group. Any registered user may create a new group, and they become its moderator by default. The fact that a group is a member of another group will only be visible to users who have visibility rights to both groups. Moderators may rename or delete groups, or delete members from a group. Any user may copy any group to which they have full visibility (becoming the new group’s moderator), but any users who do not accept the invitation to the new group will not be included.
- Users may elect to receive group/conversation invitations from anyone, only specific users/groups, or nobody. Users may elect to auto-accept invitations in the same manner. Any invitation that is excluded from being received is automatically rejected.
- Users may elect to receive notifications of responses to each conversation in which they are participants, with a tunable user-defined default. Some rules for determining the default might include the conversation’s author, moderator(s), groups, tags and individual respondents.
- Users may configure visibility of each piece of information in their personal profile for groups or individual users.
- Must be able to attach any file type to a message. HTML or plain text formatting for content. (Perhaps stick with MIME here). Provide hook for server to scan for malware and remove. Attached images and videos can optionally be retrieved in situ as part of the message. Any file type can be downloaded via a URL provided.
- Implement a RESTful API for client/server interaction (over a secure connection). This allows users to access via either a shared web site or a desktop client.
- Each conversation and each response must have a unique permanent URL, both for the API and for the web client. This allows easy linkage from outside. Naturally, if the data isn’t readable anonymously and the incoming user is not logged in then the API will respond accordingly, and the web client will prompt for a login. If a logged-in user does not have rights to view the content, then an appropriate response will be returned instead.
- Open-source, with the expectation that multiple conversation servers could spring up. Anticipate interaction between multiple servers: for instance, provide the ability for user profiles and group memberships to be shared between servers.
Wow, this is growing more complex the longer I think about it. But I want to have a way to converse online that’s reliable, as private as I want it to be, and defeats spam. If I could get everything I’m asking for here, it sounds like it could replace much of the use for email, chat, Twitter, Facebook, and even blogging. Do I have delusions of grandeur? What are your thoughts?