diff --git a/packages/components/__generated__/ActivityLogsFragment.graphql.ts b/packages/components/__generated__/ActivityLogsFragment.graphql.ts
index de759ea4..f2ba3605 100644
--- a/packages/components/__generated__/ActivityLogsFragment.graphql.ts
+++ b/packages/components/__generated__/ActivityLogsFragment.graphql.ts
@@ -5,349 +5,326 @@
  */
 
 /* tslint:disable */
-
 /* eslint-disable */
 // @ts-nocheck
-import { ReaderFragment, RefetchableFragment } from 'relay-runtime'
-import { FragmentRefs } from 'relay-runtime'
 
+import { ReaderFragment, RefetchableFragment } from 'relay-runtime';
+import { FragmentRefs } from "relay-runtime";
 export type ActivityLogsFragment$data = {
-  readonly activityLogs:
-    | {
-        readonly edges: ReadonlyArray<
-          | {
-              readonly node:
-                | {
-                    readonly createdAt: any
-                    readonly events:
-                      | {
-                          readonly edges: ReadonlyArray<
-                            | {
-                                readonly node:
-                                  | {
-                                      readonly diff: any | null | undefined
-                                      readonly label: string | null | undefined
-                                    }
-                                  | null
-                                  | undefined
-                              }
-                            | null
-                            | undefined
-                          >
-                        }
-                      | null
-                      | undefined
-                    readonly id: string
-                    readonly url: string | null | undefined
-                    readonly user:
-                      | {
-                          readonly avatar:
-                            | {
-                                readonly url: string
-                              }
-                            | null
-                            | undefined
-                          readonly email: string | null | undefined
-                          readonly fullName: string | null | undefined
-                          readonly id: string
-                        }
-                      | null
-                      | undefined
-                    readonly verb: string | null | undefined
-                  }
-                | null
-                | undefined
-            }
-          | null
-          | undefined
-        >
-        readonly pageInfo: {
-          readonly endCursor: string | null | undefined
-          readonly hasNextPage: boolean
-        }
-      }
-    | null
-    | undefined
-  readonly ' $fragmentType': 'ActivityLogsFragment'
-}
+  readonly activityLogs: {
+    readonly edges: ReadonlyArray<{
+      readonly node: {
+        readonly createdAt: any;
+        readonly events: {
+          readonly edges: ReadonlyArray<{
+            readonly node: {
+              readonly diff: any | null | undefined;
+              readonly label: string | null | undefined;
+            } | null | undefined;
+          } | null | undefined>;
+        } | null | undefined;
+        readonly id: string;
+        readonly url: string | null | undefined;
+        readonly user: {
+          readonly avatar: {
+            readonly url: string;
+          } | null | undefined;
+          readonly email: string | null | undefined;
+          readonly fullName: string | null | undefined;
+          readonly id: string;
+        } | null | undefined;
+        readonly verb: string | null | undefined;
+      } | null | undefined;
+    } | null | undefined>;
+    readonly pageInfo: {
+      readonly endCursor: string | null | undefined;
+      readonly hasNextPage: boolean;
+    };
+  } | null | undefined;
+  readonly " $fragmentType": "ActivityLogsFragment";
+};
 export type ActivityLogsFragment$key = {
-  readonly ' $data'?: ActivityLogsFragment$data
-  readonly ' $fragmentSpreads': FragmentRefs<'ActivityLogsFragment'>
-}
+  readonly " $data"?: ActivityLogsFragment$data;
+  readonly " $fragmentSpreads": FragmentRefs<"ActivityLogsFragment">;
+};
 
