journaly
journaly copied to clipboard
👬🏻👭 Feature: User created groups
General discussion ticket to outline what user groups might look like and a high level design. Do not expect this to happen in the short-tem
Perceived Problem
There are a few opportunities we can capitalize with user groups:
- Multi-lingual bookclub is an ideal usecase for groups, allows users to spawn other bookclubs if they like
- Journaling can be somewhat private, limited access groups might make users more comfortable making some kinds of posts
- Great infra for the educational usecase (e.g. the "FooU Spanish 201 Fall 2022" group)
- Takes some of the burden off of topics, e.g. if someone wants to make a "<popular TV show> discussion" group that's perfectly reasonable, but we wouldn't really want that to be a general topic.
- Facilitates intra-user relationship formation better than the "shout into the void" style of a common feed (would be nice incorporate some messaging features, e.g. a discussion thread tied to the group, or private messages that broadcast between group members)
UX
Site grows a few more pages:
- Group pages, keyed by group ID, presents info about the group, recent posts made to the group, join CTA (if applicable) and edit controls for owners
- Group directory
- Maybe "Groups" entry in nav? Need to work out some kind of entrypoint
- Users get their group membership listed on their profile
- New/edit post page allows the user to select what groups (including the "general" or "public" option) a post will belong to
General DB Design
Groups:
field | type | description |
---|---|---|
public | boolean | Can the content of the group be read by non-members |
joinPolicy | enum | How do users join? Options are "anyone can join any time", "owner approves", and "owner invites" |
description | string | Blurb describing the group |
Groups are in an M2M with users modeling membership:
field | type | description |
---|---|---|
user | User | User that the M2M applies to |
group | Group | Group that the M2M applies to |
role | enum | One of "owner", "member", and "blocked" (blocked meaning user is not a member of the group and can not re-join |
Posts also enter into an M2M with groups:
field | type | description |
---|---|---|
post | Post | Post that the M2M applies to |
group | Group | Group that the M2M applies to |
Posts also get a new "general" or "public" field indicating if they should be presented in the general feed or are limited to the groups they belong to
Love this! We had a few requests even as early as the Alpha for the ability to share posts privately, and I also agree that the multilingual book club really highlighted not only a good use case for groups but also just how much enthusiasm exists in the community for this type of thing. High-level design looks good too!