Index: src/services/Scheduler.js
===================================================================
--- src/services/Scheduler.js	(revision 5a394e5e8fa1cb373ca434e76f73e527e31aee58)
+++ src/services/Scheduler.js	(revision 015ce465e5c0358e84f12cd2ca3297d32e390cee)
@@ -16,5 +16,5 @@
       SELECT p.id, p.title, p.content, u.username
       FROM posts p JOIN users u ON u.id = p.author_id
-      WHERE p.status = 'scheduled' AND p.publish_at IS NOT NULL AND p.publish_at <= CURRENT_TIMESTAMP
+      WHERE p.status = 'scheduled' AND p.publish_at IS NOT NULL AND datetime(p.publish_at) <= datetime('now')
     `).all();
     if (!due.length) return 0;
Index: src/services/i18n.js
===================================================================
--- src/services/i18n.js	(revision 5a394e5e8fa1cb373ca434e76f73e527e31aee58)
+++ src/services/i18n.js	(revision 015ce465e5c0358e84f12cd2ca3297d32e390cee)
@@ -729,4 +729,5 @@
     'pedit.publish_at_label': 'Datum & tijd',
     'pedit.scheduled_for': 'Ingepland voor {d}',
+    'pedit.scheduled_prefix': 'Ingepland voor',
     'pedit.cancel': 'Annuleren',
     'pedit.publish': 'Publish',
@@ -1687,4 +1688,5 @@
     'pedit.publish_at_label': 'Date & time',
     'pedit.scheduled_for': 'Scheduled for {d}',
+    'pedit.scheduled_prefix': 'Scheduled for',
     'pedit.cancel': 'Cancel',
     'pedit.publish': 'Publish',
@@ -2645,4 +2647,5 @@
     'pedit.publish_at_label': 'Datum & Uhrzeit',
     'pedit.scheduled_for': 'Geplant für {d}',
+    'pedit.scheduled_prefix': 'Geplant für',
     'pedit.cancel': 'Abbrechen',
     'pedit.publish': 'Veröffentlichen',
Index: src/views/pages/post-edit.ejs
===================================================================
--- src/views/pages/post-edit.ejs	(revision 5a394e5e8fa1cb373ca434e76f73e527e31aee58)
+++ src/views/pages/post-edit.ejs	(revision 015ce465e5c0358e84f12cd2ca3297d32e390cee)
@@ -215,6 +215,6 @@
           <div id="pe-sched-fields" style="margin-top:6px;<%= _scheduled ? '' : 'display:none' %>">
             <label style="display:block;font-size:12.5px;opacity:.8;margin-bottom:4px"><%= t('pedit.publish_at_label') %></label>
-            <input type="datetime-local" name="publish_at" <%= _scheduled ? '' : 'disabled' %> value="<%= post.publish_at ? String(post.publish_at).replace(' ','T').slice(0,16) : '' %>" style="padding:8px 10px;border-radius:8px;border:1px solid var(--rule,rgba(128,128,128,.4));background:transparent;color:inherit">
-            <% if (post.status === 'scheduled' && post.publish_at) { %><div style="font-size:12px;opacity:.7;margin-top:4px">⏳ <%= t('pedit.scheduled_for', { d: post.publish_at }) %></div><% } %>
+            <input type="datetime-local" id="pe-publish-at" name="publish_at" <%= _scheduled ? '' : 'disabled' %> data-iso="<%= post.publish_at || '' %>" value="" style="padding:8px 10px;border-radius:8px;border:1px solid var(--rule,rgba(128,128,128,.4));background:transparent;color:inherit">
+            <% if (post.status === 'scheduled' && post.publish_at) { %><div style="font-size:12px;opacity:.7;margin-top:4px"><span id="pe-sched-when" data-iso="<%= post.publish_at %>" data-label="<%= t('pedit.scheduled_prefix') %>">⏳ <%= t('pedit.scheduled_for', { d: post.publish_at }) %></span></div><% } %>
             <div style="font-size:11.5px;opacity:.65;margin-top:4px"><%= t('pedit.schedule_hint') %></div>
           </div>
@@ -224,7 +224,39 @@
               var box = document.getElementById('pe-sched-fields');
               if (!cb || !box) return;
-              var inp = box.querySelector('input[name="publish_at"]');
+              var inp = document.getElementById('pe-publish-at');
+              var pad = function (n) { return String(n).padStart(2, '0'); };
+              // Prefill: opgeslagen UTC → lokale datetime-local-waarde (zodat je je
+              // eigen tijdzone ziet, niet UTC).
+              if (inp && inp.dataset.iso) {
+                var d0 = new Date(inp.dataset.iso);
+                if (!isNaN(d0)) inp.value = d0.getFullYear() + '-' + pad(d0.getMonth() + 1) + '-' + pad(d0.getDate()) + 'T' + pad(d0.getHours()) + ':' + pad(d0.getMinutes());
+              }
+              // "Ingepland voor" in leesbare lokale tijd i.p.v. ruwe UTC-ISO.
+              var when = document.getElementById('pe-sched-when');
+              if (when && when.dataset.iso) {
+                var dw = new Date(when.dataset.iso);
+                if (!isNaN(dw)) when.textContent = '⏳ ' + when.dataset.label + ' ' + dw.toLocaleString();
+              }
               function sync() { box.style.display = cb.checked ? '' : 'none'; if (inp) inp.disabled = !cb.checked; }
               cb.addEventListener('change', sync); sync();
+              // Bij opslaan: lokale invoer → UTC-ISO via een hidden veld, zodat de
+              // server de juiste tijd opslaat (datetime-local heeft geen tijdzone).
+              var form = cb.closest('form');
+              if (form) {
+                form.addEventListener('submit', function () {
+                  if (inp) inp.removeAttribute('name');
+                  var old = form.querySelector('input[data-pa-utc]');
+                  if (old) old.remove();
+                  if (cb.checked && inp && inp.value) {
+                    var d2 = new Date(inp.value); // geïnterpreteerd in browser-tijdzone
+                    if (!isNaN(d2)) {
+                      var h = document.createElement('input');
+                      h.type = 'hidden'; h.name = 'publish_at'; h.setAttribute('data-pa-utc', '');
+                      h.value = d2.toISOString();
+                      form.appendChild(h);
+                    }
+                  }
+                });
+              }
             })();
           </script>
