Index: src/middleware/site.js
===================================================================
--- src/middleware/site.js	(revision 2cc887bf7dea6c0b2111115007c817e3fae28258)
+++ src/middleware/site.js	(revision 6e0249f645aa302be11c2683100109edcedf3ab4)
@@ -21,11 +21,12 @@
   // pinnen altijd op de primaire site.
   if (tenancy === 'hub') {
-    const m = req.path.match(/^\/sites\/([a-zA-Z0-9_-]+)(\/.*)?$/);
+    // Een PrutFolio is bereikbaar via /user/:slug (canoniek) én /sites/:slug (legacy).
+    const m = req.path.match(/^\/(sites|user)\/([a-zA-Z0-9_-]+)(\/.*)?$/);
     if (m) {
-      const site = db.prepare('SELECT * FROM sites WHERE slug = ?').get(m[1]);
+      const site = db.prepare('SELECT * FROM sites WHERE slug = ?').get(m[2]);
       if (site) {
         res.locals.site = site;
-        req.url = (m[2] || '/'); // strip /sites/:slug zodat downstream de rest ziet
-        res.locals.siteUrlBase = `/sites/${m[1]}`;
+        req.url = (m[3] || '/'); // strip /<prefix>/:slug zodat downstream de rest ziet
+        res.locals.siteUrlBase = `/${m[1]}/${m[2]}`;
         return next();
       }
