Index: src/routes/admin-stats.js
===================================================================
--- src/routes/admin-stats.js	(revision f2943c183e2bc207f2a9a498ba3e571e9856f84f)
+++ src/routes/admin-stats.js	(revision e3a5aed2eb2a22b197079ec70b1163983eab4696)
@@ -14,5 +14,5 @@
 import { requireGod } from '../middleware/auth.js';
 import { premiumUnlocked } from '../services/PatreonService.js';
-import { getStats } from '../services/StatsService.js';
+import { getStats, currentIp, getExcludedIps, setExcludedIps } from '../services/StatsService.js';
 
 const router = express.Router();
@@ -32,4 +32,5 @@
   }
   const days = [7, 14, 30, 90].includes(parseInt(req.query.days, 10)) ? parseInt(req.query.days, 10) : 14;
+  const myIp = currentIp(req);
   renderPage(req, res, 'pages/admin-stats', {
     pageTitleKey: 'admin.t_stats',
@@ -37,6 +38,20 @@
     stats: getStats(days),
     linkClicks,
+    myIp,
+    ipExcluded: !!myIp && getExcludedIps().includes(myIp),
   });
 });
 
+// Toggle whether the admin's current IP is counted in statistics.
+router.post('/exclude-ip', requireGod, (req, res) => {
+  const ip = currentIp(req);
+  if (ip) {
+    const list = getExcludedIps();
+    const i = list.indexOf(ip);
+    if (i >= 0) list.splice(i, 1); else list.push(ip);
+    setExcludedIps(list);
+  }
+  res.redirect('/admin/stats');
+});
+
 export default router;
