diff --git a/web/components/chat/ChatModerationActionMenu.tsx b/web/components/chat/ChatModerationActionMenu.tsx
new file mode 100644
index 000000000..a8877c0d5
--- /dev/null
+++ b/web/components/chat/ChatModerationActionMenu.tsx
@@ -0,0 +1,6 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+interface Props {}
+
+export default function ChatModerationActionMenu(props: Props) {
+ return
Moderation popup menu goes here
;
+}
diff --git a/web/components/chat/ChatModerationDetailsModal.tsx b/web/components/chat/ChatModerationDetailsModal.tsx
new file mode 100644
index 000000000..d5fda17c9
--- /dev/null
+++ b/web/components/chat/ChatModerationDetailsModal.tsx
@@ -0,0 +1,6 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+interface Props {}
+
+export default function ChatModerationDetailsModal(props: Props) {
+ return Moderation details modal goes here
;
+}
diff --git a/web/stories/ChatModerationActionMenu.stories.tsx b/web/stories/ChatModerationActionMenu.stories.tsx
new file mode 100644
index 000000000..9061d76f2
--- /dev/null
+++ b/web/stories/ChatModerationActionMenu.stories.tsx
@@ -0,0 +1,27 @@
+import React from 'react';
+import { ComponentStory, ComponentMeta } from '@storybook/react';
+import ChatModerationActionMenu from '../components/chat/ChatModerationActionMenu';
+
+export default {
+ title: 'owncast/Chat/Moderation menu',
+ component: ChatModerationActionMenu,
+ parameters: {
+ docs: {
+ description: {
+ component: `This should be a popup that is activated from a user's chat message. It should have actions to:
+- Remove single message
+- Ban user completely
+- Open modal to see user details
+ `,
+ },
+ },
+ },
+} as ComponentMeta;
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const Template: ComponentStory = args => (
+
+);
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+export const Basic = Template.bind({});
diff --git a/web/stories/ChatModerationDetailsModal.stories.tsx b/web/stories/ChatModerationDetailsModal.stories.tsx
new file mode 100644
index 000000000..9150efa6b
--- /dev/null
+++ b/web/stories/ChatModerationDetailsModal.stories.tsx
@@ -0,0 +1,27 @@
+import React from 'react';
+import { ComponentStory, ComponentMeta } from '@storybook/react';
+import ChatModerationDetailsModal from '../components/chat/ChatModerationDetailsModal';
+
+export default {
+ title: 'owncast/Chat/Moderation modal',
+ component: ChatModerationDetailsModal,
+ parameters: {
+ docs: {
+ description: {
+ component: `This should be a modal that gives the moderator more details about the user such as:
+- When the user was created
+- Other names they've used
+- If they're authenticated, and using what method (IndieAuth, FediAuth)
+`,
+ },
+ },
+ },
+} as ComponentMeta;
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const Template: ComponentStory = args => (
+
+);
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+export const Basic = Template.bind({});
diff --git a/web/stories/ChatModerationNotification.stories.tsx b/web/stories/ChatModerationNotification.stories.tsx
deleted file mode 100644
index 0848a5b69..000000000
--- a/web/stories/ChatModerationNotification.stories.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { ComponentStory, ComponentMeta } from '@storybook/react';
-import ChatModeratorNotification from '../components/chat/ChatModeratorNotification';
-
-export default {
- title: 'owncast/Chat/Messages/Moderator notification',
- component: ChatModeratorNotification,
- parameters: {},
-} as ComponentMeta;
-
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-const Template: ComponentStory = args => (
-
-);
-
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-export const Basic = Template.bind({});