Index: src/views/pages/post-edit.ejs
===================================================================
--- src/views/pages/post-edit.ejs	(revision c45c1873a0dd747921d35135cbd7286e98789835)
+++ src/views/pages/post-edit.ejs	(revision d18c60e0878b426798d32187e85100a2262f1430)
@@ -105,4 +105,10 @@
                    inputmode="url" autocapitalize="none" spellcheck="false"
                    placeholder="<%= t('pedit.cover_url_placeholder') %>">
+          </label>
+          <label class="pe-field">
+            <span><%= t('pedit.f_cover_alt') %></span>
+            <input type="text" name="cover_alt" id="cover-alt-field" maxlength="1500"
+                   value="<%= post.cover_alt || '' %>"
+                   placeholder="<%= t('pedit.cover_alt_placeholder') %>">
           </label>
           <%# Muted loop MP4 for an animated cover (auto-made from an animated WebP). Hidden — set by the uploader. %>
Index: src/views/pages/post.ejs
===================================================================
--- src/views/pages/post.ejs	(revision c45c1873a0dd747921d35135cbd7286e98789835)
+++ src/views/pages/post.ejs	(revision d18c60e0878b426798d32187e85100a2262f1430)
@@ -20,5 +20,5 @@
   <% if (post.cover_image_url) { %>
     <figure class="post-cover">
-      <img src="<%= post.cover_image_url %>" alt=""<% if (post.cover_video_url) { %> data-ios-mp4="<%= post.cover_video_url %>"<% } %>>
+      <img src="<%= post.cover_image_url %>" alt="<%= post.cover_alt || '' %>"<% if (post.cover_video_url) { %> data-ios-mp4="<%= post.cover_video_url %>"<% } %>>
     </figure>
   <% } %>
