{"id":10539,"date":"2026-05-16T02:30:09","date_gmt":"2026-05-15T18:30:09","guid":{"rendered":"https:\/\/aeosub.com\/first-draft-feed\/"},"modified":"2026-05-16T02:30:09","modified_gmt":"2026-05-15T18:30:09","slug":"first-draft-feed","status":"publish","type":"post","link":"https:\/\/aeosub.com\/zh\/first-draft-feed\/","title":{"rendered":"First Draft Feed"},"content":{"rendered":"<div class=\"plugin-info-card\" style=\"border: 1px solid #e2e8f0;border-radius: 10px;overflow: hidden;margin-bottom: 30px;font-family: -apple-system, system-ui, sans-serif;background: #fff\">\n<table style=\"width: 100%;border-collapse: collapse;font-size: 14px\">\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 15px 20px;text-align: left;width: 35%;color: #4a5568;background: #fcfcfc\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/plugins\/geopattern-icon\/first-draft-feed.svg\" style=\"width: 40px;height: 40px;border-radius: 6px;margin-right: 12px;vertical-align: middle\"> Developer<\/th>\n<td style=\"padding: 15px 20px;font-weight: 500\"><a href=\"https:\/\/profiles.wordpress.org\/justinnealey\/\" target=\"_blank\" rel=\"noopener\">Justin Nealey<\/a><\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Version<\/th>\n<td style=\"padding: 12px 20px\">v1.0.0<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Active Installs<\/th>\n<td style=\"padding: 12px 20px\">0 +<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Requires \/ Tested<\/th>\n<td style=\"padding: 12px 20px\">6.4 \/ 6.9.4<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Last Updated<\/th>\n<td style=\"padding: 12px 20px\">2026-05-15 6:05pm GMT<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Official Link<\/th>\n<td style=\"padding: 12px 20px\"><a href=\"https:\/\/wordpress.org\/plugins\/first-draft-feed\/\" target=\"_blank\" style=\"text-decoration: none;color: #4a3bca;font-weight: bold\" rel=\"noopener\">View Details \u2192<\/a><\/td>\n<\/tr>\n<\/table><\/div>\n<div class=\"plugin-short-desc\" style=\"margin: 20px 0;padding: 12px 15px;background: #f9fafb;border-left: 4px solid #4a3bca;border-radius: 6px;font-style: italic;color: #4a5568\">Show a post&#039;s revision history as a readable, chronological feed.<\/div>\n<p>First Draft Feed is a WordPress block that renders a single post&#8217;s revision history as a readable, chronological feed. Each revision is a &#8220;moment&#8221; \u2014 timestamped, with a visual diff showing what changed. Readers follow the evolution of thinking, not just the finished product.<\/p>\n<p><strong>Who is this for?<\/strong><\/p>\n<ul>\n<li><strong>Writers<\/strong> who work in public and want to expose how their thinking evolved.<\/li>\n<li><strong>Readers<\/strong> who want to follow a post&#8217;s development over time like a story.<\/li>\n<li><strong>Site owners<\/strong> who want to control which posts expose their drafts and how much history is visible.<\/li>\n<\/ul>\n<p><strong>How it works<\/strong><\/p>\n<p>Drop the First Draft Feed block onto any post or page. It renders a feed of that post&#8217;s revision history, pulled from a custom REST API endpoint that safely surfaces WordPress revision data without requiring authentication.<\/p>\n<p>Each revision card shows:<\/p>\n<ul>\n<li>Timestamp \u2014 when the revision was saved<\/li>\n<li>Word count delta \u2014 e.g. &#8220;+ 312 words&#8221;<\/li>\n<li>Visual diff \u2014 additions and removals highlighted in context, rendered as clean text (no raw HTML diffs)<\/li>\n<\/ul>\n<p>The feed loads oldest-to-newest so readers experience the post as it was written.<\/p>\n<p><strong>Features<\/strong><\/p>\n<ul>\n<li>Per-post opt-in \u2014 revisions are only exposed when the author explicitly enables the feed<\/li>\n<li>Author notes \u2014 optional context shown at the top of the feed<\/li>\n<li>Three diff styles \u2014 inline, split, or summary view<\/li>\n<li>Image tracking \u2014 images in revisions are preserved and diffed alongside text<\/li>\n<li>Collapsible cards \u2014 readers expand only what interests them<\/li>\n<li>Max revision limit \u2014 cap how many revisions appear (1-50)<\/li>\n<li>Toggle individual elements \u2014 show or hide diffs, word counts, and timestamps<\/li>\n<li>Block supports \u2014 wide\/full alignment, background\/text color, spacing, and font size<\/li>\n<\/ul>\n<h3>Source Code<\/h3>\n<p>The files inside <code>build\/<\/code> are minified production output generated from the human-readable source in <code>src\/<\/code>. The build pipeline uses <code>@wordpress\/scripts<\/code> (webpack), declared in <code>package.json<\/code>.<\/p>\n<p>The canonical, public source repository \u2014 including the unminified <code>src\/<\/code> files, build configuration, and full development history \u2014 is hosted at:<\/p>\n<p>https:\/\/github.com\/jnealey88\/first-draft-feed<\/p>\n<p>To rebuild the production assets from source:<\/p>\n<pre><code>npm install\nnpm run build\n<\/code><\/pre>\n<p>This regenerates everything in <code>build\/<\/code> from <code>src\/<\/code>. Anyone reviewing, auditing, or forking the plugin can reproduce the distributed build with these two commands. See the README in the source repository for the full list of source files and development instructions.<\/p>","protected":false},"excerpt":{"rendered":"<p>Show a post&#039;s revision history as a readable, chronological feed.<\/p>","protected":false},"author":1,"featured_media":9317,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[252],"tags":[835,836,837,838,839,555],"class_list":["post-10539","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-diff","tag-draft","tag-feed","tag-history","tag-revisions","tag-wordpress-plugin"],"_links":{"self":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/10539","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/comments?post=10539"}],"version-history":[{"count":0,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/10539\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media\/9317"}],"wp:attachment":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media?parent=10539"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/categories?post=10539"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/tags?post=10539"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}