-const node: ReaderFragment = (function () {
-  var v0 = ['activityLogs'],
-    v1 = {
-      alias: null,
-      args: null,
-      kind: 'ScalarField',
-      name: 'id',
-      storageKey: null,
+const node: ReaderFragment = (function(){
+var v0 = [
+  "activityLogs"
+],
+v1 = {
+  "alias": null,
+  "args": null,
+  "kind": "ScalarField",
+  "name": "id",
+  "storageKey": null
+},
+v2 = {
+  "alias": null,
+  "args": null,
+  "kind": "ScalarField",
+  "name": "url",
+  "storageKey": null
+};
+return {
+  "argumentDefinitions": [
+    {
+      "defaultValue": 10,
+      "kind": "LocalArgument",
+      "name": "count"
+    },
+    {
+      "defaultValue": null,
+      "kind": "LocalArgument",
+      "name": "createdFrom"
+    },
+    {
+      "defaultValue": null,
+      "kind": "LocalArgument",
+      "name": "createdTo"
     },
-    v2 = {
-      alias: null,
-      args: null,
-      kind: 'ScalarField',
-      name: 'url',
-      storageKey: null,
+    {
+      "defaultValue": null,
+      "kind": "LocalArgument",
+      "name": "cursor"
+    },
+    {
+      "defaultValue": null,
+      "kind": "LocalArgument",
+      "name": "userName"
     }
-  return {
-    argumentDefinitions: [
-      {
-        defaultValue: 10,
-        kind: 'LocalArgument',
-        name: 'count',
-      },
-      {
-        defaultValue: null,
-        kind: 'LocalArgument',
-        name: 'createdFrom',
-      },
-      {
-        defaultValue: null,
-        kind: 'LocalArgument',
-        name: 'createdTo',
-      },
+  ],
+  "kind": "Fragment",
+  "metadata": {
+    "connection": [
       {
-        defaultValue: null,
-        kind: 'LocalArgument',
-        name: 'cursor',
-      },
-      {
-        defaultValue: null,
-        kind: 'LocalArgument',
-        name: 'userName',
-      },
+        "count": "count",
+        "cursor": "cursor",
+        "direction": "forward",
+        "path": (v0/*: any*/)
+      }
     ],
-    kind: 'Fragment',
-    metadata: {
-      connection: [
+    "refetch": {
+      "connection": {
+        "forward": {
+          "count": "count",
+          "cursor": "cursor"
+        },
+        "backward": null,
+        "path": (v0/*: any*/)
+      },
+      "fragmentPathInResult": [],
+      "operation": require('./ActivityLogsPaginationQuery.graphql')
+    }
+  },
+  "name": "ActivityLogsFragment",
+  "selections": [
+    {
+      "alias": "activityLogs",
+      "args": [
         {
-          count: 'count',
-          cursor: 'cursor',
-          direction: 'forward',
-          path: v0 /*: any*/,
+          "kind": "Variable",
+          "name": "createdFrom",
+          "variableName": "createdFrom"
         },
+        {
+          "kind": "Variable",
+          "name": "createdTo",
+          "variableName": "createdTo"
+        },
+        {
+          "kind": "Variable",
+          "name": "userName",
+          "variableName": "userName"
+        }
       ],
-      refetch: {
-        connection: {
-          forward: {
-            count: 'count',
-            cursor: 'cursor',
-          },
-          backward: null,
-          path: v0 /*: any*/,
+      "concreteType": "ActivityLogConnection",
+      "kind": "LinkedField",
+      "name": "__ActivityLogs_activityLogs_connection",
+      "plural": false,
+      "selections": [
+        {
+          "alias": null,
+          "args": null,
+          "concreteType": "ActivityLogEdge",
+          "kind": "LinkedField",
+          "name": "edges",
+          "plural": true,
+          "selections": [
+            {
+              "alias": null,
+              "args": null,
+              "concreteType": "ActivityLog",
+              "kind": "LinkedField",
+              "name": "node",
+              "plural": false,
+              "selections": [
+                (v1/*: any*/),
+                {
+                  "alias": null,
+                  "args": null,
+                  "kind": "ScalarField",
+                  "name": "createdAt",
+                  "storageKey": null
+                },
+                {
+                  "alias": null,
+                  "args": null,
+                  "concreteType": "NodeLogEventConnection",
+                  "kind": "LinkedField",
+                  "name": "events",
+                  "plural": false,
+                  "selections": [
+                    {
+                      "alias": null,
+                      "args": null,
+                      "concreteType": "NodeLogEventEdge",
+                      "kind": "LinkedField",
+                      "name": "edges",
+                      "plural": true,
+                      "selections": [
+                        {
+                          "alias": null,
+                          "args": null,
+                          "concreteType": "NodeLogEvent",
+                          "kind": "LinkedField",
+                          "name": "node",
+                          "plural": false,
+                          "selections": [
+                            {
+                              "alias": null,
+                              "args": null,
+                              "kind": "ScalarField",
+                              "name": "label",
+                              "storageKey": null
+                            },
+                            {
+                              "alias": null,
+                              "args": null,
+                              "kind": "ScalarField",
+                              "name": "diff",
+                              "storageKey": null
+                            }
+                          ],
+                          "storageKey": null
+                        }
+                      ],
+                      "storageKey": null
+                    }
+                  ],
+                  "storageKey": null
+                },
+                {
+                  "alias": null,
+                  "args": null,
+                  "kind": "ScalarField",
+                  "name": "verb",
+                  "storageKey": null
+                },
+                (v2/*: any*/),
+                {
+                  "alias": null,
+                  "args": null,
+                  "concreteType": "User",
+                  "kind": "LinkedField",
+                  "name": "user",
+                  "plural": false,
+                  "selections": [
+                    (v1/*: any*/),
+                    {
+                      "alias": null,
+                      "args": null,
+                      "kind": "ScalarField",
+                      "name": "fullName",
+                      "storageKey": null
+                    },
+                    {
+                      "alias": null,
+                      "args": null,
+                      "kind": "ScalarField",
+                      "name": "email",
+                      "storageKey": null
+                    },
+                    {
+                      "alias": null,
+                      "args": [
+                        {
+                          "kind": "Literal",
+                          "name": "height",
+                          "value": 48
+                        },
+                        {
+                          "kind": "Literal",
+                          "name": "width",
+                          "value": 48
+                        }
+                      ],
+                      "concreteType": "File",
+                      "kind": "LinkedField",
+                      "name": "avatar",
+                      "plural": false,
+                      "selections": [
+                        (v2/*: any*/)
+                      ],
+                      "storageKey": "avatar(height:48,width:48)"
+                    }
+                  ],
+                  "storageKey": null
+                },
+                {
+                  "alias": null,
+                  "args": null,
+                  "kind": "ScalarField",
+                  "name": "__typename",
+                  "storageKey": null
+                }
+              ],
+              "storageKey": null
+            },
+            {
+              "alias": null,
+              "args": null,
+              "kind": "ScalarField",
+              "name": "cursor",
+              "storageKey": null
+            }
+          ],
+          "storageKey": null
         },
-        fragmentPathInResult: [],
-        operation: require('./ActivityLogsPaginationQuery.graphql'),
-      },
-    },
-    name: 'ActivityLogsFragment',
-    selections: [
-      {
-        alias: 'activityLogs',
-        args: [
-          {
-            kind: 'Variable',
-            name: 'createdFrom',
-            variableName: 'createdFrom',
-          },
-          {
-            kind: 'Variable',
-            name: 'createdTo',
-            variableName: 'createdTo',
-          },
-          {
-            kind: 'Variable',
-            name: 'userName',
-            variableName: 'userName',
-          },
-        ],
-        concreteType: 'ActivityLogConnection',
-        kind: 'LinkedField',
-        name: '__ActivityLogs_activityLogs_connection',
-        plural: false,
-        selections: [
-          {
-            alias: null,
-            args: null,
-            concreteType: 'ActivityLogEdge',
-            kind: 'LinkedField',
-            name: 'edges',
-            plural: true,
-            selections: [
-              {
-                alias: null,
-                args: null,
-                concreteType: 'ActivityLog',
-                kind: 'LinkedField',
-                name: 'node',
-                plural: false,
-                selections: [
-                  v1 /*: any*/,
-                  {
-                    alias: null,
-                    args: null,
-                    kind: 'ScalarField',
-                    name: 'createdAt',
-                    storageKey: null,
-                  },
-                  {
-                    alias: null,
-                    args: null,
-                    concreteType: 'NodeLogEventConnection',
-                    kind: 'LinkedField',
-                    name: 'events',
-                    plural: false,
-                    selections: [
-                      {
-                        alias: null,
-                        args: null,
-                        concreteType: 'NodeLogEventEdge',
-                        kind: 'LinkedField',
-                        name: 'edges',
-                        plural: true,
-                        selections: [
-                          {
-                            alias: null,
-                            args: null,
-                            concreteType: 'NodeLogEvent',
-                            kind: 'LinkedField',
-                            name: 'node',
-                            plural: false,
-                            selections: [
-                              {
-                                alias: null,
-                                args: null,
-                                kind: 'ScalarField',
-                                name: 'label',
-                                storageKey: null,
-                              },
-                              {
-                                alias: null,
-                                args: null,
-                                kind: 'ScalarField',
-                                name: 'diff',
-                                storageKey: null,
-                              },
-                            ],
-                            storageKey: null,
-                          },
-                        ],
-                        storageKey: null,
-                      },
-                    ],
-                    storageKey: null,
-                  },
-                  {
-                    alias: null,
-                    args: null,
-                    kind: 'ScalarField',
-                    name: 'verb',
-                    storageKey: null,
-                  },
-                  v2 /*: any*/,
-                  {
-                    alias: null,
-                    args: null,
-                    concreteType: 'User',
-                    kind: 'LinkedField',
-                    name: 'user',
-                    plural: false,
-                    selections: [
-                      v1 /*: any*/,
-                      {
-                        alias: null,
-                        args: null,
-                        kind: 'ScalarField',
-                        name: 'fullName',
-                        storageKey: null,
-                      },
-                      {
-                        alias: null,
-                        args: null,
-                        kind: 'ScalarField',
-                        name: 'email',
-                        storageKey: null,
-                      },
-                      {
-                        alias: null,
-                        args: [
-                          {
-                            kind: 'Literal',
-                            name: 'height',
-                            value: 48,
-                          },
-                          {
-                            kind: 'Literal',
-                            name: 'width',
-                            value: 48,
-                          },
-                        ],
-                        concreteType: 'File',
-                        kind: 'LinkedField',
-                        name: 'avatar',
-                        plural: false,
-                        selections: [v2 /*: any*/],
-                        storageKey: 'avatar(height:48,width:48)',
-                      },
-                    ],
-                    storageKey: null,
-                  },
-                  {
-                    alias: null,
-                    args: null,
-                    kind: 'ScalarField',
-                    name: '__typename',
-                    storageKey: null,
-                  },
-                ],
-                storageKey: null,
-              },
-              {
-                alias: null,
-                args: null,
-                kind: 'ScalarField',
-                name: 'cursor',
-                storageKey: null,
-              },
-            ],
-            storageKey: null,
-          },
-          {
-            alias: null,
-            args: null,
-            concreteType: 'PageInfo',
-            kind: 'LinkedField',
-            name: 'pageInfo',
-            plural: false,
-            selections: [
-              {
-                alias: null,
-                args: null,
-                kind: 'ScalarField',
-                name: 'endCursor',
-                storageKey: null,
-              },
-              {
-                alias: null,
-                args: null,
-                kind: 'ScalarField',
-                name: 'hasNextPage',
-                storageKey: null,
-              },
-            ],
-            storageKey: null,
-          },
-        ],
-        storageKey: null,
-      },
-    ],
-    type: 'Query',
-    abstractKey: null,
-  }
-})()
+        {
+          "alias": null,
+          "args": null,
+          "concreteType": "PageInfo",
+          "kind": "LinkedField",
+          "name": "pageInfo",
+          "plural": false,
+          "selections": [
+            {
+              "alias": null,
+              "args": null,
+              "kind": "ScalarField",
+              "name": "endCursor",
+              "storageKey": null
+            },
+            {
+              "alias": null,
+              "args": null,
+              "kind": "ScalarField",
+              "name": "hasNextPage",
+              "storageKey": null
+            }
+          ],
+          "storageKey": null
+        }
+      ],
+      "storageKey": null
+    }
+  ],
+  "type": "Query",
+  "abstractKey": null
+};
+})();
 
-;(node as any).hash = '331e3d4312fbe40053110fe98844df70'
+(node as any).hash = "331e3d4312fbe40053110fe98844df70";
 
-export default node
+export default node;
diff --git a/packages/components/__generated__/RemoveMemberMutation.graphql.ts b/packages/components/__generated__/RemoveMemberMutation.graphql.ts
index 3eaa670d..2452ba99 100644
--- a/packages/components/__generated__/RemoveMemberMutation.graphql.ts
+++ b/packages/components/__generated__/RemoveMemberMutation.graphql.ts
@@ -5,115 +5,113 @@
  */
 
 /* tslint:disable */
-
 /* eslint-disable */
 // @ts-nocheck
-import { ConcreteRequest, Mutation } from 'relay-runtime'
 
+import { ConcreteRequest, Mutation } from 'relay-runtime';
 export type ProfileRemoveMemberInput = {
-  clientMutationId?: string | null | undefined
-  profileId: string
-  userId: string
-}
+  clientMutationId?: string | null | undefined;
+  profileId: string;
+  userId: string;
+};
 export type RemoveMemberMutation$variables = {
-  input: ProfileRemoveMemberInput
-}
+  input: ProfileRemoveMemberInput;
+};
 export type RemoveMemberMutation$data = {
-  readonly profileRemoveMember:
-    | {
-        readonly deletedId: string | null | undefined
-      }
-    | null
-    | undefined
-}
+  readonly profileRemoveMember: {
+    readonly deletedId: string | null | undefined;
+  } | null | undefined;
+};
 export type RemoveMemberMutation = {
-  response: RemoveMemberMutation$data
-  variables: RemoveMemberMutation$variables
-}
+  response: RemoveMemberMutation$data;
+  variables: RemoveMemberMutation$variables;
+};
 
