diff --git a/frontend/src/components/ReverseProxySettings.vue b/frontend/src/components/ReverseProxySettings.vue
new file mode 100644
index 00000000..571de34d
--- /dev/null
+++ b/frontend/src/components/ReverseProxySettings.vue
@@ -0,0 +1,309 @@
+
+
+
+
+ {{ loadError }}
+
+ Reading this request… Set the proxy count to {{ readout.suggested }}
+ This request came through Cloudflare, which reports your address as
+ This request came through Cloudflare
+ No count reads the address Cloudflare reports for you. Check the forwarding chain below,
+ and that your own proxy passes Cloudflare's
+ Grimoire reads this request as coming from
+ {{ sourceLabel }} One proxy (Traefik, Nginx, Caddy) is 1. Cloudflare in front of your own
+ proxy is 2. 0 ignores the forwarding headers and uses the connecting address.
+ {{ readout.cloudflare_client }}. At {{ config.hops }}, Grimoire reads
+ {{ inForce?.client }} instead, so visitors share Cloudflare's addresses
+ and one sign-in limit.
+ X-Forwarded-For on.
+ {{ inForce?.client || "an unknown address" }}
+ over HTTPS. If that is your address, the count
+ is right. If it is your proxy's, raise the count.
+
+
+
+
+
+
+ Count Reads you as HTTPS
+
+
+ {{ row.hops }}
+
+ {{ row.client || "unknown" }}{{ row.https ? "yes" : "no" }}
+
+ in force
+
+ suggested
+
+
+
+
+
+ {{ readout.peer || "unknown" }}{{ readout.forwarded_for.join(", ") }}{{ readout.forwarded_proto.join(", ") }}
+ How many proxies a request passes through before it reaches Grimoire. Sign-in rate + limits and the audit log key on the visitor's address, read through this count; if it + is too low, every visitor reads as the proxy and one run of bad sign-ins blocks everyone. +
+