Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision 33886fbf75431e1296accc06e5116821280ad542)
+++ src/routes/posts.js	(revision 611703554192608beef5ebbb7311ee3db143690f)
@@ -507,31 +507,26 @@
   const urlBaseFor = (p) => (isHub && p && p.site_slug) ? `/user/${p.site_slug}` : '';
 
-  const prevPost = isHub
+  // Newer/Older over ALLE posts, in de canonieke feed-volgorde — niet alleen de
+  // pinned-stack. Solo: binnen de site, pinned eerst op rank, dan op datum
+  // (zelfde volgorde als de homepage-feed). Hub: globaal op datum over alle
+  // sites. De vorige positie in de lijst = "Newer" (← omhoog), de volgende =
+  // "Older" (→ omlaag). Pinned posts zitten zo gewoon in de doorlopende reeks.
+  const ordered = isHub
     ? db.prepare(`
-        SELECT p.slug, p.title, s.slug AS site_slug
+        SELECT p.id, p.slug, p.title, s.slug AS site_slug
         FROM posts p JOIN sites s ON s.id = p.site_id
-        WHERE p.status = 'published' AND p.published_at < ? AND p.id != ?
-        ORDER BY p.published_at DESC LIMIT 1
-      `).get(post.published_at, post.id)
+        WHERE p.status = 'published'
+        ORDER BY p.published_at DESC
+      `).all()
     : db.prepare(`
-        SELECT slug, title FROM posts
-        WHERE site_id = ? AND status = 'published' AND published_at < ? AND id != ?
-        ORDER BY published_at DESC LIMIT 1
-      `).get(site.id, post.published_at, post.id);
-
-  const nextPost = isHub
-    ? db.prepare(`
-        SELECT p.slug, p.title, s.slug AS site_slug
-        FROM posts p JOIN sites s ON s.id = p.site_id
-        WHERE p.status = 'published' AND p.published_at > ? AND p.id != ?
-        ORDER BY p.published_at ASC LIMIT 1
-      `).get(post.published_at, post.id)
-    : db.prepare(`
-        SELECT slug, title FROM posts
-        WHERE site_id = ? AND status = 'published' AND published_at > ? AND id != ?
-        ORDER BY published_at ASC LIMIT 1
-      `).get(site.id, post.published_at, post.id);
-  if (prevPost) prevPost._urlBase = urlBaseFor(prevPost);
-  if (nextPost) nextPost._urlBase = urlBaseFor(nextPost);
+        SELECT id, slug, title FROM posts
+        WHERE site_id = ? AND status = 'published'
+        ORDER BY (pinned = 0) ASC, pinned ASC, published_at DESC
+      `).all(site.id);
+  const _idx = ordered.findIndex((p) => p.id === post.id);
+  const newerPost = _idx > 0 ? ordered[_idx - 1] : null;
+  const olderPost = (_idx >= 0 && _idx < ordered.length - 1) ? ordered[_idx + 1] : null;
+  if (newerPost) newerPost._urlBase = urlBaseFor(newerPost);
+  if (olderPost) olderPost._urlBase = urlBaseFor(olderPost);
 
   // ── Related posts: same-tag matching with recency fallback ─────
@@ -588,46 +583,9 @@
   relatedPosts = relatedPosts.map(({ _overlap, tags, ...rest }) => ({ ...rest, _urlBase: urlBaseFor(rest) }));
 
