Index: scripts/backfill-durations.mjs
===================================================================
--- scripts/backfill-durations.mjs	(revision bb42dfb3c61f3495f4ebd21e0066a369b7d0a202)
+++ scripts/backfill-durations.mjs	(revision 834bcc3c41c52321679550863b74ca035538659f)
@@ -1,12 +1,12 @@
 #!/usr/bin/env node
 /**
- * Backfill audio_tracks.duration voor bestaande tracks die nog géén duur hebben.
- * Leest de duur uit het mp3-bestand via ffmpeg (probeDuration — geen aparte
- * ffprobe-binary nodig). Idempotent: pakt alleen rijen met duration NULL of 0,
- * dus veilig herhaalbaar.
+ * Backfill audio_tracks.duration for existing tracks that have no duration yet.
+ * Reads the duration from the mp3 file via ffmpeg (probeDuration — no separate
+ * ffprobe binary required). Idempotent: only touches rows with duration NULL or 0,
+ * so it is safe to run repeatedly.
  *
  *   npm run backfill:durations
  *
- * Respecteert AUDIO_PATH (env) net als de upload-route.
+ * Respects AUDIO_PATH (env) just like the upload route.
  */
 import path from 'path';
@@ -21,9 +21,9 @@
 );
 
-// storage_path is absoluut (opgeslagen bij upload); val terug op AUDIO_DIR/filename.
+// storage_path is absolute (stored at upload time); fall back to AUDIO_DIR/filename.
 function resolveFile(t) {
   const candidates = [t.storage_path, t.filename ? path.join(AUDIO_DIR, t.filename) : null].filter(Boolean);
   for (const c of candidates) {
-    try { if (fs.statSync(c).isFile()) return c; } catch { /* volgende kandidaat */ }
+    try { if (fs.statSync(c).isFile()) return c; } catch { /* try next candidate */ }
   }
   return null;
Index: scripts/reset-admin.mjs
===================================================================
--- scripts/reset-admin.mjs	(revision bb42dfb3c61f3495f4ebd21e0066a369b7d0a202)
+++ scripts/reset-admin.mjs	(revision 834bcc3c41c52321679550863b74ca035538659f)
@@ -1,12 +1,12 @@
 #!/usr/bin/env node
-// Break-glass: reset (of zet) het wachtwoord van een beheerder. Werkt altijd,
-// zonder e-mail — de self-hoster heeft immers shell-/servertoegang.
+// Break-glass: reset (or set) the password of an admin account. Always works,
+// no email required — the self-hoster has shell/server access.
 //
-// Gebruik:
-//   npm run reset-admin                       # reset de (eerste) god-user, print nieuw wachtwoord
-//   npm run reset-admin -- <user|email>       # reset specifieke user, print nieuw wachtwoord
-//   npm run reset-admin -- <user|email> <pw>  # zet een gekozen wachtwoord
+// Usage:
+//   npm run reset-admin                       # reset the (first) god user, print new password
+//   npm run reset-admin -- <user|email>       # reset a specific user, print new password
+//   npm run reset-admin -- <user|email> <pw>  # set a chosen password
 //
-// Draai dit vanuit de projectroot zodat DATABASE_PATH/.env correct geladen wordt.
+// Run from the project root so DATABASE_PATH/.env is loaded correctly.
 
 import 'dotenv/config';
@@ -22,5 +22,5 @@
   user = db.prepare('SELECT * FROM users WHERE username = ? OR LOWER(email) = LOWER(?)').get(arg, arg);
 } else {
-  // Geen arg: pak de beheerder (god of admin), anders de allereerste user.
+  // No arg: pick the admin (god or admin role), otherwise the very first user.
   user =
     db.prepare("SELECT * FROM users WHERE role IN ('god','admin') ORDER BY created_at LIMIT 1").get() ||
