Index: src/routes/admin-sites.js
===================================================================
--- src/routes/admin-sites.js	(revision 318d0c2548c03158eca4abe63ba513685acf84f0)
+++ src/routes/admin-sites.js	(revision e2c3d09c54bd06c4a04e4c72e4ff59aa9374b705)
@@ -17,5 +17,4 @@
 import path from 'path';
 import fs from 'fs';
-import { fileURLToPath } from 'url';
 import multer from 'multer';
 import { v4 as uuid } from 'uuid';
@@ -26,13 +25,11 @@
 import { listPlatforms, PLATFORMS } from '../services/PlatformIcons.js';
 import { toWebp } from '../services/ImageWebpService.js';
-
-const __dirname = path.dirname(fileURLToPath(import.meta.url));
+import { mediaDir } from '../config/paths.js';
+
 
 // Profile photos share the avatar directory with user avatars — same physical
 // folder, same URL prefix. Filenames are uuid-prefixed so site photos and
 // user avatars never collide.
-const PHOTO_DIR = path.resolve(
-  process.env.AVATAR_PATH || path.join(__dirname, '..', '..', 'storage', 'media', 'avatars')
-);
+const PHOTO_DIR = mediaDir('AVATAR_PATH', 'avatars');
 fs.mkdirSync(PHOTO_DIR, { recursive: true });
 
