diff --git a/app/javascript/flavours/glitch/components/account_header/banners.tsx b/app/javascript/flavours/glitch/components/account_header/banners.tsx
new file mode 100644
index 0000000000..13e51b096e
--- /dev/null
+++ b/app/javascript/flavours/glitch/components/account_header/banners.tsx
@@ -0,0 +1,145 @@
+import { useCallback } from 'react';
+import type { FC, ReactElement, ReactNode } from 'react';
+
+import { FormattedMessage } from 'react-intl';
+
+import {
+ authorizeFollowRequest,
+ rejectFollowRequest,
+} from '@/flavours/glitch/actions/accounts';
+import { useAccountVisibility } from '@/flavours/glitch/hooks/useAccountVisibility';
+import { useRelationship } from '@/flavours/glitch/hooks/useRelationship';
+import type { Account } from '@/flavours/glitch/models/account';
+import { useAppDispatch, useAppSelector } from '@/flavours/glitch/store';
+import CheckIcon from '@/material-icons/400-24px/check.svg?react';
+import CloseIcon from '@/material-icons/400-24px/close.svg?react';
+
+import { AvatarOverlay } from '../avatar_overlay';
+import { Button } from '../button';
+import { DisplayName } from '../display_name';
+import { Icon } from '../icon';
+import { Permalink } from '../permalink';
+
+import classes from './styles.module.scss';
+
+export const AccountBanners: FC<{ account: Account }> = ({ account }) => {
+ const { suspended, hidden } = useAccountVisibility(account.id);
+ const relationship = useRelationship(account.id);
+
+ if (hidden) {
+ return null;
+ }
+
+ let banner: ReactNode = null;
+
+ if (account.memorial) {
+ banner = (
+