Index: src/middleware/site.js
===================================================================
--- src/middleware/site.js	(revision 72ec6a4c535a846688e8da900f308a46345d1578)
+++ src/middleware/site.js	(revision cf5073b552c7838fa094219d78e0171228901205)
@@ -12,4 +12,5 @@
 import { audioUrl } from '../services/AudioStreamService.js';
 import { audioEnabled } from '../config/features.js';
+import * as Guardianship from '../services/guardianship/index.js';
 
 /**
@@ -33,4 +34,12 @@
     res.locals.site = defaultSite;
     res.locals.siteUrlBase = '';
+    // Mag deze account antwoorden (shaer-r4c)? Eén keer hier, zodat de
+    // antwoordvelden in de views hem kunnen lezen zonder dat elke route hem
+    // apart doorgeeft. De server weigert het antwoord toch al in deliverReply;
+    // dit voorkomt alleen dat een kind tegen een deur duwt die op slot zit.
+    try {
+      const isWard = Guardianship.listGuardians(defaultSite.slug).length > 0;
+      res.locals.mayReply = Guardianship.wardGateAllowed(defaultSite.gate_replies, isWard);
+    } catch { res.locals.mayReply = true; }
   }
 
