diff --git a/web/stories/Chat.stories.mdx b/web/stories/Chat.stories.mdx
new file mode 100644
index 000000000..89e213d31
--- /dev/null
+++ b/web/stories/Chat.stories.mdx
@@ -0,0 +1,76 @@
+import { Meta } from '@storybook/addon-docs';
+import { Typography } from 'antd';
+import UserChatMessage from '../components/chat/ChatUserMessage';
+import { ChatMessage } from '../interfaces/chat-message.model';
+
+
+
+Owncast Chat
+
+The Owncast chat is a websocket service that is authenticated with an access token.
+
+The chat user interface has a handful of different states.
+
+# App states
+
+## Offline (stream is not live)
+
+- The entire chat UI is hidden.
+
+## Online (stream is live)
+
+- The chat interface is visible.
+
+### Online + chat is disconnected
+
+- Show a loading state within the chat component.
+- Disable the text input box.
+
+## Banned from chat
+
+- The entire chat UI is hidden.
+
+
+## Stream ended
+
+- Chat is visible for the next 5 minutes to allow viewers to say goodbye.
+- Also allows for chat to stay active in case the streamer wants to quickly
+restart their stream or there's a network blip.
+
+## Chat Disconnected
+
+If chat server is not available (websocket disconnects/not available for some reason)
+then the chat input box should become disabled and placeholder should say chat is not availble.
+
+# Message types
+
+## User chat message
+
+The message that is displayed when a chat user sends a message.
+
+## System message
+
+A message sent from the server. Is commonly used for
+
+- Welcome message.
+- An external script or integration sending a message on behalf of the server.
+
+## Action message
+
+A message saying an action has taken place. Is commonly used for
+
+- User joined.
+- User was banned.
+- User changed name.
+- Stream is starting.
+- Stream is ending.
+- An external script or integration sending an action.
+
+## Federated action message
+
+A message stating that somebody on the Fediverse performed an action.
+It is used for:
+
+- User "liked" that the steam went live.
+- User followed the instance.
+- User shared the instance to their followers.
\ No newline at end of file