diff --git a/web/components/Follower.tsx b/web/components/Follower.tsx
deleted file mode 100644
index ff9ec1b38..000000000
--- a/web/components/Follower.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Avatar, Comment } from 'antd';
-import React from 'react';
-import { Follower } from '../interfaces/follower';
-
-interface Props {
- follower: Follower;
-}
-
-export default function SingleFollower(props: Props) {
- const { follower } = props;
-
- return (
- }
- content={follower.name}
- />
- );
-}
diff --git a/web/components/FollowersCollection.tsx b/web/components/FollowersCollection.tsx
deleted file mode 100644
index f0751b5e8..000000000
--- a/web/components/FollowersCollection.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { Pagination } from 'antd';
-import { Follower } from '../interfaces/follower';
-import SingleFollower from './Follower';
-
-interface Props {
- total: number;
- followers: Follower[];
-}
-
-export default function FollowerCollection(props: Props) {
- const ITEMS_PER_PAGE = 24;
-
- const { followers, total } = props;
- const pages = Math.ceil(total / ITEMS_PER_PAGE);
-
- return (
-
- {followers.map(follower => (
-
- ))}
-
-
- );
-}
diff --git a/web/components/ui/Content/Content.tsx b/web/components/ui/Content/Content.tsx
index f55fc71e0..1f6dd359d 100644
--- a/web/components/ui/Content/Content.tsx
+++ b/web/components/ui/Content/Content.tsx
@@ -18,7 +18,7 @@ import {
import { ClientConfig } from '../../../interfaces/client-config.model';
import CustomPageContent from '../CustomPageContent/CustomPageContent';
import OwncastPlayer from '../../video/OwncastPlayer';
-import FollowerCollection from '../../FollowersCollection';
+import FollowerCollection from '../Followers/FollowersCollection';
import s from './Content.module.scss';
import Sidebar from '../Sidebar';
import Footer from '../Footer';
diff --git a/web/components/ui/Followers/Follower.tsx b/web/components/ui/Followers/Follower.tsx
new file mode 100644
index 000000000..362593975
--- /dev/null
+++ b/web/components/ui/Followers/Follower.tsx
@@ -0,0 +1,30 @@
+import { Avatar, Col, Row } from 'antd';
+import React from 'react';
+import { Follower } from '../../../interfaces/follower';
+import s from './Followers.module.scss';
+
+interface Props {
+ follower: Follower;
+}
+
+export default function SingleFollower(props: Props) {
+ const { follower } = props;
+
+ return (
+
+ );
+}
diff --git a/web/components/ui/Followers/Followers.module.scss b/web/components/ui/Followers/Followers.module.scss
new file mode 100644
index 000000000..08e6f32ac
--- /dev/null
+++ b/web/components/ui/Followers/Followers.module.scss
@@ -0,0 +1,37 @@
+.follower {
+ border-color: rgba(0, 0, 0, 0.3);
+ border-width: 1px;
+ border-style: solid;
+ padding: 10px 10px;
+ border-radius: 15px;
+ height: 75px;
+ width: 250px;
+ font-size: 0.8rem;
+ overflow: hidden;
+
+ &:hover {
+ border-color: var(--theme-text-link);
+ }
+
+ .avatar {
+ height: 50px;
+ width: 50px;
+ border-color: rgba(0, 0, 0, 0.3);
+ border-width: 1px;
+ border-style: solid;
+ }
+
+ .account {
+ color: var(--theme-text-secondary);
+ text-overflow: ellipsis;
+ }
+
+ .placeholder {
+ width: 100%;
+ height: 100%;
+ }
+}
+
+.followers {
+ width: 100%;
+}
diff --git a/web/components/ui/Followers/FollowersCollection.tsx b/web/components/ui/Followers/FollowersCollection.tsx
new file mode 100644
index 000000000..6882caacd
--- /dev/null
+++ b/web/components/ui/Followers/FollowersCollection.tsx
@@ -0,0 +1,38 @@
+import { Col, Pagination, Row } from 'antd';
+import { Follower } from '../../../interfaces/follower';
+import SingleFollower from './Follower';
+import s from './Followers.module.scss';
+
+interface Props {
+ total: number;
+ followers: Follower[];
+}
+
+export default function FollowerCollection(props: Props) {
+ const ITEMS_PER_PAGE = 24;
+
+ const { followers, total } = props;
+ const pages = Math.ceil(total / ITEMS_PER_PAGE);
+
+ const noFollowers = (
+ A message explaining how to follow goes here since there are no followers.
+ );
+
+ if (followers.length === 0) {
+ return noFollowers;
+ }
+
+ return (
+
+
+ {followers.map(follower => (
+
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/web/stories/Follower.stories.tsx b/web/stories/Follower.stories.tsx
index 92466b401..236b2129d 100644
--- a/web/stories/Follower.stories.tsx
+++ b/web/stories/Follower.stories.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import { ComponentStory, ComponentMeta } from '@storybook/react';
-import SingleFollower from '../components/Follower';
+import SingleFollower from '../components/ui/Followers/Follower';
import SingleFollowerMock from './assets/mocks/single-follower.png';
export default {
diff --git a/web/stories/Followercollection.stories.tsx b/web/stories/Followercollection.stories.tsx
index dcbe48298..c07184f84 100644
--- a/web/stories/Followercollection.stories.tsx
+++ b/web/stories/Followercollection.stories.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import { ComponentStory, ComponentMeta } from '@storybook/react';
-import FollowerCollection from '../components/FollowersCollection';
+import FollowerCollection from '../components/ui/Followers/FollowersCollection';
export default {
title: 'owncast/Components/Followers/Followers collection',
@@ -12,6 +12,9 @@ const Template: ComponentStory = args => (
);
+export const NoFollowers = Template.bind({});
+NoFollowers.args = { followers: [] };
+
export const Example = Template.bind({});
Example.args = {
followers: [