diff --git a/funnel/assets/js/profile_followers.js b/funnel/assets/js/profile_followers.js
new file mode 100644
index 000000000..a10110d9b
--- /dev/null
+++ b/funnel/assets/js/profile_followers.js
@@ -0,0 +1,16 @@
+import TableSearch from './utils/tablesearch';
+
+$(() => {
+ window.Hasgeek.profileFollowersInit = (search) => {
+ if (search) {
+ const tableSearch = new TableSearch(search.tableId);
+ const inputId = `#${search.inputId}`;
+ const tableRow = `#${search.tableId} tbody tr`;
+ $(inputId).keyup(function doTableSearch() {
+ $(tableRow).addClass('mui--hide');
+ const hits = tableSearch.searchRows($(this).val());
+ $(hits.join(',')).removeClass('mui--hide');
+ });
+ }
+ };
+});
diff --git a/funnel/templates/follow_share_details_modal.html.jinja2 b/funnel/templates/follow_share_details_modal.html.jinja2
new file mode 100644
index 000000000..4ed0fcb61
--- /dev/null
+++ b/funnel/templates/follow_share_details_modal.html.jinja2
@@ -0,0 +1,84 @@
+{% from "macros.html.jinja2" import faicon, csrf_tag %}
+
+
+
+
+
+
diff --git a/funnel/templates/profile_followers.html.jinja2 b/funnel/templates/profile_followers.html.jinja2
new file mode 100644
index 000000000..fb6002d08
--- /dev/null
+++ b/funnel/templates/profile_followers.html.jinja2
@@ -0,0 +1,100 @@
+{% extends "profile_layout.html.jinja2" %}
+{%- from "macros.html.jinja2" import faicon, useravatar %}
+
+{%- block pageheaders %}
+