Index: src/routes/activitypub.js
===================================================================
--- src/routes/activitypub.js	(revision 9946a68c3cdf4796d3e5ab4c7f6e3317e0f40984)
+++ src/routes/activitypub.js	(revision 1d1fdc97939238a96492ef7adccedc1b08f51985)
@@ -14,5 +14,5 @@
 import express from 'express';
 import { readFileSync } from 'fs';
-import db from '../config/database.js';
+import db, { isoSql } from '../config/database.js';
 import AP from '../services/ActivityPubService.js';
 import { apReadLimiter, apInboxLimiter } from '../middleware/rate-limit.js';
@@ -1176,5 +1176,5 @@
        AND IFNULL(ap_visibility, 'public') IN ('public', 'quiet')
        AND pinned IS NOT NULL AND pinned > 0
-     ORDER BY pinned DESC, COALESCE(published_at, created_at) ASC LIMIT 20`
+     ORDER BY pinned DESC, ${isoSql('COALESCE(published_at, created_at)')} ASC LIMIT 20`
   ).all(site.id);
   AP.sendAP(res, AP.buildFeatured(baseUrl(req), site, posts, { page: paginaNr(req) }));
Index: src/routes/admin.js
===================================================================
--- src/routes/admin.js	(revision 9946a68c3cdf4796d3e5ab4c7f6e3317e0f40984)
+++ src/routes/admin.js	(revision 1d1fdc97939238a96492ef7adccedc1b08f51985)
@@ -6,5 +6,5 @@
 
 import express from 'express';
-import db from '../config/database.js';
+import db, { isoSql } from '../config/database.js';
 import { renderPage } from '../middleware/render.js';
 import { requireAuth } from '../middleware/auth.js';
@@ -22,5 +22,5 @@
     SELECT slug, title, status, published_at, created_at, updated_at
     FROM posts WHERE site_id = ?
-    ORDER BY (status != 'published') DESC, COALESCE(updated_at, published_at, created_at) DESC
+    ORDER BY (status != 'published') DESC, ${isoSql('COALESCE(updated_at, published_at, created_at)')} DESC
     LIMIT ?
   `).all(siteId, limit).map((p) => ({
Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 9946a68c3cdf4796d3e5ab4c7f6e3317e0f40984)
+++ src/services/ActivityPubService.js	(revision 1d1fdc97939238a96492ef7adccedc1b08f51985)
@@ -19,5 +19,5 @@
 import fs from 'fs';
 import path from 'path';
-import db, { NU_ISO } from '../config/database.js';
+import db, { NU_ISO, isoSql } from '../config/database.js';
 import HtmlSanitizerService from './HtmlSanitizerService.js';
 import AudioEmbedService from './AudioEmbedService.js';
@@ -1143,5 +1143,5 @@
   const fanClause = fanOnly ? '' : 'AND (p.fan_only IS NULL OR p.fan_only = 0)';
   const unie = `
-    SELECT 'post' AS soort, p.id AS id, COALESCE(p.published_at, p.created_at) AS wanneer
+    SELECT 'post' AS soort, p.id AS id, ${isoSql('COALESCE(p.published_at, p.created_at)')} AS wanneer
       FROM posts p WHERE p.site_id = ? AND p.status = 'published' ${fanClause}
     UNION ALL
@@ -1927,5 +1927,5 @@
      FROM posts WHERE site_id = ? AND status = 'published' AND (fan_only IS NULL OR fan_only = 0)
        AND IFNULL(ap_visibility, 'public') = 'public'
-     ORDER BY COALESCE(published_at, created_at) DESC LIMIT 20`
+     ORDER BY ${isoSql('COALESCE(published_at, created_at)')} DESC LIMIT 20`
   ).all(site.id).reverse();
   if (!recent.length) return;
@@ -2085,5 +2085,5 @@
     `SELECT id FROM posts WHERE site_id = ? AND status = 'published' AND (fan_only IS NULL OR fan_only = 0)
        AND pinned IS NOT NULL AND pinned > 0
-     ORDER BY pinned DESC, COALESCE(published_at, created_at) ASC LIMIT 20`
+     ORDER BY pinned DESC, ${isoSql('COALESCE(published_at, created_at)')} ASC LIMIT 20`
   ).all(site.id);
   const removeIds = [...new Set([...pinned.map((p) => p.id), ...alsoRemove])];
Index: src/services/Scheduler.js
===================================================================
--- src/services/Scheduler.js	(revision 9946a68c3cdf4796d3e5ab4c7f6e3317e0f40984)
+++ src/services/Scheduler.js	(revision 1d1fdc97939238a96492ef7adccedc1b08f51985)
@@ -8,5 +8,5 @@
  */
 
-import db from '../config/database.js';
+import db, { NU_ISO } from '../config/database.js';
 import HtmlSanitizerService from './HtmlSanitizerService.js';
 import ActivityPubService from './ActivityPubService.js';
@@ -22,5 +22,5 @@
     if (!due.length) return 0;
     const upd = db.prepare(
-      "UPDATE posts SET status = 'published', published_at = COALESCE(published_at, publish_at, CURRENT_TIMESTAMP) WHERE id = ?"
+      `UPDATE posts SET status = 'published', published_at = COALESCE(published_at, publish_at, ${NU_ISO}) WHERE id = ?`
     );
     const ftsDel = db.prepare('DELETE FROM posts_fts WHERE post_id = ?');
Index: src/services/music/index.js
===================================================================
--- src/services/music/index.js	(revision 9946a68c3cdf4796d3e5ab4c7f6e3317e0f40984)
+++ src/services/music/index.js	(revision 1d1fdc97939238a96492ef7adccedc1b08f51985)
@@ -13,5 +13,5 @@
  */
 
-import db from '../../config/database.js';
+import db, { isoSql } from '../../config/database.js';
 import { AP_CONTEXT, PUBLIC, actorId, noteId, safeUrl, guessMediaType, buildHashtagList, pagedCollection, isMbid } from '../ap-core.js';
 import { afleidenUitInsluitingen, ingeslotenPlaylists, SOORTEN } from '../../assets/js/shared/post-music-type.js';
@@ -681,9 +681,9 @@
     const rijen = db.prepare(`
       SELECT id, slug, title, excerpt, content, cover_image_url, tags,
-             COALESCE(published_at, created_at) AS uit_wanneer
+             ${isoSql('COALESCE(published_at, created_at)')} AS uit_wanneer
       FROM posts
       WHERE site_id = ? AND status = 'published'
         AND content LIKE '%[[playlist:' || ? || ']]%'
-      ORDER BY COALESCE(published_at, created_at) DESC
+      ORDER BY ${isoSql('COALESCE(published_at, created_at)')} DESC
     `).all(siteId, playlistId);
     for (const p of rijen) {