-const node: ConcreteRequest = (function () {
-  var v0 = [
+const node: ConcreteRequest = (function(){
+var v0 = [
+  {
+    "defaultValue": null,
+    "kind": "LocalArgument",
+    "name": "input"
+  }
+],
+v1 = [
+  {
+    "kind": "Variable",
+    "name": "input",
+    "variableName": "input"
+  }
+],
+v2 = {
+  "alias": null,
+  "args": null,
+  "kind": "ScalarField",
+  "name": "deletedId",
+  "storageKey": null
+};
+return {
+  "fragment": {
+    "argumentDefinitions": (v0/*: any*/),
+    "kind": "Fragment",
+    "metadata": null,
+    "name": "RemoveMemberMutation",
+    "selections": [
       {
-        defaultValue: null,
-        kind: 'LocalArgument',
-        name: 'input',
-      },
+        "alias": null,
+        "args": (v1/*: any*/),
+        "concreteType": "ProfileRemoveMemberPayload",
+        "kind": "LinkedField",
+        "name": "profileRemoveMember",
+        "plural": false,
+        "selections": [
+          (v2/*: any*/)
+        ],
+        "storageKey": null
+      }
     ],
-    v1 = [
+    "type": "Mutation",
+    "abstractKey": null
+  },
+  "kind": "Request",
+  "operation": {
+    "argumentDefinitions": (v0/*: any*/),
+    "kind": "Operation",
+    "name": "RemoveMemberMutation",
+    "selections": [
       {
-        kind: 'Variable',
-        name: 'input',
-        variableName: 'input',
-      },
-    ],
-    v2 = {
-      alias: null,
-      args: null,
-      kind: 'ScalarField',
-      name: 'deletedId',
-      storageKey: null,
-    }
-  return {
-    fragment: {
-      argumentDefinitions: v0 /*: any*/,
-      kind: 'Fragment',
-      metadata: null,
-      name: 'RemoveMemberMutation',
-      selections: [
-        {
-          alias: null,
-          args: v1 /*: any*/,
-          concreteType: 'ProfileRemoveMemberPayload',
-          kind: 'LinkedField',
-          name: 'profileRemoveMember',
-          plural: false,
-          selections: [v2 /*: any*/],
-          storageKey: null,
-        },
-      ],
-      type: 'Mutation',
-      abstractKey: null,
-    },
-    kind: 'Request',
-    operation: {
-      argumentDefinitions: v0 /*: any*/,
-      kind: 'Operation',
-      name: 'RemoveMemberMutation',
-      selections: [
-        {
-          alias: null,
-          args: v1 /*: any*/,
-          concreteType: 'ProfileRemoveMemberPayload',
-          kind: 'LinkedField',
-          name: 'profileRemoveMember',
-          plural: false,
-          selections: [
-            v2 /*: any*/,
-            {
-              alias: null,
-              args: null,
-              filters: null,
-              handle: 'deleteRecord',
-              key: '',
-              kind: 'ScalarHandle',
-              name: 'deletedId',
-            },
-          ],
-          storageKey: null,
-        },
-      ],
-    },
-    params: {
-      cacheID: '7ede42a17cf2d60398c7a5019de5f013',
-      id: null,
-      metadata: {},
-      name: 'RemoveMemberMutation',
-      operationKind: 'mutation',
-      text: 'mutation RemoveMemberMutation(\n  $input: ProfileRemoveMemberInput!\n) {\n  profileRemoveMember(input: $input) {\n    deletedId\n  }\n}\n',
-    },
+        "alias": null,
+        "args": (v1/*: any*/),
+        "concreteType": "ProfileRemoveMemberPayload",
+        "kind": "LinkedField",
+        "name": "profileRemoveMember",
+        "plural": false,
+        "selections": [
+          (v2/*: any*/),
+          {
+            "alias": null,
+            "args": null,
+            "filters": null,
+            "handle": "deleteRecord",
+            "key": "",
+            "kind": "ScalarHandle",
+            "name": "deletedId"
+          }
+        ],
+        "storageKey": null
+      }
+    ]
+  },
+  "params": {
+    "cacheID": "7ede42a17cf2d60398c7a5019de5f013",
+    "id": null,
+    "metadata": {},
+    "name": "RemoveMemberMutation",
+    "operationKind": "mutation",
+    "text": "mutation RemoveMemberMutation(\n  $input: ProfileRemoveMemberInput!\n) {\n  profileRemoveMember(input: $input) {\n    deletedId\n  }\n}\n"
   }
-})()
+};
+})();
 
