Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision 5e61b173e0211ca213200be10da0a4230dcc31cf)
+++ src/routes/posts.js	(revision 11b3ba5d922441b551b3a35ac8288a9c542a7d46)
@@ -186,5 +186,5 @@
   let publishAt = null;
   const pa = Date.parse(req.body.publish_at || '');
-  if (finalStatus === 'published' && Number.isFinite(pa) && pa > Date.now()) {
+  if (req.body.schedule_enabled && finalStatus === 'published' && Number.isFinite(pa) && pa > Date.now()) {
     finalStatus = 'scheduled';
     publishAt = new Date(pa).toISOString();
@@ -297,5 +297,5 @@
   let publishAt = null;
   const pa = Date.parse(req.body.publish_at || '');
-  if (finalStatus === 'published' && Number.isFinite(pa) && pa > Date.now()) {
+  if (req.body.schedule_enabled && finalStatus === 'published' && Number.isFinite(pa) && pa > Date.now()) {
     finalStatus = 'scheduled';
     publishAt = new Date(pa).toISOString();
Index: src/services/i18n.js
===================================================================
--- src/services/i18n.js	(revision 5e61b173e0211ca213200be10da0a4230dcc31cf)
+++ src/services/i18n.js	(revision 11b3ba5d922441b551b3a35ac8288a9c542a7d46)
@@ -725,5 +725,7 @@
     'pedit.noindex_label': 'noindex (verberg voor zoekmachines)',
     'pedit.fan_only_label': 'Alleen voor ingelogde fans',
-    'pedit.publish_at_label': 'Publiceren op (laat leeg = direct)',
+    'pedit.schedule_label': 'Publicatie inplannen',
+    'pedit.schedule_hint': 'Staat dit uit, dan gaat je post meteen live. Aan = kies hieronder wanneer \'ie verschijnt.',
+    'pedit.publish_at_label': 'Datum & tijd',
     'pedit.scheduled_for': 'Ingepland voor {d}',
     'pedit.cancel': 'Annuleren',
@@ -1676,5 +1678,7 @@
     'pedit.noindex_label': 'noindex (hide from search engines)',
     'pedit.fan_only_label': 'Logged-in fans only',
-    'pedit.publish_at_label': 'Publish at (leave empty = immediately)',
+    'pedit.schedule_label': 'Schedule publication',
+    'pedit.schedule_hint': 'When off, your post goes live immediately. On = pick below when it appears.',
+    'pedit.publish_at_label': 'Date & time',
     'pedit.scheduled_for': 'Scheduled for {d}',
     'pedit.cancel': 'Cancel',
@@ -2627,5 +2631,7 @@
     'pedit.noindex_label': 'noindex (vor Suchmaschinen verbergen)',
     'pedit.fan_only_label': 'Nur für angemeldete Fans',
-    'pedit.publish_at_label': 'Veröffentlichen am (leer lassen = sofort)',
+    'pedit.schedule_label': 'Veröffentlichung planen',
+    'pedit.schedule_hint': 'Wenn aus, geht dein Beitrag sofort live. An = wähle unten, wann er erscheint.',
+    'pedit.publish_at_label': 'Datum & Uhrzeit',
     'pedit.scheduled_for': 'Geplant für {d}',
     'pedit.cancel': 'Abbrechen',
Index: src/views/pages/post-edit.ejs
===================================================================
--- src/views/pages/post-edit.ejs	(revision 5e61b173e0211ca213200be10da0a4230dcc31cf)
+++ src/views/pages/post-edit.ejs	(revision 11b3ba5d922441b551b3a35ac8288a9c542a7d46)
@@ -208,9 +208,25 @@
             <span>🔒 <%= t('pedit.fan_only_label') %></span>
           </label>
-          <div style="margin-top:8px">
-            <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" 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">
+          <% var _scheduled = !!(post.publish_at && (post.status === 'scheduled' || Date.parse(String(post.publish_at).replace(' ', 'T')) > Date.now())); %>
+          <label class="pe-checkbox" style="margin-top:8px">
+            <input type="checkbox" name="schedule_enabled" value="1" id="pe-sched-toggle" <%= _scheduled ? 'checked' : '' %>>
+            <span>📅 <%= t('pedit.schedule_label') %></span>
+          </label>
+          <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><% } %>
+            <div style="font-size:11.5px;opacity:.65;margin-top:4px"><%= t('pedit.schedule_hint') %></div>
           </div>
+          <script>
+            (function () {
+              var cb = document.getElementById('pe-sched-toggle');
+              var box = document.getElementById('pe-sched-fields');
+              if (!cb || !box) return;
+              var inp = box.querySelector('input[name="publish_at"]');
+              function sync() { box.style.display = cb.checked ? '' : 'none'; if (inp) inp.disabled = !cb.checked; }
+              cb.addEventListener('change', sync); sync();
+            })();
+          </script>
         <% } %>
       </div>
