From 40b3cbba13d3191a30432c0b13f0d258b4bb96ee Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Mon, 10 Jan 2022 23:13:09 +0100
Subject: [PATCH 01/25] Create MSCZZZZ-matrix-for-the-social-media-use-case.md
---
...ZZ-matrix-for-the-social-media-use-case.md | 419 ++++++++++++++++++
1 file changed, 419 insertions(+)
create mode 100644 proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
new file mode 100644
index 000000000..ec857de62
--- /dev/null
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -0,0 +1,419 @@
+# MSCZZZZ: Matrix for the social media use case
+
+Matrix is currently mainly used for chats, however, recent projects
+have shown that it is possible to use it for social media.
+
+This proposal is to formally specify this usage and ensure
+a compatibility between the different projects.
+
+While writing this specification, the following principles should
+be respected:
+
+* **simplicity in mind:** the solution should be the simplest one
+
+* **not confusing:** The end user shouldn't know the theoretical usage
+of the room. i.e. A user which isn't using the social media app
+shouldn't be able to 'spam' the main room.
+
+* re-use as much as possible the matrix specifications.
+
+We will restrict ourselves to the creation of the specific rooms.
+The discovery of the user rooms using profile as room is the topic of
+[another MSC](https://nextcloud.carnot.cc/index.php/s/EHQKzJi78oX7GPE).
+
+## The idea
+
+While Matrix could be used for almost anything, we will
+restrict ourselves on the following use cases.
+
+* **'Reqular'** social media (Twitter style, Facebook : Circles, MinesTRIX)
+* **'Art'** social media (Matrix Art)
+
+## The proposal
+
+
+To cover those use case, we will separate our proposal in two part.
+
+* the room types: The container which will store the events
+* special events types: dedicated to the social media use cased
+which will be filtered depending on the client type/UI.
+(displaying a feed or a grid of pictures...).
+
+It is up to the client to filter the room event's and display only
+the one which are relevant on the client goal.
+
+### Room
+
+We propose three room types.
+
+* m.social.feed
+* m.social.group
+* m.social.event
+
+Those three rooms will act as a container for events of different
+types, which will be displayed only on a specific client.
+
+The type is used to set the general purpose of the room.
+
+#### Social media : 'Regular' or 'feed'
+
+```
+m.social.feed
+```
+
+**Usage:**
+
+Used by a user to share content with his friends or the world.
+
+* Owned by a single user
+* Writing in this room could be owner only or any member. Up to the user.
+* Room visibility : public / private. Up to the user.
+* A user could have multiple of them
+
+**UI considerations :**
+
+* Should make clear that this room is owned by a specific user.
+* UI type is up to the client (feed, pictures waterfall ...)
+
+#### Social media : Groups
+
+```
+m.social.group
+```
+
+**Usage:**
+
+* For group discussion
+
+Group is just a regular profile room `m.social.feed` but with a
+slightly different UI as there is no single owner of the room.
+
+#### Social media : Events (TODO)
+
+This type is only an idea yet and should be defined more clearly.
+
+May be the topic of another MSC.
+
+```
+m.social.event
+```
+
+This room type could be reserved for the event use case. i.e. for a
+single event, invite people and let each user say if he will be present.
+
+Idea:
+
+What should be defined for the event
+* name : [regular event] : room name
+* main picture : [regular event] : room avatar
+* topic : [regular event] : room topic
+* event location
+* event time start
+* event time end
+* add a way to say if we will come (maybe use regular polls)
+
+regular events : the actual event is already defined in matrix,
+no need to reimplement.
+
+### Room content
+
+Require
+
+* [MSC1767 - Extensible event types & fallback in Matrix (v2)](https://github.com/matrix-org/matrix-doc/pull/1767)
+
+We propose two events type to categorize the content of the event.
+
+**Why ?**
+
+As the room is displayed alongside the user' regular chats rooms we need
+to make it clear to the user that it's a specific room.
+Thus we need to avoid that a user end up "spamming" his room thinking
+the room is a regular chat room.
+
+The solution is to separate the regular messaging from the social
+media posts. Thus, defining special events different from the regular
+messaging events.
+
+It will still be possible to send room message. But those should not
+be displayed on the user wall / in the group.
+
+**Types:**
+
+* m.social.post
+* m.social.pictures
+
+
+**WARNING: ** Regular chat messages should be displayed on the user wall / in the group.
+
+**Why defining a specific m.social.pictures event ?**
+
+When sending events, we want to be sure that the other users will be
+be able to see our posts. Thus it might be problematic with image
+only social media if we send a post with only text and then want to
+display it in a images only social media or is not able to render
+a fraction of the post (like a post with text, video, image).
+This becomes problematic when the user start making reference
+to previously sended post.
+
+Defining separate types help making sure the app displaying them
+is able to support all the content of this specific event type.
+
+#### Base event
+
+The structure of the event should just be extensible events.
+
+#### Social: Post
+```
+m.social.post
+```
+
+A type for general content.
+
+Could be text, pictures, video ...
+
+**TODO:**
+
+Define what base events the clients supporting those event
+should be able to display.
+
+like:
+
+* m.text
+* m.image
+* m.video
+* m.file
+
+**Example:**
+```json
+{
+ "type": "m.social.post",
+ "content": {
+ "msgtype": "m.text",
+ "body": "The awesome story
A long time ago in a galaxy far, far away...
Read full post",
+ "m.social.post": [
+ {
+ "msgtype": "m.text",
+ "body": "The first part of full text of story, located before image.",
+ },
+ {
+ "msgtype": "m.image",
+ "url": "mxc://example.com/KUAQOesGECkQTgdtedkftISg",
+ "body": "Image 1.jpg",
+ "info": {
+ "mimetype": "image/jpg",
+ "size": 1153501,
+ "w": 963,
+ "h": 734,
+ }
+ },
+ {
+ "msgtype": "m.text",
+ "body": "The ending text of full story after image.",
+ }
+ ]
+ }
+}
+```
+
+#### Social: Image
+
+Base : [MSC3552 - Extensible Events - Images and Stickers](https://github.com/matrix-org/matrix-doc/blob/travis/msc/extev/images/proposals/3552-extensible-events-images.md)
+
+```
+m.social.image
+```
+
+Events adapted to client like Matrix Art to build pictures only
+social media.
+
+UI could be a grid or a list view of pictures.
+
+**Required content:**
+
+The list of arguments that should be part of event["content"]
+
+// TODO
+
+like :
+
+* m.image
+
+**Example:**
+
+```json
+{
+ "type": "m.social.image",
+ "content": {
+ "m.caption": [
+ {
+ "m.text": "Tramline in Berlin"
+ },
+ {
+ "body": "Tramline in Berlin",
+ "mimetype": "text/html"
+ }
+ ],
+ "m.file": {
+ "mimetype": "image/jpeg",
+ "name": "_MG_0641.jpg",
+ "size": 10158773,
+ "url": "mxc://"
+ },
+ "m.image": {
+ "height": 3456,
+ "width": 5184
+ },
+ "m.text": "Tramline Berlin",
+ "m.thumbnail": [
+ {
+ "height": 533,
+ "mimetype": "image/jpeg",
+ "size": 215496,
+ "url": "mxc://nordgedanken.dev/",
+ "width": 800
+ }
+ ],
+ },
+}
+```
+
+#### Linking posts/pictures to the regular chat
+
+One may want to advertise the room that he posted a specific content
+(only visible in a social media client) that may be of interest to user
+and provide a link to it).
+
+A [solution adapted from the one proposed by @MurzNN](https://github.com/matrix-org/matrix-doc/pull/1767#issuecomment-787431678)
+is to define event like this one
+
+```json
+{
+ "type": "m.room.message", // will be m.text in the future. According to extensible events
+ "content": {
+ "msgtype": "m.text",
+ "body": "The awesome story
A long time ago in a galaxy far, far away...
Read full post",
+ "m.social.post": [
+ {
+ "msgtype": "m.text",
+ "body": "The first part of full text of story, located before image.",
+ },
+ {
+ "msgtype": "m.image",
+ "url": "mxc://example.com/KUAQOesGECkQTgdtedkftISg",
+ "body": "Image 1.jpg",
+ "info": {
+ "mimetype": "image/jpg",
+ "size": 1153501,
+ "w": 963,
+ "h": 734,
+ }
+ },
+ {
+ "msgtype": "m.text",
+ "body": "The ending text of full story after image.",
+ }
+ ]
+ }
+}
+```
+
+On regular chat client like element, it should render as a simple link.
+
+Another solution is to just send two events, one m.post.post or m.social.image
+and a summary in the form of a room message.
+
+##### Todo
+
+Some client may not be web pages, thus a `href=""` may not make sense.
+A text fall back, `Open in xxx to see the whole post` could make sense.
+
+#### Idea
+
+We could add a `tags` entry in the event content. The content of those
+tags could be 'hashtags'.
+
+This will be useful for art social media. But we could also see an
+implementation in regular social media.
+
+
+### Reactions
+
+* Emoji reaction will use the regular event.
+* However, post comment will be threads.
+
+For rooms where only the user can write, it could be interesting to
+allow other users to have a comment only permission.
+See [MSC3394 - new auth rule that only allows someone to post a message in relation to another message](https://github.com/frandavid100/matrix-doc/blob/threaded-replies/proposals/3394-new-auth-rule-that-only-allows-someone-to-post-a-message-in-relation-to-another-message.md)
+for such a proposal.
+
+
+## Aternative
+
+There has been some discussion about whether we should restrict the
+room to a specific type of content (i.e. the type of the room define
+the UI and how the content should be treated). Here is some consideration about the alternative proposal.
+
+## Advantage of this approach (the main one)
+
+* flexibility
+
+If one day we use another client which could display video only
+feed, then we could reuse this room and start posting other events
+type to this room.
+
+It will help as we have all our followers in the same room.
+
+### Disadvantages of this approach
+
+
+#### Complexity / room size
+
+This approach comes with a higher complexity.
+
+* filter algorithm more complex because we need to take into account
+the multiple events type.
+* higher room size (the ratio event displayed / event in the room will
+be higher). May lead to slower client.
+
+We need to take into account that there might be content which just
+can't be displayed by the social media app that we are using.
+
+The app should warn the user about this.
+
+#### Moderation
+
+* if we let the user post content in a room it may be more complex
+to moderate the room as the user could write event using an event
+type that we don't use. Means longer time before removing those events.
+
+### Alternative proposal
+
+Instead of filtering the room events according to their types,
+we could filter the room directly according to his type.
+Thus defining how the room UI.
+
+We could define
+
+* m.social.feed : for regular social media
+* m.social.image : for image social media
+
+This solution solve the main disadvantages of the previous solution
+but lacks the flexiblity.
+
+## Privacy
+
+The permissions of the rooms should be easily editable by the user.
+
+Special attention should be accorded to those events,
+
+```
+m.room.join_rules
+m.room.encryption
+m.room.power_levels
+```
+
+* It must be clear to the user if the actual room is private or not.
+* It must be clear to the user if the actual room is end-to-end encrypted.
+* The user should be able to restrict the users able to write in his room.
+
+* The user should be that all the followers can see each others.
From 3c52997b0d4f8c378644cdf3fb1fa8c5e457936a Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Mon, 10 Jan 2022 23:15:50 +0100
Subject: [PATCH 02/25] fix: romoved extra space
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index ec857de62..f5d743e9e 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -143,7 +143,7 @@ be displayed on the user wall / in the group.
* m.social.pictures
-**WARNING: ** Regular chat messages should be displayed on the user wall / in the group.
+**WARNING:** Regular chat messages should be displayed on the user wall / in the group.
**Why defining a specific m.social.pictures event ?**
From f0cbeabc46d97fb28e360928d0f0968222a2b041 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Tue, 11 Jan 2022 23:14:35 +0100
Subject: [PATCH 03/25] fix: update to prevent regular m.social.image to be
displayed in regular chat
---
...ZZ-matrix-for-the-social-media-use-case.md | 22 +++++++++++--------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index f5d743e9e..00bffc9f5 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -158,6 +158,8 @@ to previously sended post.
Defining separate types help making sure the app displaying them
is able to support all the content of this specific event type.
+See the later point for regular room message fallback.
+
#### Base event
The structure of the event should just be extensible events.
@@ -244,6 +246,7 @@ like :
{
"type": "m.social.image",
"content": {
+ "m.social.image": [
"m.caption": [
{
"m.text": "Tramline in Berlin"
@@ -260,19 +263,20 @@ like :
"url": "mxc://"
},
"m.image": {
- "height": 3456,
- "width": 5184
+ "height": 3456,
+ "width": 5184
},
"m.text": "Tramline Berlin",
"m.thumbnail": [
- {
- "height": 533,
- "mimetype": "image/jpeg",
- "size": 215496,
- "url": "mxc://nordgedanken.dev/",
- "width": 800
- }
+ {
+ "height": 533,
+ "mimetype": "image/jpeg",
+ "size": 215496,
+ "url": "mxc://nordgedanken.dev/",
+ "width": 800
+ }
],
+ ]
},
}
```
From 4b3136aa8a11d5412932d0ecc2ed5b89f7304073 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Tue, 11 Jan 2022 23:20:54 +0100
Subject: [PATCH 04/25] fix: added consideration about the time it take to join
'big' rooms
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 00bffc9f5..ac6ab8268 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -384,6 +384,12 @@ can't be displayed by the social media app that we are using.
The app should warn the user about this.
+// TODO : See how the room size impact the time to join.
+The discussion may need to take into account the time it takes to join one large room
+with many states vs many small ones. (Is it preferable to have many small rooms
+that are auto joined or one big room with multiple 'feeds' (different event types)
+in it.)
+
#### Moderation
* if we let the user post content in a room it may be more complex
From eda0e44655bed18e83e0b63742c06b9884f9ebe9 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Tue, 11 Jan 2022 23:36:38 +0100
Subject: [PATCH 05/25] random thought on E2EE rooms
---
.../MSCZZZZ-matrix-for-the-social-media-use-case.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index ac6ab8268..55d06e096 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -70,6 +70,15 @@ Used by a user to share content with his friends or the world.
* Room visibility : public / private. Up to the user.
* A user could have multiple of them
+Small note about encryption:
+
+Clients should notify the user that encryption shouldn't be enabled on 'big room'. (1)
+On a side note, end-to-end encrypted rooms with a very large number of 'followers'
+don't make a lot of change.
+
+TODO (1) : Define what large room means and what is the recommanded maximum number of
+participants in a E2EE room.
+
**UI considerations :**
* Should make clear that this room is owned by a specific user.
From 5b0240fe927a10c6f06ea75e1d5f19cac0d95ec5 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Tue, 11 Jan 2022 23:38:37 +0100
Subject: [PATCH 06/25] fix: typo
---
...ZZ-matrix-for-the-social-media-use-case.md | 30 +++++++++----------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 55d06e096..7eb8cfb01 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -9,9 +9,9 @@ a compatibility between the different projects.
While writing this specification, the following principles should
be respected:
-* **simplicity in mind:** the solution should be the simplest one
+* **Simplicity in mind:** the solution should be the simplest one
-* **not confusing:** The end user shouldn't know the theoretical usage
+* **Not confusing:** The end user shouldn't know the theoretical usage
of the room. i.e. A user which isn't using the social media app
shouldn't be able to 'spam' the main room.
@@ -26,7 +26,7 @@ The discovery of the user rooms using profile as room is the topic of
While Matrix could be used for almost anything, we will
restrict ourselves on the following use cases.
-* **'Reqular'** social media (Twitter style, Facebook : Circles, MinesTRIX)
+* **'Regular'** social media (Twitter style, Facebook : Circles, MinesTRIX)
* **'Art'** social media (Matrix Art)
## The proposal
@@ -76,7 +76,7 @@ Clients should notify the user that encryption shouldn't be enabled on 'big room
On a side note, end-to-end encrypted rooms with a very large number of 'followers'
don't make a lot of change.
-TODO (1) : Define what large room means and what is the recommanded maximum number of
+TODO (1) : Define what large room means and what is the recommended maximum number of
participants in a E2EE room.
**UI considerations :**
@@ -101,7 +101,7 @@ slightly different UI as there is no single owner of the room.
This type is only an idea yet and should be defined more clearly.
-May be the topic of another MSC.
+Maybe the topic of another MSC.
```
m.social.event
@@ -121,7 +121,7 @@ What should be defined for the event
* event time end
* add a way to say if we will come (maybe use regular polls)
-regular events : the actual event is already defined in matrix,
+Regular events : the actual event is already defined in matrix,
no need to reimplement.
### Room content
@@ -157,14 +157,14 @@ be displayed on the user wall / in the group.
**Why defining a specific m.social.pictures event ?**
When sending events, we want to be sure that the other users will be
-be able to see our posts. Thus it might be problematic with image
+be able to see our posts. Thus, it might be problematic with image
only social media if we send a post with only text and then want to
-display it in a images only social media or is not able to render
+display it in a image only social media or is not able to render
a fraction of the post (like a post with text, video, image).
This becomes problematic when the user start making reference
-to previously sended post.
+to previously sent post.
-Defining separate types help making sure the app displaying them
+Defining separate types helps make sure the app displaying them
is able to support all the content of this specific event type.
See the later point for regular room message fallback.
@@ -184,7 +184,7 @@ Could be text, pictures, video ...
**TODO:**
-Define what base events the clients supporting those event
+Define what base events the clients supporting those events
should be able to display.
like:
@@ -297,7 +297,7 @@ One may want to advertise the room that he posted a specific content
and provide a link to it).
A [solution adapted from the one proposed by @MurzNN](https://github.com/matrix-org/matrix-doc/pull/1767#issuecomment-787431678)
-is to define event like this one
+is to define events like this one
```json
{
@@ -330,7 +330,7 @@ is to define event like this one
}
```
-On regular chat client like element, it should render as a simple link.
+On a regular chat client like element, it should render as a simple link.
Another solution is to just send two events, one m.post.post or m.social.image
and a summary in the form of a room message.
@@ -360,7 +360,7 @@ See [MSC3394 - new auth rule that only allows someone to post a message in rela
for such a proposal.
-## Aternative
+## Alternative
There has been some discussion about whether we should restrict the
room to a specific type of content (i.e. the type of the room define
@@ -417,7 +417,7 @@ We could define
* m.social.image : for image social media
This solution solve the main disadvantages of the previous solution
-but lacks the flexiblity.
+but lacks the flexibility.
## Privacy
From c11d5ab8f93f661be8e72b78e2a39c54ba9c53e4 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 12 Jan 2022 21:25:18 +0100
Subject: [PATCH 07/25] =?UTF-8?q?feat:=C2=A0removed=20the=20event=20room?=
=?UTF-8?q?=20type.=20Topic=20of=20another=20MSC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...ZZ-matrix-for-the-social-media-use-case.md | 29 +------------------
1 file changed, 1 insertion(+), 28 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 7eb8cfb01..3e471b98c 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -48,9 +48,8 @@ We propose three room types.
* m.social.feed
* m.social.group
-* m.social.event
-Those three rooms will act as a container for events of different
+Those two rooms will act as a container for events of different
types, which will be displayed only on a specific client.
The type is used to set the general purpose of the room.
@@ -97,32 +96,6 @@ m.social.group
Group is just a regular profile room `m.social.feed` but with a
slightly different UI as there is no single owner of the room.
-#### Social media : Events (TODO)
-
-This type is only an idea yet and should be defined more clearly.
-
-Maybe the topic of another MSC.
-
-```
-m.social.event
-```
-
-This room type could be reserved for the event use case. i.e. for a
-single event, invite people and let each user say if he will be present.
-
-Idea:
-
-What should be defined for the event
-* name : [regular event] : room name
-* main picture : [regular event] : room avatar
-* topic : [regular event] : room topic
-* event location
-* event time start
-* event time end
-* add a way to say if we will come (maybe use regular polls)
-
-Regular events : the actual event is already defined in matrix,
-no need to reimplement.
### Room content
From f5455be9749da8567a7f6901f64e9079a0637e96 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 12 Jan 2022 21:50:11 +0100
Subject: [PATCH 08/25] fix: better explain tagging and some minor changes
---
...ZZ-matrix-for-the-social-media-use-case.md | 38 ++++++++++++-------
1 file changed, 25 insertions(+), 13 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 3e471b98c..460684eeb 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -137,8 +137,9 @@ a fraction of the post (like a post with text, video, image).
This becomes problematic when the user start making reference
to previously sent post.
-Defining separate types helps make sure the app displaying them
-is able to support all the content of this specific event type.
+**=> We define separate types to make sure the app displaying them
+is able to support all the content of this specific event type and
+make sure image only and regular feeds don't mix.**
See the later point for regular room message fallback.
@@ -267,7 +268,9 @@ like :
One may want to advertise the room that he posted a specific content
(only visible in a social media client) that may be of interest to user
-and provide a link to it).
+and provide a link to it.
+
+This should be up to the user. The client could display a 'advertise in the chat room' button.
A [solution adapted from the one proposed by @MurzNN](https://github.com/matrix-org/matrix-doc/pull/1767#issuecomment-787431678)
is to define events like this one
@@ -277,7 +280,8 @@ is to define events like this one
"type": "m.room.message", // will be m.text in the future. According to extensible events
"content": {
"msgtype": "m.text",
- "body": "The awesome story
A long time ago in a galaxy far, far away...
Read full post",
+ "body": "The awesome story
A long time ago in a galaxy far, far away...
+
Read the full post in your favorite social matrix client",
"m.social.post": [
{
"msgtype": "m.text",
@@ -313,15 +317,6 @@ and a summary in the form of a room message.
Some client may not be web pages, thus a `href=""` may not make sense.
A text fall back, `Open in xxx to see the whole post` could make sense.
-#### Idea
-
-We could add a `tags` entry in the event content. The content of those
-tags could be 'hashtags'.
-
-This will be useful for art social media. But we could also see an
-implementation in regular social media.
-
-
### Reactions
* Emoji reaction will use the regular event.
@@ -332,6 +327,23 @@ allow other users to have a comment only permission.
See [MSC3394 - new auth rule that only allows someone to post a message in relation to another message](https://github.com/frandavid100/matrix-doc/blob/threaded-replies/proposals/3394-new-auth-rule-that-only-allows-someone-to-post-a-message-in-relation-to-another-message.md)
for such a proposal.
+### Tagging
+
+We could add a `tags` entry in the event content. The content of those
+tags could be 'hashtags'.
+
+This will be useful for art social media. But we could also see an
+implementation in regular social media like to tag other person.
+
+```json
+{
+ "m.social.post": [/* the post content */],
+ "m.social.tag": [
+ "@mxid",
+ "my chair"
+ ]
+}
+```
## Alternative
From e875122e873d9bc99358161524294ed08b9e07a7 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 12 Jan 2022 21:53:36 +0100
Subject: [PATCH 09/25] =?UTF-8?q?feat:=C2=A0explain=20array=20purpose?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 460684eeb..45e40a443 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -200,6 +200,9 @@ like:
}
```
+Using an array for `m.social.post` will help define the order in which
+content should be displayed.
+
#### Social: Image
Base : [MSC3552 - Extensible Events - Images and Stickers](https://github.com/matrix-org/matrix-doc/blob/travis/msc/extev/images/proposals/3552-extensible-events-images.md)
From 2b6021906ff0f51c3d670716fd725002eb39b086 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 12 Jan 2022 21:59:31 +0100
Subject: [PATCH 10/25] fix: removed unecessary paragraphs
---
...CZZZZ-matrix-for-the-social-media-use-case.md | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 45e40a443..eafe6637b 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -6,25 +6,13 @@ have shown that it is possible to use it for social media.
This proposal is to formally specify this usage and ensure
a compatibility between the different projects.
-While writing this specification, the following principles should
-be respected:
-
-* **Simplicity in mind:** the solution should be the simplest one
-
-* **Not confusing:** The end user shouldn't know the theoretical usage
-of the room. i.e. A user which isn't using the social media app
-shouldn't be able to 'spam' the main room.
-
-* re-use as much as possible the matrix specifications.
-
We will restrict ourselves to the creation of the specific rooms.
-The discovery of the user rooms using profile as room is the topic of
+The discovery of other user rooms using profile as room is the topic of
[another MSC](https://nextcloud.carnot.cc/index.php/s/EHQKzJi78oX7GPE).
## The idea
-While Matrix could be used for almost anything, we will
-restrict ourselves on the following use cases.
+This MSC tries to cover those following social media cases:
* **'Regular'** social media (Twitter style, Facebook : Circles, MinesTRIX)
* **'Art'** social media (Matrix Art)
From d3684fa8811333c99cd594107843cc58c0bd97c8 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 12 Jan 2022 22:00:10 +0100
Subject: [PATCH 11/25] fix: typo
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index eafe6637b..3fec137e3 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -97,7 +97,7 @@ We propose two events type to categorize the content of the event.
As the room is displayed alongside the user' regular chats rooms we need
to make it clear to the user that it's a specific room.
-Thus we need to avoid that a user end up "spamming" his room thinking
+Thus, we need to avoid that a user end up "spamming" his room thinking
the room is a regular chat room.
The solution is to separate the regular messaging from the social
@@ -117,7 +117,7 @@ be displayed on the user wall / in the group.
**Why defining a specific m.social.pictures event ?**
-When sending events, we want to be sure that the other users will be
+When sending events, we want to be sure that the other users will
be able to see our posts. Thus, it might be problematic with image
only social media if we send a post with only text and then want to
display it in a image only social media or is not able to render
@@ -125,9 +125,9 @@ a fraction of the post (like a post with text, video, image).
This becomes problematic when the user start making reference
to previously sent post.
-**=> We define separate types to make sure the app displaying them
+> We define separate types to make sure the app displaying them
is able to support all the content of this specific event type and
-make sure image only and regular feeds don't mix.**
+make sure image only and regular feeds don't mix.
See the later point for regular room message fallback.
From dd8ef930c002c8f55a65845e043b0498ba755f98 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 12 Jan 2022 22:01:46 +0100
Subject: [PATCH 12/25] fix: removed unecessary text
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 3fec137e3..93f7735e3 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -6,10 +6,6 @@ have shown that it is possible to use it for social media.
This proposal is to formally specify this usage and ensure
a compatibility between the different projects.
-We will restrict ourselves to the creation of the specific rooms.
-The discovery of other user rooms using profile as room is the topic of
-[another MSC](https://nextcloud.carnot.cc/index.php/s/EHQKzJi78oX7GPE).
-
## The idea
This MSC tries to cover those following social media cases:
From 1334612655ed868d6770ed7a8d8b41d5e56c01c4 Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Wed, 12 Jan 2022 22:17:49 +0100
Subject: [PATCH 13/25] fix: redundant sentence
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 93f7735e3..34422fa32 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -28,7 +28,7 @@ the one which are relevant on the client goal.
### Room
-We propose three room types.
+We propose two room types.
* m.social.feed
* m.social.group
@@ -108,9 +108,6 @@ be displayed on the user wall / in the group.
* m.social.post
* m.social.pictures
-
-**WARNING:** Regular chat messages should be displayed on the user wall / in the group.
-
**Why defining a specific m.social.pictures event ?**
When sending events, we want to be sure that the other users will
From 20523799897141980f36ca02ad17a421ebd3f82d Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Wed, 12 Jan 2022 22:43:41 +0100
Subject: [PATCH 14/25] feat: added unstable prefxi
---
...MSCZZZZ-matrix-for-the-social-media-use-case.md | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 34422fa32..94ffa09dc 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -405,3 +405,17 @@ m.room.power_levels
* The user should be able to restrict the users able to write in his room.
* The user should be that all the followers can see each others.
+
+
+## Unstable prefix
+
+The following mapping will be used for identifiers in this MSC during development:
+
+
+Proposed final identifier | Purpose | Development identifier
+------------------------------- | ------- | ----
+`m.social.feed` | 'wall' room | `org.matrix.mscZZZZ.social.feed`
+`m.social.group` | group room | `org.matrix.mscZZZZ.social.group`
+`m.social.post` | post event | `org.matrix.mscZZZZ.social.post`
+`m.social.image` | image event | `org.matrix.mscZZZZ.social.image`
+`m.social.tags` | tags property of `m.social.post` or `m.social.image` event | `org.matrix.mscZZZZ.social.tag`
From a7646236f9be423dd7c37dba028f080119bfa2a2 Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Wed, 12 Jan 2022 22:45:14 +0100
Subject: [PATCH 15/25] =?UTF-8?q?fix:=C2=A0indent?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 94ffa09dc..66c886ec1 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -335,7 +335,7 @@ There has been some discussion about whether we should restrict the
room to a specific type of content (i.e. the type of the room define
the UI and how the content should be treated). Here is some consideration about the alternative proposal.
-## Advantage of this approach (the main one)
+### Advantage of this approach (the main one)
* flexibility
From 03d25aa7be6cafa0d6cda71b752d4b4819a1ab81 Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Wed, 12 Jan 2022 22:51:51 +0100
Subject: [PATCH 16/25] =?UTF-8?q?fix:=C2=A0typo?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
index 66c886ec1..e93060469 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
@@ -18,13 +18,13 @@ This MSC tries to cover those following social media cases:
To cover those use case, we will separate our proposal in two part.
-* the room types: The container which will store the events
+* the room types: the container which will store the events
* special events types: dedicated to the social media use cased
which will be filtered depending on the client type/UI.
(displaying a feed or a grid of pictures...).
It is up to the client to filter the room event's and display only
-the one which are relevant on the client goal.
+the one which are relevant on the client purpose.
### Room
From 033baf2d39c024ec825a20fa9e882863a37d233a Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Wed, 12 Jan 2022 23:00:36 +0100
Subject: [PATCH 17/25] =?UTF-8?q?fix:=C2=A0update=20according=20to=20MSC?=
=?UTF-8?q?=20number?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
... => 3639-matrix-for-the-social-media-use-case.md} | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
rename proposals/{MSCZZZZ-matrix-for-the-social-media-use-case.md => 3639-matrix-for-the-social-media-use-case.md} (97%)
diff --git a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
similarity index 97%
rename from proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
rename to proposals/3639-matrix-for-the-social-media-use-case.md
index e93060469..814018c49 100644
--- a/proposals/MSCZZZZ-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -1,4 +1,4 @@
-# MSCZZZZ: Matrix for the social media use case
+# MSC3639: Matrix for the social media use case
Matrix is currently mainly used for chats, however, recent projects
have shown that it is possible to use it for social media.
@@ -414,8 +414,8 @@ The following mapping will be used for identifiers in this MSC during developmen
Proposed final identifier | Purpose | Development identifier
------------------------------- | ------- | ----
-`m.social.feed` | 'wall' room | `org.matrix.mscZZZZ.social.feed`
-`m.social.group` | group room | `org.matrix.mscZZZZ.social.group`
-`m.social.post` | post event | `org.matrix.mscZZZZ.social.post`
-`m.social.image` | image event | `org.matrix.mscZZZZ.social.image`
-`m.social.tags` | tags property of `m.social.post` or `m.social.image` event | `org.matrix.mscZZZZ.social.tag`
+`m.social.feed` | 'wall' room | `org.matrix.msc3639.social.feed`
+`m.social.group` | group room | `org.matrix.msc3639.social.group`
+`m.social.post` | post event | `org.matrix.msc3639.social.post`
+`m.social.image` | image event | `org.matrix.msc3639.social.image`
+`m.social.tags` | tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag`
From 8c88156e69799544dc9884fdc65231118dafba16 Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Wed, 12 Jan 2022 23:27:30 +0100
Subject: [PATCH 18/25] fix: specify room type
---
proposals/3639-matrix-for-the-social-media-use-case.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index 814018c49..662a8291a 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -30,6 +30,8 @@ the one which are relevant on the client purpose.
We propose two room types.
+[Types according to MSC1772 - Matrix spaces](https://github.com/matrix-org/matrix-doc/pull/1772).
+
* m.social.feed
* m.social.group
From 5355b2b3af71c46fa39fb492b43008da81f7df4c Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 16 Feb 2022 16:34:02 +0100
Subject: [PATCH 19/25] fix: typo + changed user to profile
---
...39-matrix-for-the-social-media-use-case.md | 108 ++++++++++--------
1 file changed, 61 insertions(+), 47 deletions(-)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index 662a8291a..47d48edb6 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -4,7 +4,7 @@ Matrix is currently mainly used for chats, however, recent projects
have shown that it is possible to use it for social media.
This proposal is to formally specify this usage and ensure
-a compatibility between the different projects.
+a compatibility between the different social media projects.
## The idea
@@ -18,8 +18,8 @@ This MSC tries to cover those following social media cases:
To cover those use case, we will separate our proposal in two part.
-* the room types: the container which will store the events
-* special events types: dedicated to the social media use cased
+* **Room types**: the container which will store the events.
+* **Special events types**: dedicated to the social media use cased
which will be filtered depending on the client type/UI.
(displaying a feed or a grid of pictures...).
@@ -28,46 +28,59 @@ the one which are relevant on the client purpose.
### Room
-We propose two room types.
+Social media generally allow the user to have a profile where he can
+post content visible to all his followers. Others allow also creating
+groups which allow the same things without being owned by a specific
+user. This is the two functions that we want to add.
-[Types according to MSC1772 - Matrix spaces](https://github.com/matrix-org/matrix-doc/pull/1772).
+Therefore, we propose two room types. Types are defined according to
+[MSC1772 - Matrix spaces](https://github.com/matrix-org/matrix-doc/pull/1772).
-* m.social.feed
-* m.social.group
+* `m.social.profile`
+* `m.social.group`
Those two rooms will act as a container for events of different
-types, which will be displayed only on a specific client.
+types, which will be displayed only on a specific client. The type is used to set the general purpose of the room.
-The type is used to set the general purpose of the room.
-
-#### Social media : 'Regular' or 'feed'
+#### Social media : The user profile
```
-m.social.feed
+m.social.profile
```
**Usage:**
Used by a user to share content with his friends or the world.
-* Owned by a single user
-* Writing in this room could be owner only or any member. Up to the user.
+* Owned by a single user.
+* The user can choose who can write on his profile.
* Room visibility : public / private. Up to the user.
-* A user could have multiple of them
+* The user can have multiple profile (private / public ...)
-Small note about encryption:
+This MSC remains voluntarily open as user may want to configure the room as he wishes.
-Clients should notify the user that encryption shouldn't be enabled on 'big room'. (1)
-On a side note, end-to-end encrypted rooms with a very large number of 'followers'
-don't make a lot of change.
+*Small note about encryption:*
-TODO (1) : Define what large room means and what is the recommended maximum number of
-participants in a E2EE room.
+Clients should notify the user that encryption shouldn't be enabled
+on 'big / public room'. On a side note, enabling end-to-end encrypted
+rooms with a very large number of participants don't have a lot of sence.
**UI considerations :**
* Should make clear that this room is owned by a specific user.
-* UI type is up to the client (feed, pictures waterfall ...)
+* UI type is up to the client (feed (list view), pictures waterfall (grid) ...)
+
+##### Room visibility
+
+Most users will want to have a private profile. However, the question
+is now how can other user follow our profile ? It is always possible to
+invite them in the room but in the world of social media, this is kind
+of weird. This will be like sending a follow proposal.
+
+This could be solved with knocking. The question being how do we discover the room ?
+
+* room alias could be an answer (TODO: is it possible to get the room type ?)
+* An other way could be to use a kind of profile as space. i.e. a place where a user can publicly advertise room that are related to him. This idea could be the topic of a following MSC.
#### Social media : Groups
@@ -93,7 +106,7 @@ We propose two events type to categorize the content of the event.
**Why ?**
-As the room is displayed alongside the user' regular chats rooms we need
+As the room is displayed alongside the user's regular chats rooms we need
to make it clear to the user that it's a specific room.
Thus, we need to avoid that a user end up "spamming" his room thinking
the room is a regular chat room.
@@ -107,24 +120,9 @@ be displayed on the user wall / in the group.
**Types:**
-* m.social.post
-* m.social.pictures
-
-**Why defining a specific m.social.pictures event ?**
-
-When sending events, we want to be sure that the other users will
-be able to see our posts. Thus, it might be problematic with image
-only social media if we send a post with only text and then want to
-display it in a image only social media or is not able to render
-a fraction of the post (like a post with text, video, image).
-This becomes problematic when the user start making reference
-to previously sent post.
-
-> We define separate types to make sure the app displaying them
-is able to support all the content of this specific event type and
-make sure image only and regular feeds don't mix.
+* `m.social.post`
+* `m.social.pictures`
-See the later point for regular room message fallback.
#### Base event
@@ -199,6 +197,22 @@ social media.
UI could be a grid or a list view of pictures.
+**Why defining a specific m.social.pictures event ?**
+
+When sending events, we want to be sure that the other users will
+be able to see our posts. Thus, it might be problematic with image
+only social media if we send a post with only text and then want to
+display it in a image only social media or is not able to render
+a fraction of the post (like a post with text, video, image).
+This becomes problematic when the user start making reference
+to previously sent post.
+
+> We define separate types to make sure the app displaying them
+is able to support all the content of this specific event type and
+make sure image only and regular feeds don't mix.
+
+See the later point for regular room message fallback.
+
**Required content:**
The list of arguments that should be part of event["content"]
@@ -414,10 +428,10 @@ m.room.power_levels
The following mapping will be used for identifiers in this MSC during development:
-Proposed final identifier | Purpose | Development identifier
-------------------------------- | ------- | ----
-`m.social.feed` | 'wall' room | `org.matrix.msc3639.social.feed`
-`m.social.group` | group room | `org.matrix.msc3639.social.group`
-`m.social.post` | post event | `org.matrix.msc3639.social.post`
-`m.social.image` | image event | `org.matrix.msc3639.social.image`
-`m.social.tags` | tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag`
+| Proposed final identifier | Purpose | Development identifier |
+| ------------------------- | ---------------------------------------------------------- | ----------------------------------- |
+| `m.social.profile` | Profile room | `org.matrix.msc3639.social.profile` |
+| `m.social.group` | group room | `org.matrix.msc3639.social.group` |
+| `m.social.post` | post event | `org.matrix.msc3639.social.post` |
+| `m.social.image` | image event | `org.matrix.msc3639.social.image` |
+| `m.social.tags` | tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag` |
From a272151ddb2671a0b46a0fc3b1211fa8d6bf0358 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 16 Feb 2022 16:40:22 +0100
Subject: [PATCH 20/25] fix: corrected examples
---
...39-matrix-for-the-social-media-use-case.md | 84 ++++++++++---------
1 file changed, 43 insertions(+), 41 deletions(-)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index 47d48edb6..5145df976 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -158,23 +158,23 @@ like:
"body": "The awesome story
A long time ago in a galaxy far, far away...
Read full post",
"m.social.post": [
{
- "msgtype": "m.text",
- "body": "The first part of full text of story, located before image.",
+ "m.text": "The first part of full text of story, located before image.",
},
+
{
- "msgtype": "m.image",
- "url": "mxc://example.com/KUAQOesGECkQTgdtedkftISg",
- "body": "Image 1.jpg",
- "info": {
- "mimetype": "image/jpg",
- "size": 1153501,
- "w": 963,
- "h": 734,
- }
- },
+ "m.file": {
+ "mimetype": "image/jpeg",
+ "name": "_MG_0641.jpg",
+ "size": 10158773,
+ "url": "mxc://"
+ },
+ "m.image": {
+ "height": 3456,
+ "width": 5184
+ },
+ }
{
- "msgtype": "m.text",
- "body": "The ending text of full story after image.",
+ "m.text": "The ending text of full story after image.",
}
]
}
@@ -230,35 +230,37 @@ like :
"type": "m.social.image",
"content": {
"m.social.image": [
- "m.caption": [
- {
- "m.text": "Tramline in Berlin"
- },
+ {
+ "m.caption": [
+ {
+ "m.text": "Tramline in Berlin"
+ },
+ {
+ "body": "Tramline in Berlin",
+ "mimetype": "text/html"
+ }
+ ],
+ "m.file": {
+ "mimetype": "image/jpeg",
+ "name": "_MG_0641.jpg",
+ "size": 10158773,
+ "url": "mxc://"
+ },
+ "m.image": {
+ "height": 3456,
+ "width": 5184
+ },
+ "m.text": "Tramline Berlin",
+ "m.thumbnail": [
{
- "body": "Tramline in Berlin",
- "mimetype": "text/html"
+ "height": 533,
+ "mimetype": "image/jpeg",
+ "size": 215496,
+ "url": "mxc://nordgedanken.dev/",
+ "width": 800
}
- ],
- "m.file": {
- "mimetype": "image/jpeg",
- "name": "_MG_0641.jpg",
- "size": 10158773,
- "url": "mxc://"
- },
- "m.image": {
- "height": 3456,
- "width": 5184
- },
- "m.text": "Tramline Berlin",
- "m.thumbnail": [
- {
- "height": 533,
- "mimetype": "image/jpeg",
- "size": 215496,
- "url": "mxc://nordgedanken.dev/",
- "width": 800
- }
- ],
+ ]
+ }
]
},
}
From 77ae6f47152cb342a767ce49af25d0e0227e1303 Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 16 Feb 2022 16:41:35 +0100
Subject: [PATCH 21/25] feat: corrected last example
---
...39-matrix-for-the-social-media-use-case.md | 25 +++++++++----------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index 5145df976..dab3cd00d 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -286,23 +286,22 @@ is to define events like this one
Read the full post in your favorite social matrix client",
"m.social.post": [
{
- "msgtype": "m.text",
- "body": "The first part of full text of story, located before image.",
+ "m.text": "The first part of full text of story, located before image.",
},
{
- "msgtype": "m.image",
- "url": "mxc://example.com/KUAQOesGECkQTgdtedkftISg",
- "body": "Image 1.jpg",
- "info": {
- "mimetype": "image/jpg",
- "size": 1153501,
- "w": 963,
- "h": 734,
- }
+ "m.file": {
+ "mimetype": "image/jpeg",
+ "name": "_MG_0641.jpg",
+ "size": 10158773,
+ "url": "mxc://"
+ },
+ "m.image": {
+ "height": 3456,
+ "width": 5184
+ },
},
{
- "msgtype": "m.text",
- "body": "The ending text of full story after image.",
+ "m.text": "The ending text of full story after image.",
}
]
}
From b1a8e7ca8aa397e66fcb3adfa1d362382baaaddf Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 16 Feb 2022 16:42:23 +0100
Subject: [PATCH 22/25] fix: typo
---
proposals/3639-matrix-for-the-social-media-use-case.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index dab3cd00d..5acccb888 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -432,7 +432,7 @@ The following mapping will be used for identifiers in this MSC during developmen
| Proposed final identifier | Purpose | Development identifier |
| ------------------------- | ---------------------------------------------------------- | ----------------------------------- |
| `m.social.profile` | Profile room | `org.matrix.msc3639.social.profile` |
-| `m.social.group` | group room | `org.matrix.msc3639.social.group` |
-| `m.social.post` | post event | `org.matrix.msc3639.social.post` |
-| `m.social.image` | image event | `org.matrix.msc3639.social.image` |
-| `m.social.tags` | tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag` |
+| `m.social.group` | Group room | `org.matrix.msc3639.social.group` |
+| `m.social.post` | Post event | `org.matrix.msc3639.social.post` |
+| `m.social.image` | Image event | `org.matrix.msc3639.social.image` |
+| `m.social.tags` | Tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag` |
From 67a0bbe06edb54027eefd39bacec81e848ea082e Mon Sep 17 00:00:00 2001
From: Henri2h
Date: Sat, 26 Mar 2022 13:53:24 +0100
Subject: [PATCH 23/25] fix: typo
---
proposals/3639-matrix-for-the-social-media-use-case.md | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index 5acccb888..d2cdddacf 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -160,7 +160,6 @@ like:
{
"m.text": "The first part of full text of story, located before image.",
},
-
{
"m.file": {
"mimetype": "image/jpeg",
@@ -172,7 +171,7 @@ like:
"height": 3456,
"width": 5184
},
- }
+ },
{
"m.text": "The ending text of full story after image.",
}
From eeb8b0611ca2de8e2f44fa738706d1f4d7b680fb Mon Sep 17 00:00:00 2001
From: henri2h
Date: Wed, 24 Aug 2022 13:08:14 +0200
Subject: [PATCH 24/25] feat: update to add image link
---
...39-matrix-for-the-social-media-use-case.md | 56 ++++++-------------
1 file changed, 18 insertions(+), 38 deletions(-)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index 5acccb888..d948a411f 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -10,8 +10,8 @@ a compatibility between the different social media projects.
This MSC tries to cover those following social media cases:
-* **'Regular'** social media (Twitter style, Facebook : Circles, MinesTRIX)
-* **'Art'** social media (Matrix Art)
+* **'Regular'** social media like Circuli or MinesTRIX
+* **'Art'** social media like Matrix Art
## The proposal
@@ -133,23 +133,8 @@ The structure of the event should just be extensible events.
m.social.post
```
-A type for general content.
+A type for general content. It's structure is of type:
-Could be text, pictures, video ...
-
-**TODO:**
-
-Define what base events the clients supporting those events
-should be able to display.
-
-like:
-
-* m.text
-* m.image
-* m.video
-* m.file
-
-**Example:**
```json
{
"type": "m.social.post",
@@ -159,30 +144,21 @@ like:
"m.social.post": [
{
"m.text": "The first part of full text of story, located before image.",
- },
-
- {
- "m.file": {
- "mimetype": "image/jpeg",
- "name": "_MG_0641.jpg",
- "size": 10158773,
- "url": "mxc://"
- },
- "m.image": {
- "height": 3456,
- "width": 5184
- },
- }
- {
- "m.text": "The ending text of full story after image.",
}
+ ],
+ "m.social.image-ref": [
+ "$",
]
}
}
```
-Using an array for `m.social.post` will help define the order in which
-content should be displayed.
+If we want to embed images in the post, we should first send a `m.social.image` event and then it's event id in the `m.social.image-ref` attribute of the post content. This, to allow user to allow a user to comment an image individually or to reuse it in different posts. This allow us also to display more easily all the images who have been posted in the room.
+
+**TODO:**
+
+Define what base events the clients supporting those events
+should be able to display.
#### Social: Image
@@ -310,7 +286,7 @@ is to define events like this one
On a regular chat client like element, it should render as a simple link.
-Another solution is to just send two events, one m.post.post or m.social.image
+Another solution is to just send two events, one `m.social.post` or `m.social.image`
and a summary in the form of a room message.
##### Todo
@@ -321,13 +297,15 @@ A text fall back, `Open in xxx to see the whole post` could make sense.
### Reactions
* Emoji reaction will use the regular event.
-* However, post comment will be threads.
+* However, comments on posts will be threads.
For rooms where only the user can write, it could be interesting to
allow other users to have a comment only permission.
See [MSC3394 - new auth rule that only allows someone to post a message in relation to another message](https://github.com/frandavid100/matrix-doc/blob/threaded-replies/proposals/3394-new-auth-rule-that-only-allows-someone-to-post-a-message-in-relation-to-another-message.md)
for such a proposal.
+Another way to achieve this could be to use a different event type for comment so we can prevent people to send a post in a group but still allow them to comment.
+
### Tagging
We could add a `tags` entry in the event content. The content of those
@@ -435,4 +413,6 @@ The following mapping will be used for identifiers in this MSC during developmen
| `m.social.group` | Group room | `org.matrix.msc3639.social.group` |
| `m.social.post` | Post event | `org.matrix.msc3639.social.post` |
| `m.social.image` | Image event | `org.matrix.msc3639.social.image` |
+| `m.social.image-ref` | Link to an image event | `org.matrix.msc3639.social.image-ref` |
| `m.social.tags` | Tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag` |
+
From 77bb8b049a42e8622e0331a3398c84dfc7d657ea Mon Sep 17 00:00:00 2001
From: henri2h
Date: Mon, 2 Jan 2023 19:35:11 +0100
Subject: [PATCH 25/25] feat: update proposal to remove extensible events andk
add comments
---
...39-matrix-for-the-social-media-use-case.md | 323 ++++++------------
1 file changed, 99 insertions(+), 224 deletions(-)
diff --git a/proposals/3639-matrix-for-the-social-media-use-case.md b/proposals/3639-matrix-for-the-social-media-use-case.md
index d948a411f..7a8886e0c 100644
--- a/proposals/3639-matrix-for-the-social-media-use-case.md
+++ b/proposals/3639-matrix-for-the-social-media-use-case.md
@@ -10,21 +10,16 @@ a compatibility between the different social media projects.
This MSC tries to cover those following social media cases:
-* **'Regular'** social media like Circuli or MinesTRIX
+* **'Regular'** social media like Circles or MinesTRIX
* **'Art'** social media like Matrix Art
## The proposal
-
To cover those use case, we will separate our proposal in two part.
* **Room types**: the container which will store the events.
-* **Special events types**: dedicated to the social media use cased
-which will be filtered depending on the client type/UI.
-(displaying a feed or a grid of pictures...).
+* **Special events types**: to differentiate post and comment from room messages.
-It is up to the client to filter the room event's and display only
-the one which are relevant on the client purpose.
### Room
@@ -39,8 +34,9 @@ Therefore, we propose two room types. Types are defined according to
* `m.social.profile`
* `m.social.group`
-Those two rooms will act as a container for events of different
-types, which will be displayed only on a specific client. The type is used to set the general purpose of the room.
+Those two rooms will act as a container for events of different types, which
+will be displayed only on a specific client. The type is used to set the
+general purpose of the room.
#### Social media : The user profile
@@ -63,7 +59,7 @@ This MSC remains voluntarily open as user may want to configure the room as he w
Clients should notify the user that encryption shouldn't be enabled
on 'big / public room'. On a side note, enabling end-to-end encrypted
-rooms with a very large number of participants don't have a lot of sence.
+rooms with a very large number of participants don't have a lot of sense.
**UI considerations :**
@@ -96,241 +92,85 @@ Group is just a regular profile room `m.social.feed` but with a
slightly different UI as there is no single owner of the room.
-### Room content
-
-Require
+### Sending posts
-* [MSC1767 - Extensible event types & fallback in Matrix (v2)](https://github.com/matrix-org/matrix-doc/pull/1767)
+We propose to define a custom type for posts.
-We propose two events type to categorize the content of the event.
+```
+m.social.post
+```
**Why ?**
-As the room is displayed alongside the user's regular chats rooms we need
+As the room is displayed alongside the user's regular chats rooms, we need
to make it clear to the user that it's a specific room.
Thus, we need to avoid that a user end up "spamming" his room thinking
the room is a regular chat room.
-The solution is to separate the regular messaging from the social
-media posts. Thus, defining special events different from the regular
-messaging events.
-
-It will still be possible to send room message. But those should not
-be displayed on the user wall / in the group.
-
-**Types:**
-
-* `m.social.post`
-* `m.social.pictures`
+Therefore, we use different event type to separate the regular messaging
+from the social media posts. It will still be possible to send room message.
+However, those should not be displayed on the user wall / group.
+**NB:** An initial version of the proposal was using extensible events but
+we decided to fall back to regular event while waiting for the extensible events
+proposal to stabilize.
-#### Base event
-The structure of the event should just be extensible events.
-
-#### Social: Post
-```
-m.social.post
-```
-
-A type for general content. It's structure is of type:
+A type for general content. Its structure is of type:
```json
{
"type": "m.social.post",
"content": {
- "msgtype": "m.text",
- "body": "The awesome story
A long time ago in a galaxy far, far away...
Read full post",
- "m.social.post": [
- {
- "m.text": "The first part of full text of story, located before image.",
- }
- ],
- "m.social.image-ref": [
+ "body": "The content of the post, can be Markdown",
+ "m.social.image-ref": [ // optional
"$",
]
}
}
```
-If we want to embed images in the post, we should first send a `m.social.image` event and then it's event id in the `m.social.image-ref` attribute of the post content. This, to allow user to allow a user to comment an image individually or to reuse it in different posts. This allow us also to display more easily all the images who have been posted in the room.
-
-**TODO:**
+#### Embedding images in the post
-Define what base events the clients supporting those events
-should be able to display.
+If we want to embed images in the post, we should first send the image as a regular
+event and then put the image event id in the `m.social.image-ref` attribute of the
+post content. This, to allow user to allow a user to comment an image individually
+or to reuse it in different posts. This allows us also to display more easily all
+the images who have been posted in the room.
-#### Social: Image
-Base : [MSC3552 - Extensible Events - Images and Stickers](https://github.com/matrix-org/matrix-doc/blob/travis/msc/extev/images/proposals/3552-extensible-events-images.md)
-
-```
-m.social.image
-```
-
-Events adapted to client like Matrix Art to build pictures only
-social media.
-
-UI could be a grid or a list view of pictures.
-
-**Why defining a specific m.social.pictures event ?**
-
-When sending events, we want to be sure that the other users will
-be able to see our posts. Thus, it might be problematic with image
-only social media if we send a post with only text and then want to
-display it in a image only social media or is not able to render
-a fraction of the post (like a post with text, video, image).
-This becomes problematic when the user start making reference
-to previously sent post.
-
-> We define separate types to make sure the app displaying them
-is able to support all the content of this specific event type and
-make sure image only and regular feeds don't mix.
-
-See the later point for regular room message fallback.
-
-**Required content:**
-
-The list of arguments that should be part of event["content"]
-
-// TODO
+### Reactions
-like :
+* Emoji reactions are standard matrix reactions.
+* However, comments on posts will be threads.
-* m.image
+Comments will have the same structure as post but will have the 'm.social.comment'
+type to allow the owner of the room to allow commenting but preventing the other users
+to send posts on this group. As said, comment need to have a thread relation to a post
+event. Failing to do so will have no impact, but the event shouldn't be displayed.
**Example:**
-```json
-{
- "type": "m.social.image",
- "content": {
- "m.social.image": [
- {
- "m.caption": [
- {
- "m.text": "Tramline in Berlin"
- },
- {
- "body": "Tramline in Berlin",
- "mimetype": "text/html"
- }
- ],
- "m.file": {
- "mimetype": "image/jpeg",
- "name": "_MG_0641.jpg",
- "size": 10158773,
- "url": "mxc://"
- },
- "m.image": {
- "height": 3456,
- "width": 5184
- },
- "m.text": "Tramline Berlin",
- "m.thumbnail": [
- {
- "height": 533,
- "mimetype": "image/jpeg",
- "size": 215496,
- "url": "mxc://nordgedanken.dev/",
- "width": 800
- }
- ]
- }
- ]
- },
-}
```
-
-#### Linking posts/pictures to the regular chat
-
-One may want to advertise the room that he posted a specific content
-(only visible in a social media client) that may be of interest to user
-and provide a link to it.
-
-This should be up to the user. The client could display a 'advertise in the chat room' button.
-
-A [solution adapted from the one proposed by @MurzNN](https://github.com/matrix-org/matrix-doc/pull/1767#issuecomment-787431678)
-is to define events like this one
-
-```json
{
- "type": "m.room.message", // will be m.text in the future. According to extensible events
+ "type": "org.matrix.msc3639.social.comment",
"content": {
- "msgtype": "m.text",
- "body": "The awesome story
A long time ago in a galaxy far, far away...
-
Read the full post in your favorite social matrix client",
- "m.social.post": [
- {
- "m.text": "The first part of full text of story, located before image.",
- },
- {
- "m.file": {
- "mimetype": "image/jpeg",
- "name": "_MG_0641.jpg",
- "size": 10158773,
- "url": "mxc://"
- },
- "m.image": {
- "height": 3456,
- "width": 5184
- },
- },
- {
- "m.text": "The ending text of full story after image.",
- }
- ]
+ "body": "ok",
+ "m.relates_to": {
+ "rel_type": "m.thread",
+ "event_id": "$GKhFi7r_7bFx4pWUPfPox8nbCM27aqRkFHwK0PG-Avw"
+ }
}
}
```
-On a regular chat client like element, it should render as a simple link.
-
-Another solution is to just send two events, one `m.social.post` or `m.social.image`
-and a summary in the form of a room message.
-
-##### Todo
-
-Some client may not be web pages, thus a `href=""` may not make sense.
-A text fall back, `Open in xxx to see the whole post` could make sense.
-
-### Reactions
-
-* Emoji reaction will use the regular event.
-* However, comments on posts will be threads.
-
-For rooms where only the user can write, it could be interesting to
-allow other users to have a comment only permission.
-See [MSC3394 - new auth rule that only allows someone to post a message in relation to another message](https://github.com/frandavid100/matrix-doc/blob/threaded-replies/proposals/3394-new-auth-rule-that-only-allows-someone-to-post-a-message-in-relation-to-another-message.md)
-for such a proposal.
-
-Another way to achieve this could be to use a different event type for comment so we can prevent people to send a post in a group but still allow them to comment.
-
-### Tagging
-
-We could add a `tags` entry in the event content. The content of those
-tags could be 'hashtags'.
-
-This will be useful for art social media. But we could also see an
-implementation in regular social media like to tag other person.
-
-```json
-{
- "m.social.post": [/* the post content */],
- "m.social.tag": [
- "@mxid",
- "my chair"
- ]
-}
-```
-
## Alternative
There has been some discussion about whether we should restrict the
room to a specific type of content (i.e. the type of the room define
the UI and how the content should be treated). Here is some consideration about the alternative proposal.
-### Advantage of this approach (the main one)
+### Advantage of this approach
* flexibility
@@ -342,7 +182,6 @@ It will help as we have all our followers in the same room.
### Disadvantages of this approach
-
#### Complexity / room size
This approach comes with a higher complexity.
@@ -369,19 +208,6 @@ in it.)
to moderate the room as the user could write event using an event
type that we don't use. Means longer time before removing those events.
-### Alternative proposal
-
-Instead of filtering the room events according to their types,
-we could filter the room directly according to his type.
-Thus defining how the room UI.
-
-We could define
-
-* m.social.feed : for regular social media
-* m.social.image : for image social media
-
-This solution solve the main disadvantages of the previous solution
-but lacks the flexibility.
## Privacy
@@ -398,21 +224,70 @@ m.room.power_levels
* It must be clear to the user if the actual room is private or not.
* It must be clear to the user if the actual room is end-to-end encrypted.
* The user should be able to restrict the users able to write in his room.
-
* The user should be that all the followers can see each others.
+
## Unstable prefix
The following mapping will be used for identifiers in this MSC during development:
-| Proposed final identifier | Purpose | Development identifier |
-| ------------------------- | ---------------------------------------------------------- | ----------------------------------- |
-| `m.social.profile` | Profile room | `org.matrix.msc3639.social.profile` |
-| `m.social.group` | Group room | `org.matrix.msc3639.social.group` |
-| `m.social.post` | Post event | `org.matrix.msc3639.social.post` |
-| `m.social.image` | Image event | `org.matrix.msc3639.social.image` |
-| `m.social.image-ref` | Link to an image event | `org.matrix.msc3639.social.image-ref` |
-| `m.social.tags` | Tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag` |
+| Proposed final identifier | Purpose | Development identifier |
+| ------------------------- | ----------------------- | ------------------------------------- |
+| `m.social.profile` | Profile room | `org.matrix.msc3639.social.profile` |
+| `m.social.group` | Group room | `org.matrix.msc3639.social.group` |
+| `m.social.post` | Post event | `org.matrix.msc3639.social.post` |
+| `m.social.comment` | Comment on a post event | `org.matrix.msc3639.social.comment` |
+| `m.social.image-ref` | Link to an image event | `org.matrix.msc3639.social.image-ref` |
+
+
+
+## Further idea
+
+### Image post
+
+An earlier version of the proposal allowed to define custom events for
+
+### Alternative proposal
+
+Instead of filtering the room events according to their types,
+we could filter the room directly according to his type.
+Thus defining how the room UI.
+
+We could define
+
+* m.social.feed : for regular social media
+* m.social.image : for image social media
+
+This solution solve the main disadvantages of the previous solution
+but lacks the flexibility.
+
+
+### Idea: Tagging
+
+*NB:* This is only an idea
+
+We could add a `tags` entry in the event content. The content of those
+tags could be 'hashtags'.
+
+This will be useful for art social media. But we could also see an
+implementation in regular social media like to tag other person.
+
+```json
+{
+ "m.social.post": [/* the post content */],
+ "m.social.tag": [
+ "@mxid",
+ "my chair"
+ ]
+}
+```
+### Unstable prefix
+
+| Proposed final identifier | Purpose | Development identifier |
+| ------------------------- | ---------------------------------------------------------------- | --------------------------------- |
+| `m.social.image` | Image event (deprecated, could be restored in a further version) | `org.matrix.msc3639.social.image` |
+| `m.social.tags` | Tags property of `m.social.post` or `m.social.image` event | `org.matrix.msc3639.social.tag` |
+