Index: src/config/database.js
===================================================================
--- src/config/database.js	(revision b1d5f3fe649d958099ec7a8e2ff39b44708ad824)
+++ src/config/database.js	(revision bfa3ba3ce26883066a0df7053c97b2067ddaa1e6)
@@ -888,4 +888,23 @@
     );
     CREATE INDEX IF NOT EXISTS idx_ap_reports_slug ON ap_reports(slug, created_at);
+  `);
+  // De bezorgwachtrij per SERVER en per INBOX (shaer-xzab.3). `host` zodat één
+  // mislukking naar een server al zijn rijen opschuift, in plaats van dertig
+  // rijen met elk acht seconden time-out op dezelfde dode server; de index op
+  // (inbox, id) zodat "oudste eerst per inbox" geen volle scan per rij is.
+  // Rijen van voor deze kolom krijgen hun host hier, eenmalig.
+  ensureColumn('ap_delivery', 'host', 'TEXT');
+  try {
+    const zonder = db.prepare('SELECT id, inbox FROM ap_delivery WHERE host IS NULL').all();
+    const zet = db.prepare('UPDATE ap_delivery SET host = ? WHERE id = ?');
+    for (const r of zonder) {
+      let h = null;
+      try { h = new URL(r.inbox).host.toLowerCase(); } catch { /* onleesbaar: blijft null */ }
+      zet.run(h, r.id);
+    }
+  } catch { /* een lege of ontbrekende wachtrij is geen fout */ }
+  db.exec(`
+    CREATE INDEX IF NOT EXISTS idx_ap_delivery_inbox ON ap_delivery(inbox, id);
+    CREATE INDEX IF NOT EXISTS idx_ap_delivery_host ON ap_delivery(host);
   `);
   // "Feature" a followed account: its posts show in the local Cirkel. Heet in de
