Populous is the codename for a social media application designed to aggregate news and notifications. Populous provides a god's eye view of news, discussions, and events.
A few core principles:
- Focus on quick top-level views of notifications. Should not have to dive to see what's new, but must be able to scale to lots of notifications.
- Focus on explicit programming/configuration rather than fuzzy ML algorithms. At the same time, options need to be robust enough to handle whatever preferences the user has.
- People/publishers are first-class citizens. Should be able to filter, @reference, etc.
- Aggregate reply UI. E.g., if there is a notification of a comment on a post, user should be able to reply to comment from inside Populous, and reply is posted back to original site (requires driverized architecture).
- Scale from real-time to async. I.e., should be able to chat with others.
In the morning I open up Populous and see a feed of entries. The feed is organized into time periods in reverse chronological other. Recent time periods are 24 hours long. Older time periods are larger, up to 1 year long.
Pinned entries are always first, before any time period.
Within each time period, we sort important entries first, followed by normal entries. Entries are heterogeneous and have actions associated with them.
In general, entries represent an underlying object, such as a person, a post, a news story, etc. (as opposed to representing a notification). This is important when an object triggers multiple notifications, such as when comments appear. Rather than keeping each notification separate, we make sure the entire thread comes along (though we might only show the latest comment).
There are several actions on an entry:
- Remove: You can remove an entry from the feed; you get a menu to help refine notification preferences, which turn into rules that can later be edited.
- Mark Important/Mark Unimportant
- Pin: Pinning an entry keeps it at the top until the user unpins it (or perhaps until they take some action, such as reply).
- Archive: Saves the entry in the archive. The user gets a chance to tag it.
- Reply: Depending on the entry, you can post a reply.
Archived entries are at the bottom (or perhaps a separate page).
We should experiment with a reputation system to allow people to associate with whom they want without fear of trolls, etc. Some ideas:
The reputation of a user is always relative to a given user. For example, user A's reputation with user B can be different for user C.
When in a social space, we compute the reputation of all other users with respect to you. The reputation can be one of the following:
- Trusted: If you trust a user, then you see their dialog. Anyone they trust is heard, and anyone the shun is also shunned for you.
- Heard: If you hear a user, then you see their dialog.
- Muted: If a user is muted then you can see their presence, but cannot see their dialog.
- Shunned: If a user is shunned you cannot see their presence or their dialog.
Entering the network is invite-only. When user A invites user B, user A marks user B as heard, and user B marks user A as trusted. Either user can change this at any time.
In a chat session, for example, muted users are visible, but their chats are blanked out (though you can see that they're saying something). You can select a user and "hear" them to have their chats be visible.
- A topic in Populous is a first-class object used as a unit of organization. Global topics are public to all and curated by a user or entity. For example, the "Transcendence (game)" topic is owned by Kronosaur Productions (companies/entities can claim a topic).
- Local topics are owned by a specific user and can be public or private. They always have the username as a prefix, which allows multiple users to have the same topic.
- A topic (both global and local) can define 1 or more sub-topics. Each sub-topic is defined by the rules used to fill its feed.