Index: src/server.js
===================================================================
--- src/server.js	(revision 5a6a457ca2bf625de84ec03d20f7757480337fde)
+++ src/server.js	(revision 1968592254ff00ea43f6ce68d437e12c36d87da6)
@@ -42,7 +42,4 @@
 import postsRoutes from './routes/posts.js';
 import langRoutes from './routes/lang.js';
-import federationRoutes from './routes/federation.js';
-import { startCircleSyncLoop } from './services/CircleService.js';
-import adminCircleRoutes from './routes/admin-circle.js';
 import adminUpdatesRoutes from './routes/admin-updates.js';
 import adminPatreonRoutes from './routes/admin-patreon.js';
@@ -198,7 +195,4 @@
 // Klonkt is PWA-only; assetlinks.json is no longer served.
 
-// Circles: periodic background sync of remote instances (no-op unless tenancy='circle').
-startCircleSyncLoop();
-
 // Bundle HTMX: copy from node_modules into our own assets dir so we can serve
 // it locally (no third-party CDN). Idempotent — only copies if size differs.
@@ -217,8 +211,4 @@
   }
 })();
-
-// Circle federation: public, site-agnostic endpoints (/.klonkt/*).
-// Before resolveSite/theme — they don't need a site context.
-app.use(federationRoutes);
 
 // ActivityPub: WebFinger + /ap/* (site-agnostic, resolves the site by slug).
@@ -304,5 +294,4 @@
 app.use('/admin/settings', adminSettingsRoutes);
 app.use('/admin/seo', adminSeoRoutes);
-app.use('/admin/circle', adminCircleRoutes);
 app.use('/admin/updates', adminUpdatesRoutes);
 app.use('/admin/patreon', adminPatreonRoutes);
