diff --git a/web/settings/relationship/block-list-panel.react.js b/web/settings/relationship/block-list-panel.react.js
new file mode 100644
--- /dev/null
+++ b/web/settings/relationship/block-list-panel.react.js
@@ -0,0 +1,80 @@
+// @flow
+
+import * as React from 'react';
+
+import { useModalContext } from 'lib/components/modal-provider.react.js';
+import { userRelationshipStatus } from 'lib/types/relationship-types.js';
+import type { AccountUserInfo, UserInfo } from 'lib/types/user-types.js';
+
+import BlockListRow from './block-list-row.react.js';
+import BlockUsersModal from './block-users-modal.react.js';
+import css from './user-list.css';
+import { UserList } from './user-list.react.js';
+import PanelHeader from '../../components/panel-header.react.js';
+import Panel, { type PanelData } from '../../components/panel.react.js';
+import Search from '../../components/search.react.js';
+
+const relationships = [
+ userRelationshipStatus.BLOCKED_BY_VIEWER,
+ userRelationshipStatus.BOTH_BLOCKED,
+];
+
+function filterUser(userInfo: UserInfo) {
+ return relationships.includes(userInfo.relationshipStatus);
+}
+
+function usersComparator(user1: AccountUserInfo, user2: AccountUserInfo) {
+ return user1.username.localeCompare(user2.username);
+}
+
+function BlockListPanel(): React.Node {
+ const [searchText, setSearchText] = React.useState('');
+
+ const { pushModal, popModal } = useModalContext();
+
+ const onClickAddBlockedUsersButton = React.useCallback(
+ () => pushModal(