-;(node as any).hash = '4426831487fa708c1e351d2c7608e1f8'
+(node as any).hash = "4426831487fa708c1e351d2c7608e1f8";
 
-export default node
+export default node;
diff --git a/packages/components/modules/content-feed/common/graphql/mutations/ContentPostCreate.ts b/packages/components/modules/content-feed/common/graphql/mutations/ContentPostCreate.ts
new file mode 100644
index 00000000..c9fbfd12
--- /dev/null
+++ b/packages/components/modules/content-feed/common/graphql/mutations/ContentPostCreate.ts
@@ -0,0 +1,26 @@
+import { graphql, useMutation } from 'react-relay'
+
+import { ContentPostCreateMutation } from '../../../../../__generated__/ContentPostCreateMutation.graphql'
+
+export const ContentPostCreateMutationQuery = graphql`
+  mutation ContentPostCreateMutation($input: ContentPostCreateInput!) {
+    contentPostCreate(input: $input) {
+      contentPost {
+        node {
+          id
+          content
+          user {
+            email
+          }
+        }
+      }
+      errors {
+        field
+        messages
+      }
+    }
+  }
+`
+
+export const useContentPostCreateMutation = () =>
+  useMutation<ContentPostCreateMutation>(ContentPostCreateMutationQuery)
diff --git a/packages/components/modules/content-feed/common/index.ts b/packages/components/modules/content-feed/common/index.ts
new file mode 100644
index 00000000..3f1ebff6
--- /dev/null
+++ b/packages/components/modules/content-feed/common/index.ts
@@ -0,0 +1,3 @@
+// exports common content-feed code
+
+export * from './graphql/mutations/ContentPostCreate'
diff --git a/packages/components/modules/content-feed/web/ContentFeed/index.tsx b/packages/components/modules/content-feed/web/ContentFeed/index.tsx
new file mode 100644
index 00000000..c7fadb77
--- /dev/null
+++ b/packages/components/modules/content-feed/web/ContentFeed/index.tsx
@@ -0,0 +1,38 @@
+'use client'
+
+import { FC, useCallback } from 'react'
+
+import { Button, Typography } from '@mui/material'
+import { useRouter } from 'next/navigation'
+
+import { HeaderContainer, RootContainer } from './styled'
+import { IContentFeedProps } from './types'
+
+const ContentFeed: FC<IContentFeedProps> = () => {
+  const router = useRouter()
+
+  const onNewPost = useCallback(() => {
+    router.push('/posts/new')
+  }, [router])
+
+  return (
+    <RootContainer>
+      <HeaderContainer>
+        <Typography component="h4" variant="h4">
+          Content Feed
+        </Typography>
+        <Button
+          variant="outlined"
+          color="inherit"
+          onClick={onNewPost}
+          disableRipple
+          sx={{ maxWidth: 'fit-content' }}
+        >
+          New Post
+        </Button>
+      </HeaderContainer>
+    </RootContainer>
+  )
+}
+
+export default ContentFeed
diff --git a/packages/components/modules/content-feed/web/ContentFeed/styled.tsx b/packages/components/modules/content-feed/web/ContentFeed/styled.tsx
new file mode 100644
index 00000000..c1cd7117
--- /dev/null
+++ b/packages/components/modules/content-feed/web/ContentFeed/styled.tsx
@@ -0,0 +1,24 @@
+import { Box, styled } from '@mui/material'
+
+export const RootContainer = styled(Box)(() => ({
+  display: 'flex',
+  width: '600px',
+  alignSelf: 'center',
+  flexDirection: 'column',
+}))
+
+export const HeaderContainer = styled(Box)(() => ({
+  display: 'flex',
+  width: '100%',
+  alignSelf: 'center',
+  flexDirection: 'row',
+  justifyContent: 'space-between',
+}))
+
+export const ButtonContainer = styled(Box)(() => ({
+  display: 'flex',
+  width: 'fit-content',
+  flexDirection: 'row',
+  justifyContent: 'space-between',
+  gap: '10px',
+}))
diff --git a/packages/components/modules/content-feed/web/ContentFeed/types.ts b/packages/components/modules/content-feed/web/ContentFeed/types.ts
new file mode 100644
index 00000000..d994f2ed
--- /dev/null
+++ b/packages/components/modules/content-feed/web/ContentFeed/types.ts
@@ -0,0 +1,3 @@
+export interface IContentFeedProps {
+
+}
\ No newline at end of file
diff --git a/packages/components/modules/content-feed/web/ContentFeedImage/index.tsx b/packages/components/modules/content-feed/web/ContentFeedImage/index.tsx
new file mode 100644
index 00000000..902feaa0
--- /dev/null
+++ b/packages/components/modules/content-feed/web/ContentFeedImage/index.tsx
@@ -0,0 +1,186 @@
+'use client'
+
+import { ChangeEventHandler, FC, useRef, useState } from 'react'
+
+import { useNotification } from '@baseapp-frontend/utils'
+
+import {AddRounded as AddRoundedIcon} from '@mui/icons-material'
+import {CloseRounded as CloseRoundedIcon} from '@mui/icons-material'
+import {InsertPhotoOutlined as InsertPhotoOutlinedIcon} from '@mui/icons-material'
+import { Box, Typography } from '@mui/material'
+import Image from 'next/image'
+import { Controller } from 'react-hook-form'
+
+import {
+  AddFileButton,
+  AddFileWrapper,
+  ContentFeedImageContainer,
+  DropFilesContainer,
+  MiniatureFileWrapper,
+  RemoveFileButton,
+} from './styled'
+import { IContentFeedImageProps } from './types'
+
+const ContentFeedImage: FC<IContentFeedImageProps> = ({ form }) => {
+  const [selectedUploadedFile, setSelectedUploadedFiles] = useState<File>()
+  const [isDragging, setIsDragging] = useState(false)
+
+  const DEFAULT_IMAGE_FORMATS = 'image/png, image/gif, image/jpeg'
+  const DEFAULT_IMAGE_MAX_SIZE = 10 * 1024 * 1024
+
+  const fileRef = useRef<HTMLInputElement>(null)
+  const { sendToast } = useNotification()
+
+  const { control, watch } = form
+
+  const formFiles: File[] = watch('images')
+
+  const handleRemoveFile = (fileIndex: number) => {
+    const updatedFiles = formFiles?.filter((_, index) => index !== fileIndex)
+    form.setValue('images', updatedFiles as never, { shouldValidate: true })
+  }
+
+  const handleDragEnter = (e: React.DragEvent) => {
+    e.preventDefault()
+    e.stopPropagation()
+    setIsDragging(true)
+  }
+
+  const handleDragOver = (e: React.DragEvent) => {
+    e.preventDefault()
+    e.stopPropagation()
+  }
+
+  const handleDragLeave = (e: React.DragEvent) => {
+    e.preventDefault()
+    e.stopPropagation()
+    if (!e.currentTarget.contains(e.relatedTarget as Node)) {
+      setIsDragging(false)
+    }
+  }
+
+  const handleDrop = (e: React.DragEvent) => {
+    e.preventDefault()
+    e.stopPropagation()
+    setIsDragging(false)
+
+    const { files } = e.dataTransfer
+    if (files.length) {
+      form.setValue('images', [...(formFiles as never[]), ...(files as unknown as never[])])
+    }
+  }
+
+  return (
+    <Box
+      onDragEnter={handleDragEnter}
+      onDragOver={handleDragOver}
+      onDragLeave={handleDragLeave}
+      onDrop={handleDrop}
+    >
+      {selectedUploadedFile && !isDragging && (
+        <Box width="100%" position="relative" height="500px" mb="24px">
+          <Image
+            src={URL.createObjectURL(selectedUploadedFile)}
+            alt={selectedUploadedFile.name}
+            fill
+            style={{ objectFit: 'cover', borderRadius: '8px', height: '100%', width: '100%' }}
+            onLoad={() => URL.revokeObjectURL(URL.createObjectURL(selectedUploadedFile))}
+          />
+        </Box>
+      )}
+
+      {(isDragging || !formFiles?.length) && (
+        <DropFilesContainer onClick={() => fileRef?.current?.click()}>
+          <InsertPhotoOutlinedIcon
+            sx={{ width: '36px', height: '36px', marginBottom: '4px', color: 'text.secondary' }}
+          />
+          <Typography variant="body2" sx={{ color: 'text.secondary' }}>
+            Click to browse or drag and drop images and videos.
+          </Typography>
+          <Typography variant="caption" sx={{ color: 'text.secondary' }}>
+            Max. File Size: 15MB
+          </Typography>
+        </DropFilesContainer>
+      )}
+
+      <ContentFeedImageContainer gap={0.75}>
+        {!!formFiles?.length && (
+          <AddFileWrapper>
+            <AddFileButton color="inherit" onClick={() => fileRef?.current?.click()} disableRipple>
+              <AddRoundedIcon sx={{ width: '28px', height: '28px', color: 'text.primary' }} />
+            </AddFileButton>
+          </AddFileWrapper>
+        )}
+        <Controller
+          name="images"
+          control={control}
+          render={({ field }) => {
+            const handleOnChange: ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement> = (
+              event,
+            ) => {
+              const { files } = event.target as HTMLInputElement
+
+              if (files) {
+                // Convert FileList to an array of File objects
+                const filesArray = Array.from(files)
+
+                // Filter and process valid files
+                const validFiles = filesArray.filter((file) => {
+                  if (file.size > DEFAULT_IMAGE_MAX_SIZE) {
+                    // Notify the user if the file is too large
+                    sendToast(
+                      `This file is too large (max ${DEFAULT_IMAGE_MAX_SIZE / 1024 / 1024}MB).`,
+                      {
+                        type: 'error',
+                      },
+                    )
+                    return false // Exclude this file
+                  }
+                  return true // Include this file
+                })
+
+                // Update the form field with the valid files
+                if (validFiles.length > 0) {
+                  field.onChange([...formFiles, ...validFiles])
+                }
+              }
+            }
+            return (
+              <input
+                onChange={handleOnChange}
+                type="file"
+                multiple
+                ref={fileRef}
+                accept={DEFAULT_IMAGE_FORMATS}
+                style={{ display: 'none' }}
+              />
+            )
+          }}
+        />
+        {formFiles?.map((file, index) => (
+          <MiniatureFileWrapper key={`${file.name}`}>
+            <button
+              style={{ height: '100%' }}
+              type="button"
+              onClick={() => setSelectedUploadedFiles(file)}
+            >
+              <Image
+                src={URL.createObjectURL(file)}
+                alt={file.name}
+                width={72}
+                height={72}
+                style={{ objectFit: 'cover', borderRadius: '8px', height: '100%' }}
+                onLoad={() => URL.revokeObjectURL(URL.createObjectURL(file))}
+              />
+            </button>
+            <RemoveFileButton onClick={() => handleRemoveFile(index)}>
+              <CloseRoundedIcon sx={{ color: 'white', width: '20px', height: '20px' }} />
+            </RemoveFileButton>
+          </MiniatureFileWrapper>
+        ))}
+      </ContentFeedImageContainer>
+    </Box>
+  )
+}
+
+export default ContentFeedImage
diff --git a/packages/components/modules/content-feed/web/ContentFeedImage/styled.tsx b/packages/components/modules/content-feed/web/ContentFeedImage/styled.tsx
new file mode 100644
index 00000000..82805e8d
--- /dev/null
+++ b/packages/components/modules/content-feed/web/ContentFeedImage/styled.tsx
@@ -0,0 +1,83 @@
+import { Box, Button, styled } from '@mui/material'
+
+export const ContentFeedImageContainer = styled(Box)(({ theme }) => ({
+  display: 'flex',
+  marginBottom: '16px',
+  overflow: 'auto',
+  paddingBottom: '6px',
+  '::-webkit-scrollbar': {
+    height: '6px',
+  },
+  '::-webkit-scrollbar-track': {
+    boxShadow: `inset 0 0 1px ${theme.palette.grey[400]}`,
+    borderRadius: '10px',
+  },
+  '::-webkit-scrollbar-thumb': {
+    background: theme.palette.grey[400],
+    borderRadius: '10px',
+  },
+  '::-webkit-scrollbar-thumb:hover': {
+    background: theme.palette.grey[600],
+  },
+}))
+
+export const AddFileButton = styled(Button)(({ theme }) => ({
+  width: '72px',
+  height: '72px',
+  backgroundColor: theme.palette.grey[200],
+  borderRadius: '8px',
+  '&:hover': {
+    backgroundColor: theme.palette.grey[300],
+  },
+}))
+
+export const AddFileWrapper = styled(Box)(({ theme }) => ({
+  border: `2px dashed ${theme.palette.grey[200]}`,
+  borderRadius: '12px',
+  padding: '4px',
+  display: 'inline-block',
+  flexShrink: 0,
+}))
+
+export const MiniatureFileWrapper = styled(Box)(({ theme }) => ({
+  position: 'relative',
+  flexShrink: 0,
+  width: '80px',
+  height: '80px',
+  border: `2px solid ${theme.palette.grey[200]}`,
+  borderRadius: '12px',
+  padding: '4px',
+  display: 'inline-block',
+  '&:hover': {
+    border: `2px solid black`,
+  },
+}))
+
+export const RemoveFileButton = styled('button')(({ theme }) => ({
+  position: 'absolute',
+  top: '4px',
+  right: '4px',
+  width: '28px',
+  height: '28px',
+  display: 'flex',
+  alignItems: 'center',
+  justifyContent: 'center',
+  borderRadius: '0 6px 0 6px',
+  backgroundColor: theme.palette.grey[800],
+  '&:hover': {
+    backgroundColor: theme.palette.grey[800],
+  },
+}))
+
+export const DropFilesContainer = styled(Box)(({ theme }) => ({
+  display: 'flex',
+  justifyContent: 'center',
+  alignItems: 'center',
+  flexDirection: 'column',
+  border: `1px dashed ${theme.palette.grey[400]}`,
+  borderImageSlice: 1,
+  width: '100%',
+  height: '144px',
+  borderRadius: '8px',
+  marginBottom: '8px',
+}))
diff --git a/packages/components/modules/content-feed/web/ContentFeedImage/types.ts b/packages/components/modules/content-feed/web/ContentFeedImage/types.ts
new file mode 100644
index 00000000..20daf608
--- /dev/null
+++ b/packages/components/modules/content-feed/web/ContentFeedImage/types.ts
@@ -0,0 +1,12 @@
+import { UseFormReturn } from "react-hook-form"
+
+export interface IContentFeedImageProps {
+  form: UseFormReturn<
+    {
+      content: string
+      images: never[]
+    },
+    any,
+    undefined
+  >
+}
\ No newline at end of file
diff --git a/packages/components/modules/content-feed/web/NewContentPost/constants.ts b/packages/components/modules/content-feed/web/NewContentPost/constants.ts
new file mode 100644
index 00000000..ff58c0f9
--- /dev/null
+++ b/packages/components/modules/content-feed/web/NewContentPost/constants.ts
@@ -0,0 +1,13 @@
+import { z } from 'zod'
+
+import { ContentPostCreateForm } from './types'
+
+export const DEFAULT_CONTENT_POST_CREATE_FORM_VALUES = {
+  content: '',
+  images: [],
+} satisfies ContentPostCreateForm
+
+export const CONTENT_POST_CREATE_FORM_VALIDATION = z.object({
+  content: z.string(),
+  images: z.array(z.instanceof(File)),
+} satisfies Record<keyof ContentPostCreateForm, unknown>)
diff --git a/packages/components/modules/content-feed/web/NewContentPost/index.tsx b/packages/components/modules/content-feed/web/NewContentPost/index.tsx
new file mode 100644
index 00000000..b3509561
--- /dev/null
+++ b/packages/components/modules/content-feed/web/NewContentPost/index.tsx
@@ -0,0 +1,115 @@
+'use client'
+
+import { FC, useCallback } from 'react'
+
+import { TextField } from '@baseapp-frontend/design-system/components/web/inputs'
+import { setFormRelayErrors, useNotification } from '@baseapp-frontend/utils'
+
+import { zodResolver } from '@hookform/resolvers/zod'
+import LoadingButton from '@mui/lab/LoadingButton'
+import { Box, Button, Typography } from '@mui/material'
+import { useRouter } from 'next/navigation'
+import { useForm } from 'react-hook-form'
+
+import { useContentPostCreateMutation } from '../../common/graphql/mutations/ContentPostCreate'
+import ContentFeedImage from '../ContentFeedImage'
+import {
+  CONTENT_POST_CREATE_FORM_VALIDATION,
+  DEFAULT_CONTENT_POST_CREATE_FORM_VALUES,
+} from './constants'
+import { ButtonContainer, HeaderContainer, RootContainer } from './styled'
+import { ContentPostCreateForm, INewContentPostProps, UploadableContentPostFiles } from './types'
+
+const NewContentPost: FC<INewContentPostProps> = () => {
+  const router = useRouter()
+  const { sendToast } = useNotification()
+  const [commitMutation, isMutationInFlight] = useContentPostCreateMutation()
+
+  const formReturn = useForm({
+    defaultValues: DEFAULT_CONTENT_POST_CREATE_FORM_VALUES,
+    resolver: zodResolver(CONTENT_POST_CREATE_FORM_VALIDATION),
+    mode: 'onBlur',
+  })
+
+  const {
+    control,
+    handleSubmit,
+    reset,
+    formState: { isDirty, isValid },
+  } = formReturn
+
+  const onSubmit = handleSubmit((data: ContentPostCreateForm) => {
+    const uploadables: UploadableContentPostFiles = {}
+    const imageKeys: string[] = []
+
+    if (data.images) {
+      data.images.forEach((image, index) => {
+        uploadables[`images.${index}`] = image as File
+      })
+    }
+
+    commitMutation({
+      variables: {
+        input: {
+          content: data.content,
+         
+        },
+      },
+      uploadables,
+      onCompleted(response) {
+        const errors = response.contentPostCreate?.errors
+        if (errors) {
+          sendToast('Something went wrong', { type: 'error' })
+          setFormRelayErrors(formReturn, errors)
+        } else {
+          reset({ content: '' })
+          sendToast('Post Created Successfully', { type: 'success' })
+          router.push(`/posts/${response.contentPostCreate?.contentPost?.node?.id}`)
+        }
+      },
+    })
+  })
+
+  const onCancel = useCallback(() => {
+    router.push('/posts')
+  }, [router])
+
+  return (
+    <RootContainer>
+      <form onSubmit={onSubmit}>
+        <HeaderContainer>
+          <Typography component="h4" variant="h4">
+            New Post
+          </Typography>
+          <ButtonContainer>
+            <Button variant="outlined" color="inherit" onClick={onCancel} disableRipple>
+              Cancel
+            </Button>
+            <LoadingButton
+              color="inherit"
+              type="submit"
+              loading={isMutationInFlight}
+              disabled={!isDirty || !isValid || isMutationInFlight}
+              sx={{ maxWidth: 'fit-content', justifySelf: 'end' }}
+            >
+              Publish
+            </LoadingButton>
+          </ButtonContainer>
+        </HeaderContainer>
+        <ContentFeedImage form={formReturn} />
+        <Box>
+          <TextField
+            name="content"
+            type="text"
+            placeholder="What is on your mind?"
+            multiline
+            rows={4}
+            control={control}
+          />
+        </Box>
+      </form>
+    </RootContainer>
+  )
+}
+
+export default NewContentPost
diff --git a/packages/components/modules/content-feed/web/NewContentPost/styled.tsx b/packages/components/modules/content-feed/web/NewContentPost/styled.tsx
new file mode 100644
index 00000000..ac1938a2
--- /dev/null
+++ b/packages/components/modules/content-feed/web/NewContentPost/styled.tsx
@@ -0,0 +1,24 @@
+import { Box, styled } from '@mui/material'
+
+export const RootContainer = styled(Box)(() => ({
+  dispaly: 'flex',
+  width: '600px',
+  alignSelf: 'center',
+  flexDirection: 'column',
+}))
+
+export const HeaderContainer = styled(Box)(() => ({
+  display: 'flex',
+  width: '100%',
+  alignSelf: 'center',
+  flexDirection: 'row',
+  justifyContent: 'space-between',
+  marginBottom: '32px',
+}))
+
+export const ButtonContainer = styled(Box)(() => ({
+  display: 'flex',
+  width: 'fit-content',
+  flexDirection: 'row',
+  gap: '10px',
+}))
diff --git a/packages/components/modules/content-feed/web/NewContentPost/types.ts b/packages/components/modules/content-feed/web/NewContentPost/types.ts
new file mode 100644
index 00000000..29511f2c
--- /dev/null
+++ b/packages/components/modules/content-feed/web/NewContentPost/types.ts
@@ -0,0 +1,10 @@
+export interface ContentPostCreateForm {
+  content: string
+  images?: File[] | Blob[]
+}
+
+export type UploadableContentPostFiles = {
+  [key: `images.${number}`]: File | Blob
+}
+
+export interface INewContentPostProps {}
\ No newline at end of file
diff --git a/packages/components/modules/content-feed/web/index.ts b/packages/components/modules/content-feed/web/index.ts
new file mode 100644
index 00000000..8cace7dc
--- /dev/null
+++ b/packages/components/modules/content-feed/web/index.ts
@@ -0,0 +1,10 @@
+// exports content feed components
+
+export { default as ContentFeed } from './ContentFeed'
+export type * from './ContentFeed/types'
+
+export { default as ContentFeedImage } from './ContentFeedImage'
+export type * from './ContentFeedImage/types'
+
+export { default as NewContentPost } from './NewContentPost'
+export type * from './NewContentPost/types'
diff --git a/packages/components/package.json b/packages/components/package.json
index 037c197d..9c0626ad 100644
--- a/packages/components/package.json
+++ b/packages/components/package.json
@@ -60,6 +60,11 @@
       "types": "./dist/profiles/*/index.d.ts",
       "import": "./dist/profiles/*/index.mjs",
       "require": "./dist/profiles/*/index.js"