-  // ── Pinned navigation: prev/next pinned post ───────────────────
-  // Only meaningful if the current post is pinned. We order by
-  // published_at DESC (newest pinned first) — same as the homepage feed.
-  // Pinned navigation: prev/next pinned post by RANK (not by date).
-  // - prev (← back to) = post with smaller rank, i.e. higher in stack
-  // - next (→ forward) = post with larger rank, i.e. lower in stack
-  // BOVENAAN appears when current is rank 1 (no rank 0 above);
-  // ONDERAAN appears when current is the highest rank (no further down).
-  let prevPinnedPost = null;
-  let nextPinnedPost = null;
-  let pinnedTopOfStack = false;
-  let pinnedBottomOfStack = false;
-  if (post.pinned > 0) {
-    // The rank one step UP the stack (towards #1)
-    prevPinnedPost = db.prepare(`
-      SELECT slug, title FROM posts
-      WHERE site_id = ? AND status = 'published' AND pinned > 0
-        AND pinned < ? AND id != ?
-      ORDER BY pinned DESC LIMIT 1
-    `).get(site.id, post.pinned, post.id) || null;
-
-    // The rank one step DOWN the stack (away from #1)
-    nextPinnedPost = db.prepare(`
-      SELECT slug, title FROM posts
-      WHERE site_id = ? AND status = 'published' AND pinned > 0
-        AND pinned > ? AND id != ?
-      ORDER BY pinned ASC LIMIT 1
-    `).get(site.id, post.pinned, post.id) || null;
-
-    pinnedTopOfStack    = !prevPinnedPost;  // already rank #1 (or nothing higher)
-    pinnedBottomOfStack = !nextPinnedPost;  // nothing further down the stack
-  }
-
   renderPage(req, res, 'pages/post', {
     post,
-    prevPost,
-    nextPost,
+    newerPost,
+    olderPost,
     relatedPosts,
-    prevPinnedPost,
-    nextPinnedPost,
-    pinnedTopOfStack,
-    pinnedBottomOfStack,
     comments: topLevel,
     totalComments,
Index: src/views/pages/post.ejs
===================================================================
--- src/views/pages/post.ejs	(revision 33886fbf75431e1296accc06e5116821280ad542)
+++ src/views/pages/post.ejs	(revision 611703554192608beef5ebbb7311ee3db143690f)
@@ -233,74 +233,24 @@
   <% } %>
 
-  <%# ── Pinned navigation (only when current post is pinned) ───
-      Two card-style links: "Vorige vastgepinde" / "Volgende vastgepinde".
-      Edge-of-stack states show "← BOVENAAN — Nieuwste post" or the equivalent
-      for the bottom. Layout mirrors v9 exactly. %>
-  <% if (post.pinned) { %>
-    <nav class="post-pinned-nav" aria-label="Pinned navigation">
-      <%# LEFT card: post one step UP the pinned stack (towards #1).
-          Uses prevPinnedPost which now means "smaller rank". %>
-      <% if (prevPinnedPost) { %>
-        <a class="post-pinned-card post-pinned-card--prev" href="<%= _base %>/<%= prevPinnedPost.slug %>"
-           hx-get="<%= _base %>/<%= prevPinnedPost.slug %>?partial=1" hx-target="#pcms-main"
-           hx-push-url="<%= _base %>/<%= prevPinnedPost.slug %>" hx-indicator="#pcms-loading">
-          <span class="post-pinned-arrow" aria-hidden="true">←</span>
-          <span class="post-pinned-body">
-            <span class="post-pinned-label">📌 Vorige vastgepinde</span>
-            <span class="post-pinned-title"><%= prevPinnedPost.title %></span>
-            <span class="post-pinned-cta">Lees deze post →</span>
-          </span>
-        </a>
-      <% } else if (pinnedTopOfStack) { %>
-        <span class="post-pinned-card post-pinned-card--edge">
-          <span class="post-pinned-edge-label">— BOVENAAN —</span>
-          <span class="post-pinned-edge-title">Nieuwste post</span>
-        </span>
-      <% } %>
-
-      <%# RIGHT card: post one step DOWN the pinned stack (away from #1).
-          Uses nextPinnedPost which now means "larger rank". %>
-      <% if (nextPinnedPost) { %>
-        <a class="post-pinned-card post-pinned-card--next" href="<%= _base %>/<%= nextPinnedPost.slug %>"
-           hx-get="<%= _base %>/<%= nextPinnedPost.slug %>?partial=1" hx-target="#pcms-main"
-           hx-push-url="<%= _base %>/<%= nextPinnedPost.slug %>" hx-indicator="#pcms-loading">
-          <span class="post-pinned-arrow" aria-hidden="true">→</span>
-          <span class="post-pinned-body">
-            <span class="post-pinned-label">📌 Volgende vastgepinde</span>
-            <span class="post-pinned-title"><%= nextPinnedPost.title %></span>
-            <span class="post-pinned-cta">← Lees deze post</span>
-          </span>
-        </a>
-      <% } else if (pinnedBottomOfStack) { %>
-        <span class="post-pinned-card post-pinned-card--edge">
-          <span class="post-pinned-edge-label">— ONDERAAN —</span>
-          <span class="post-pinned-edge-title">Oudste post</span>
-        </span>
-      <% } %>
-    </nav>
-  <% } %>
-
-  <%# ── Chronological prev/next (kept for non-pinned posts) ──────
-      For pinned posts the pinned-nav above replaces this. Non-pinned
-      regular posts still get the simple older/newer pair. %>
-  <% if (!post.pinned && (prevPost || nextPost)) { %>
+  <%# ── Navigatie over ALLE posts (pinned + niet-pinned in de feed-volgorde) ──
+      Newer links (← omhoog in de lijst), Older rechts (→ omlaag). Vervangt de
+      vroegere pinned-only stack-navigatie: pinned posts zitten gewoon in de
+      doorlopende reeks. .post-nav-prev = linker kolom, .post-nav-next = rechter. %>
+  <% if (newerPost || olderPost) { %>
     <nav class="post-nav">
-      <%# Newer links, Older rechts (lijst nieuwste-eerst → naar rechts = ouder).
-          .post-nav-prev = linker kolom (links uitgelijnd), .post-nav-next =
-          rechter kolom (rechts uitgelijnd). %>
-      <% if (nextPost) { %>
-        <a class="post-nav-prev" href="<%= nextPost._urlBase || '' %>/<%= nextPost.slug %>"<% if (!nextPost._urlBase) { %>
-           hx-get="/<%= nextPost.slug %>?partial=1" hx-target="#pcms-main"
-           hx-push-url="/<%= nextPost.slug %>" hx-indicator="#pcms-loading"<% } %>>
+      <% if (newerPost) { %>
+        <a class="post-nav-prev" href="<%= newerPost._urlBase || '' %>/<%= newerPost.slug %>"<% if (!newerPost._urlBase) { %>
+           hx-get="/<%= newerPost.slug %>?partial=1" hx-target="#pcms-main"
+           hx-push-url="/<%= newerPost.slug %>" hx-indicator="#pcms-loading"<% } %>>
           <span class="post-nav-label">← Newer</span>
-          <span class="post-nav-title"><%= nextPost.title %></span>
+          <span class="post-nav-title"><%= newerPost.title %></span>
         </a>
       <% } else { %><span></span><% } %>
-      <% if (prevPost) { %>
-        <a class="post-nav-next" href="<%= prevPost._urlBase || '' %>/<%= prevPost.slug %>"<% if (!prevPost._urlBase) { %>
-           hx-get="/<%= prevPost.slug %>?partial=1" hx-target="#pcms-main"
-           hx-push-url="/<%= prevPost.slug %>" hx-indicator="#pcms-loading"<% } %>>
+      <% if (olderPost) { %>
+        <a class="post-nav-next" href="<%= olderPost._urlBase || '' %>/<%= olderPost.slug %>"<% if (!olderPost._urlBase) { %>
+           hx-get="/<%= olderPost.slug %>?partial=1" hx-target="#pcms-main"
+           hx-push-url="/<%= olderPost.slug %>" hx-indicator="#pcms-loading"<% } %>>
           <span class="post-nav-label">Older →</span>
-          <span class="post-nav-title"><%= prevPost.title %></span>
+          <span class="post-nav-title"><%= olderPost.title %></span>
         </a>
       <% } %>
