Index: src/middleware/site.js
===================================================================
--- src/middleware/site.js	(revision e64a49b380f38e666e08803dbc52f598a5d97bf2)
+++ src/middleware/site.js	(revision 34e63f06ca6b67732e6929f4e9fc59c0017e608c)
@@ -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; }
   }
 