+    },
+    "./content-feed/*": {
+      "types": "./dist/content-feed/*/index.d.ts",
+      "import": "./dist/content-feed/*/index.mjs",
+      "require": "./dist/content-feed/*/index.js"
     }
   },
   "files": [
diff --git a/packages/components/schema.graphql b/packages/components/schema.graphql
index ec5740fc..78ba9f7d 100644
--- a/packages/components/schema.graphql
+++ b/packages/components/schema.graphql
@@ -12,7 +12,6 @@ type ActivityLog implements Node {
   user: User
   ipAddress: String
   verb: String
-  diff: GenericScalar
   visibility: VisibilityTypes
   url: String
   pk: Int!
@@ -202,6 +201,7 @@ type ChatRoomOnMessagesCountUpdate {
 type ChatRoomOnRoomUpdate {
   room: ChatRoomEdge
   removedParticipants: [ChatRoomParticipant]
+  addedParticipants: [ChatRoomParticipant]
 }
 
 type ChatRoomParticipant implements Node {
@@ -325,6 +325,7 @@ type ChatRoomUpdatePayload {
   _debug: DjangoDebug
   room: ChatRoomEdge
   removedParticipants: [ChatRoomParticipant]
+  addedParticipants: [ChatRoomParticipant]
   clientMutationId: String
 }
 
@@ -480,6 +481,78 @@ type CommentUpdatePayload {
   clientMutationId: String
 }
 
+type ContentPost implements Node {
+  user: User!
+  profile: Profile
+  content: String!
+  images(offset: Int, before: String, after: String, first: Int, last: Int, id: ID): ContentPostImageConnection
+
+  """The ID of the object"""
+  id: ID!
+  pk: Int!
+}
+
+type ContentPostConnection {
+  """Pagination data for this connection."""
+  pageInfo: PageInfo!
+
+  """Contains the nodes in this connection."""
+  edges: [ContentPostEdge]!
+  totalCount: Int
+  edgeCount: Int
+}
+
+input ContentPostCreateInput {
+  content: String!
+  images: [String]
+  clientMutationId: String
+}
+
+type ContentPostCreatePayload {
+  """May contain more than one error for same field."""
+  errors: [ErrorType]
+  _debug: DjangoDebug
+  contentPost: ContentPostEdge
+  clientMutationId: String
+}
+
+"""A Relay edge containing a `ContentPost` and its cursor."""
+type ContentPostEdge {
+  """The item at the end of the edge"""
+  node: ContentPost
+
+  """A cursor for use in pagination"""
+  cursor: String!
+}
+
+type ContentPostImage implements Node {
+  image: String
+  post: ContentPost!
+
+  """The ID of the object"""
+  id: ID!
+  pk: Int!
+}
+
+type ContentPostImageConnection {
+  """Pagination data for this connection."""
+  pageInfo: PageInfo!
+
+  """Contains the nodes in this connection."""
+  edges: [ContentPostImageEdge]!
+  totalCount: Int
+  edgeCount: Int
+}
+
+"""A Relay edge containing a `ContentPostImage` and its cursor."""
+type ContentPostImageEdge {
+  """The item at the end of the edge"""
+  node: ContentPostImage
+
+  """A cursor for use in pagination"""
+  cursor: String!
+}
+
 """
 The `Date` scalar type represents a Date
 value as specified by
@@ -497,6 +570,19 @@ scalar DateTime
 """The `Decimal` scalar type represents a python Decimal."""
 scalar Decimal
 
+input DeleteNodeInput {
+  id: ID!
+  clientMutationId: String
+}
+
+type DeleteNodePayload {
+  """May contain more than one error for same field."""
+  errors: [ErrorType]
+  _debug: DjangoDebug
+  deletedID: ID!
+  clientMutationId: String
+}
+
 """Debugging information for the current query."""
 type DjangoDebug {
   """Executed SQL queries for this API query."""
@@ -726,12 +812,14 @@ type Mutation {
   notificationsMarkAsRead(input: NotificationsMarkAsReadInput!): NotificationsMarkAsReadPayload
   notificationsMarkAllAsRead(input: NotificationsMarkAllAsReadInput!): NotificationsMarkAllAsReadPayload
   notificationSettingToggle(input: NotificationSettingToggleInput!): NotificationSettingTogglePayload
+  contentPostCreate(input: ContentPostCreateInput!): ContentPostCreatePayload
   commentCreate(input: CommentCreateInput!): CommentCreatePayload
   commentUpdate(input: CommentUpdateInput!): CommentUpdatePayload
   commentPin(input: CommentPinInput!): CommentPinPayload
   commentDelete(input: CommentDeleteInput!): CommentDeletePayload
   pageCreate(input: PageCreateInput!): PageCreatePayload
   pageEdit(input: PageEditInput!): PageEditPayload
+  pageDelete(input: DeleteNodeInput!): DeleteNodePayload
   profileCreate(input: ProfileCreateInput!): ProfileCreatePayload
   profileUpdate(input: ProfileUpdateInput!): ProfileUpdatePayload
   profileDelete(input: ProfileDeleteInput!): ProfileDeletePayload
@@ -1146,20 +1234,20 @@ type Profile implements Node & PermissionsInterface & PageInterface & FollowsInt
   status: ProfilesProfileStatusChoices!
   owner: User!
   comments(
-    offset: Int
-    before: String
-    after: String
     first: Int
     last: Int
+    offset: Int
+    after: String
+    before: String
     q: String
 
     """Ordering"""
     orderBy: String
   ): CommentConnection!
-  reactions(offset: Int, before: String, after: String, first: Int, last: Int, id: ID): ReactionConnection!
-  ratings(offset: Int, before: String, after: String, first: Int, last: Int): RateConnection!
+  reactions(first: Int, last: Int, offset: Int, after: String, before: String, id: ID): ReactionConnection!
+  ratings(first: Int, last: Int, offset: Int, after: String, before: String): RateConnection!
   user: User
-  activitylogSet(offset: Int, before: String, after: String, first: Int, last: Int, createdFrom: Date, createdTo: Date, userPk: Decimal, profilePk: Decimal, userName: String): ActivityLogConnection!
+  activitylogSet(first: Int, last: Int, offset: Int, after: String, before: String, createdFrom: Date, createdTo: Date, userPk: Decimal, profilePk: Decimal, userName: String): ActivityLogConnection!
   members(
     offset: Int
     before: String
@@ -1172,11 +1260,12 @@ type Profile implements Node & PermissionsInterface & PageInterface & FollowsInt
     orderBy: String
     q: String
   ): ProfileUserRoleConnection
-  chatroomparticipantSet(offset: Int, before: String, after: String, first: Int, last: Int, profile_TargetContentType: ID): ChatRoomParticipantConnection!
-  unreadmessagecountSet(offset: Int, before: String, after: String, first: Int, last: Int): UnreadMessageCountConnection!
-  linkedAsContentActorSet(offset: Int, before: String, after: String, first: Int, last: Int, verb: Verbs): MessageConnection!
-  linkedAsContentTargetSet(offset: Int, before: String, after: String, first: Int, last: Int, verb: Verbs): MessageConnection!
-  messageSet(offset: Int, before: String, after: String, first: Int, last: Int, verb: Verbs): MessageConnection!
+  chatroomparticipantSet(first: Int, last: Int, offset: Int, after: String, before: String, profile_TargetContentType: ID): ChatRoomParticipantConnection!
+  unreadmessagecountSet(first: Int, last: Int, offset: Int, after: String, before: String): UnreadMessageCountConnection!
+  linkedAsContentActorSet(first: Int, last: Int, offset: Int, after: String, before: String, verb: Verbs): MessageConnection!
+  linkedAsContentTargetSet(first: Int, last: Int, offset: Int, after: String, before: String, verb: Verbs): MessageConnection!
+  messageSet(first: Int, last: Int, offset: Int, after: String, before: String, verb: Verbs): MessageConnection!
+  contentPosts(first: Int, last: Int, offset: Int, after: String, before: String): ContentPostConnection!
   following(offset: Int, before: String, after: String, first: Int, last: Int, targetIsFollowingBack: Boolean): FollowConnection
   followers(offset: Int, before: String, after: String, first: Int, last: Int, targetIsFollowingBack: Boolean): FollowConnection
   blocking(offset: Int, before: String, after: String, first: Int, last: Int): BlockConnection
@@ -1397,6 +1486,7 @@ type Query {
     """The ID of the object"""
     id: ID!
   ): Report
+  contentPosts(offset: Int, before: String, after: String, first: Int, last: Int): ContentPostConnection
   comment(
     """The ID of the object"""
     id: ID!
@@ -1744,19 +1834,19 @@ type User implements Node & PermissionsInterface & NotificationsInterface & Page
   """
   isActive: Boolean!
   isStaff: Boolean
-  reactions(offset: Int, before: String, after: String, first: Int, last: Int, id: ID): ReactionConnection!
+  reactions(first: Int, last: Int, offset: Int, after: String, before: String, id: ID): ReactionConnection!
   comments(
-    offset: Int
-    before: String
-    after: String
     first: Int
     last: Int
+    offset: Int
+    after: String
+    before: String
     q: String
 
     """Ordering"""
     orderBy: String
   ): CommentConnection!
-  pages(offset: Int, before: String, after: String, first: Int, last: Int, status: PageStatus): PageConnection!
+  pages(first: Int, last: Int, offset: Int, after: String, before: String, status: PageStatus): PageConnection!
 
   """The ID of the object"""
   id: ID!
@@ -1794,7 +1884,6 @@ type User implements Node & PermissionsInterface & NotificationsInterface & Page
   activityLogs(visibility: VisibilityTypes, first: Int = 10, offset: Int, before: String, after: String, last: Int, createdFrom: Date, createdTo: Date, userPk: Decimal, profilePk: Decimal, userName: String): ActivityLogConnection
   isAuthenticated: Boolean
   fullName: String
-  shortName: String
   avatar(width: Int!, height: Int!): File
 }