Index: src/middleware/site.js
===================================================================
--- src/middleware/site.js	(revision 98ecf51d81042b5773ac053aa13dfc773dbdf4e9)
+++ src/middleware/site.js	(revision 83989351b8cbc2df4846463ff5a57094bc31227b)
@@ -12,4 +12,16 @@
 import db from '../config/database.js';
 import { getTenancy } from '../services/SettingsService.js';
+
+/**
+ * De primaire/hoofd-site — ÉÉN bron van waarheid (vervangt de "oudste site ="
+ * hoofd"-aanname die voorheen los in resolveSite/hub/account/admin stond).
+ * Leest de expliciete is_primary-vlag; valt terug op de oudste als die (nog)
+ * nergens staat, zodat bestaand gedrag exact behouden blijft.
+ */
+export function getPrimarySite() {
+  return db.prepare('SELECT * FROM sites WHERE is_primary = 1 LIMIT 1').get()
+      || db.prepare('SELECT * FROM sites ORDER BY created_at ASC LIMIT 1').get()
+      || null;
+}
 
 export function resolveSite(req, res, next) {
@@ -43,6 +55,6 @@
   }
 
-  // Solo (of hub zonder match): de primaire/owner-site (eerste aangemaakte).
-  const defaultSite = db.prepare('SELECT * FROM sites ORDER BY created_at ASC LIMIT 1').get();
+  // Solo (of hub zonder match): pin op de primaire/hoofd-site.
+  const defaultSite = getPrimarySite();
   if (defaultSite) {
     res.locals.site = defaultSite;
