Index: src/routes/guardian.js
===================================================================
--- src/routes/guardian.js	(revision 47db4b55ef613863bde81368d52e3cce66e8969d)
+++ src/routes/guardian.js	(revision 54b027a0ddd850a81ee455880a44caa957a477cc)
@@ -262,5 +262,9 @@
       when_text: formatDateTime(p.published || p.created_at),
       cw: p.cw || null,
-      media: p.media_json ? JSON.parse(p.media_json) : [],
+      // Zelfde valkuil als in note-body.ejs: kapotte json gooit, maar geldige json
+      // van het verkeerde type niet. Zonder deze wacht neemt één vreemde note van
+      // een remote server het hele guardian-paneel mee, en dat is precies het
+      // scherm dat het moet doen als er iets aan de hand is.
+      media: (() => { try { const m = JSON.parse(p.media_json || '[]'); return Array.isArray(m) ? m : []; } catch { return []; } })(),
       // Een post van je ward hoort er hetzelfde uit te zien als in de Krant en
       // in Berichten: dezelfde partial, dus opmaak, media, quote-kaart en
Index: src/views/partials/note-body.ejs
===================================================================
--- src/views/partials/note-body.ejs	(revision 47db4b55ef613863bde81368d52e3cce66e8969d)
+++ src/views/partials/note-body.ejs	(revision 54b027a0ddd850a81ee455880a44caa957a477cc)
@@ -8,5 +8,12 @@
      Krant-only trimmings (the boost byline, polls, the audio player iframe, the
      action bar) stay in tl-item: they are about the feed, not about the post. */
+  // De catch vangt KAPOTTE json; hij vangt niet geldige json van het verkeerde
+  // TYPE. Drie posts van een remote server droegen media_json = "[]", dus een
+  // string met daarin [], en JSON.parse geeft dan netjes een string terug. Een
+  // string heeft geen .filter, en daarmee lag de hele Krant plat: één vreemde
+  // note nam de pagina mee. Wat er binnenkomt is niet van ons, dus de vorm moet
+  // hier afgedwongen worden en niet aangenomen.
   var _m = []; try { _m = JSON.parse(nb.media_json || '[]'); } catch (e) { _m = []; }
+  if (!Array.isArray(_m)) _m = [];
   var _imgs = _m.filter(function (m) { return m && m.url && (!m.type || /^image\//.test(m.type)); });
   var _vids = _m.filter(function (m) { return m && m.url && m.type && /^video\//.test(m.type); });
