Index: src/routes/activitypub.js
===================================================================
--- src/routes/activitypub.js	(revision e4119c22651ba589d6fceee5bc1802a11716f279)
+++ src/routes/activitypub.js	(revision 3155d8cc64d4ccbb40d068c206728faea3faee6a)
@@ -977,6 +977,14 @@
   const ouderLink = (pagina) => (pagina.more && pagina.oldest
     ? `${inboxId}?before=${encodeURIComponent(pagina.oldest)}${size}` : undefined);
-  if (req.query.before) {
-    const pagina = AP.inboxPage(auth.site.slug, { before: String(req.query.before), limit: req.query.limit });
+  // ?random=1 is dezelfde pagina, maar vanaf een willekeurige plek in je
+  // geschiedenis: met inbox-zero aan is 'ouder' alles wat je al doorgenomen
+  // hebt, en dan is een greep eruit zinniger dan een rij ervan. De pagina
+  // noemt zichzelf naar waar hij werkelijk begint, en `next` loopt vanaf daar
+  // gewoon door naar beneden.
+  if (req.query.before || req.query.random) {
+    const pagina = req.query.random
+      ? AP.inboxRandomPage(auth.site.slug, { limit: req.query.limit })
+      : AP.inboxPage(auth.site.slug, { before: String(req.query.before), limit: req.query.limit });
+    const vanaf = req.query.random ? pagina.start : String(req.query.before);
     const ids = (leg) => pagina.rows.filter((r) => r.leg === leg).map((r) => r.ref);
     const tl = new Map(AP.timelineRowsByIds(auth.site.slug, ids('timeline')).map((r) => [r.id, r]));
@@ -1006,5 +1014,5 @@
     return AP.sendAP(res, {
       '@context': AP.AP_CONTEXT,
-      id: `${inboxId}?before=${encodeURIComponent(String(req.query.before))}${size}`,
+      id: vanaf ? `${inboxId}?before=${encodeURIComponent(vanaf)}${size}` : `${inboxId}?random=1${size}`,
       type: 'OrderedCollectionPage',
       partOf: inboxId,
