Index: src/routes/hub.js
===================================================================
--- src/routes/hub.js	(revision bf61be79c5c52ac6251edc4cb25feaba05e01f1f)
+++ src/routes/hub.js	(revision bf61be79c5c52ac6251edc4cb25feaba05e01f1f)
@@ -0,0 +1,56 @@
+/**
+ * Hub-hoofdpagina — alleen in hub-modus. In plaats van de primaire PrutFolio te
+ * tonen, rendert '/' hier een bedrijfs-overview: de laatste posts van ALLE
+ * gebruikers samengevat + een lijst van de PrutFolio's.
+ *
+ * In solo-modus doet dit niets (next()) en rendert posts.js de enige site.
+ */
+
+import express from 'express';
+import db from '../config/database.js';
+import { renderPage } from '../middleware/render.js';
+import { getTenancy } from '../services/SettingsService.js';
+
+const router = express.Router();
+
+router.get('/', (req, res, next) => {
+  if (getTenancy() !== 'hub') return next();
+
+  // Laatste gepubliceerde posts over álle sites heen.
+  const posts = db.prepare(`
+    SELECT p.title, p.slug, p.excerpt, p.published_at, p.created_at,
+           p.cover_image_url, p.type,
+           s.slug AS site_slug, s.title AS site_title, s.profile_photo AS site_photo,
+           u.username AS author_username
+    FROM posts p
+    JOIN sites s ON s.id = p.site_id
+    LEFT JOIN users u ON u.id = p.author_id
+    WHERE p.status = 'published'
+    ORDER BY COALESCE(p.published_at, p.created_at) DESC
+    LIMIT 24
+  `).all();
+
+  // De PrutFolio's (sites) voor de gebruikers-lijst.
+  const sites = db.prepare(`
+    SELECT s.slug, s.title, s.profile_photo,
+           u.username AS owner_username,
+           (SELECT COUNT(*) FROM posts WHERE site_id = s.id AND status = 'published') AS post_count
+    FROM sites s
+    LEFT JOIN users u ON u.id = s.owner_id
+    ORDER BY s.created_at ASC
+  `).all();
+
+  // De primaire/oudste site geldt als de bedrijfssite (titel/omschrijving = koptekst).
+  const company = res.locals.site || null;
+
+  renderPage(req, res, 'pages/hub-home', {
+    pageTitle: company ? company.title : 'Overzicht',
+    socialDescr: (company && (company.description || company.tagline)) || '',
+    bodyClass: 'on-home',
+    company,
+    posts,
+    sites,
+  });
+});
+
+export default router;
