Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision cbe4f4ecdb97729fce5f1c9da048fae6b10e18a2)
+++ src/services/ActivityPubService.js	(revision 98688c68b4657b7d6e1b4341c8d501647e9a20c7)
@@ -1160,8 +1160,13 @@
   const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, '');
   if (!base || !site || !site.slug) return { error: 'config' };
-  // Accept either an @user@host handle (WebFinger) or a profile/actor URL directly
-  // (the authorize_interaction Follow flow passes a URL).
+  // Accept any of: a profile/actor URL, an @user@host handle (WebFinger), or a
+  // bare site domain (site.com) — for a single-actor site (Klonkt etc.) the root
+  // resolves to its AP actor, so you can follow a site by just its domain.
   const s = String(handle || '').trim();
-  const actorUrl = /^https?:\/\//i.test(s) ? (safeUrl(s) || null) : await webfingerResolve(s);
+  let actorUrl;
+  if (/^https?:\/\//i.test(s)) actorUrl = safeUrl(s) || null;
+  else if (s.includes('@')) actorUrl = await webfingerResolve(s);
+  else if (/^[a-z0-9.-]+\.[a-z]{2,}/i.test(s)) actorUrl = await resolveApActor('https://' + s.replace(/^\/+|\/+$/g, ''));
+  else actorUrl = null;
   if (!actorUrl) return { error: 'not_found' };
   const actor = await fetchActor(actorUrl).catch(() => null);
Index: src/views/pages/volgend.ejs
===================================================================
--- src/views/pages/volgend.ejs	(revision cbe4f4ecdb97729fce5f1c9da048fae6b10e18a2)
+++ src/views/pages/volgend.ejs	(revision 98688c68b4657b7d6e1b4341c8d501647e9a20c7)
@@ -7,5 +7,5 @@
 
   <form method="post" action="/tijdlijn/follow" class="tl-follow">
-    <input type="text" name="handle" placeholder="@naam@server.social" autocomplete="off" spellcheck="false" required>
+    <input type="text" name="handle" placeholder="@naam@server.social of site.com" autocomplete="off" spellcheck="false" required>
     <button type="submit" class="btn btn-primary"><%= t('tl.follow_btn') %></button>
     <label class="tl-follow-ab" title="<%= t('tl.autoboost_hint') %>"><input type="checkbox" name="auto_boost" value="1"> 🔁 <%= t('tl.autoboost_follow') %></label>
