Index: src/routes/admin-shows.js
===================================================================
--- src/routes/admin-shows.js	(revision e6ad94837ba23b51afaaa0d7cf30c5fecfb31935)
+++ src/routes/admin-shows.js	(revision bad5c7786644eb18eff06ea0396f21b771e994dc)
@@ -18,4 +18,5 @@
 import { mailerConfigured, sendMail } from '../config/mailer.js';
 import { confirmedFor, counts } from '../services/SubscriberService.js';
+import { getSetting, setSetting } from '../services/SettingsService.js';
 
 const router = express.Router();
@@ -36,4 +37,5 @@
     pageTitle: 'Agenda', bodyClass: 'on-admin',
     shows, smtp: mailerConfigured(), notifyCount: confirmedFor(site.id, 'notify').length,
+    agendaEnabled: getSetting('agenda_enabled') === '1',
     ...extra,
   });
@@ -83,4 +85,10 @@
 });
 
+router.post('/toggle', requireSiteManager, premiumGate, (req, res) => {
+  // Agenda tonen op de site (Agenda-knop in de pill + /shows-pagina).
+  setSetting('agenda_enabled', req.body.enabled ? '1' : '0');
+  res.redirect((res.locals.siteUrlBase || '') + '/admin/shows');
+});
+
 router.post('/:id/delete', requireSiteManager, premiumGate, (req, res) => {
   const site = res.locals.site;
Index: src/routes/shows.js
===================================================================
--- src/routes/shows.js	(revision e6ad94837ba23b51afaaa0d7cf30c5fecfb31935)
+++ src/routes/shows.js	(revision bad5c7786644eb18eff06ea0396f21b771e994dc)
@@ -16,6 +16,10 @@
 import { mailerConfigured, sendMail } from '../config/mailer.js';
 import { addSubscriber } from '../services/SubscriberService.js';
+import { getSetting } from '../services/SettingsService.js';
 
 const router = express.Router();
+
+// Agenda is opt-in: pas bereikbaar als de beheerder 'm heeft ingeschakeld.
+function agendaOn() { return getSetting('agenda_enabled') === '1'; }
 
 function esc(s) { return String(s || '').replace(/[&<>"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c])); }
@@ -30,5 +34,5 @@
 
 router.get('/shows', (req, res, next) => {
-  if (!premiumUnlocked()) return next();
+  if (!premiumUnlocked() || !agendaOn()) return next();
   const site = res.locals.site;
   if (!site) return next();
@@ -42,5 +46,5 @@
 
 router.post('/shows/notify', async (req, res, next) => {
-  if (!premiumUnlocked()) return next();
+  if (!premiumUnlocked() || !agendaOn()) return next();
   const site = res.locals.site;
   if (!site) return next();
