diff --git a/bookwyrm/templates/settings/layout.html b/bookwyrm/templates/settings/layout.html
index dcaaaeb38..84328913b 100644
--- a/bookwyrm/templates/settings/layout.html
+++ b/bookwyrm/templates/settings/layout.html
@@ -85,6 +85,9 @@
{% url 'settings-celery' as url %}
{% trans "Celery status" %}
+
+ {% trans "Flower" %}
+
{% url 'settings-email-config' as url %}
{% trans "Email Configuration" %}
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index 0ebd7925c..15fb50f67 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -28,6 +28,7 @@ BOOK_PATH = r"^book/(?P\d+)"
STREAMS = "|".join(s["key"] for s in settings.STREAMS)
urlpatterns = [
+ views.FlowerProxyView.as_url(),
path("admin/", admin.site.urls),
path(
"robots.txt",
diff --git a/bookwyrm/views/admin/flower.py b/bookwyrm/views/admin/flower.py
new file mode 100644
index 000000000..f3f6ae02b
--- /dev/null
+++ b/bookwyrm/views/admin/flower.py
@@ -0,0 +1,17 @@
+from django.contrib.auth.mixins import UserPassesTestMixin
+from django.urls import path, re_path
+from revproxy.views import ProxyView
+
+class FlowerProxyView(UserPassesTestMixin, ProxyView):
+ upstream = 'http://{}:{}'.format('localhost', 8888)
+ url_prefix = 'flower'
+ rewrite = (
+ (r'^/{}$'.format(url_prefix), r'/{}/'.format(url_prefix)),
+ )
+
+ def test_func(self):
+ return self.request.user.is_superuser
+
+ @classmethod
+ def as_url(cls):
+ return re_path(r'^(?P{}.*)$'.format(cls.url_prefix), cls.as_view(), name='flower')