Index: src/assets/js/mod/admin-site-edit.js
===================================================================
--- src/assets/js/mod/admin-site-edit.js	(revision 19e28cedce7ba0de89244415d0c1f285866cd75a)
+++ src/assets/js/mod/admin-site-edit.js	(revision 746d98a771aa1e4a4241958d88582d516570cf4b)
@@ -42,22 +42,5 @@
   if (sh) sh.textContent = location.host + (sh.dataset.prefix || '/');
 })();
-(function() {
-  // Profile-links repeater: add row from <template>, remove on click.
-  var rows = document.getElementById('profile-links-rows');
-  var tpl  = document.getElementById('profile-link-template');
-  var add  = document.getElementById('profile-link-add');
-  if (!rows || !tpl || !add) return;
-
-  add.addEventListener('click', function() {
-    var clone = tpl.content.cloneNode(true);
-    rows.appendChild(clone);
-  });
-  rows.addEventListener('click', function(e) {
-    if (e.target && e.target.classList.contains('pl-remove')) {
-      var row = e.target.closest('.profile-link-row');
-      if (row) row.remove();
-    }
-  });
-})();
+// De profiellinks staan sinds 30-9 bij je profiel: zie mod/profile-links.js.
 
 // P63 — Profile photo picker: upload via /admin/sites/upload-photo,
Index: src/assets/js/mod/profile-links.js
===================================================================
--- src/assets/js/mod/profile-links.js	(revision 746d98a771aa1e4a4241958d88582d516570cf4b)
+++ src/assets/js/mod/profile-links.js	(revision 746d98a771aa1e4a4241958d88582d516570cf4b)
@@ -0,0 +1,28 @@
+// De profiellinks: een regel toevoegen uit het <template>, een regel weghalen.
+//
+// Stond in admin-site-edit.js, toen de links op de Appearance-pagina stonden.
+// Sinds 30-9 bewerk je ze bij je profiel (/account), naast je naam, bio en foto.
+//
+// De bootstrap in shell.ejs roept init() aan bij elke paginawissel waarop deze
+// module actief is; de vlag op het element voorkomt dat een tweede aanroep de
+// knoppen dubbel bedraadt.
+export function init() {
+  const rows = document.getElementById('profile-links-rows');
+  const tpl = document.getElementById('profile-link-template');
+  const add = document.getElementById('profile-link-add');
+  if (!rows || !tpl || !add || rows.__wired) return;
+  rows.__wired = true;
+  add.addEventListener('click', () => {
+    rows.appendChild(tpl.content.cloneNode(true));
+    const field = rows.lastElementChild && rows.lastElementChild.querySelector('input');
+    if (field) field.focus();
+  });
+  rows.addEventListener('click', (e) => {
+    const btn = e.target && e.target.closest && e.target.closest('.pl-remove');
+    if (!btn) return;
+    const row = btn.closest('.profile-link-row');
+    if (row) row.remove();
+  });
+}
+
+export default { init };
