<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Givi Pataridze</title>
    <description>The latest articles on DEV Community by Givi Pataridze (@givip).</description>
    <link>https://dev.to/givip</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3937586%2F7cbb0972-0168-4397-8129-076950c2335d.jpg</url>
      <title>DEV Community: Givi Pataridze</title>
      <link>https://dev.to/givip</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/givip"/>
    <language>en</language>
    <item>
      <title>Publish blog posts from Claude Code and Codex with an MCP server</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Mon, 02 Nov 2026 15:43:53 +0000</pubDate>
      <link>https://dev.to/goodsender/publish-blog-posts-from-claude-code-and-codex-with-an-mcp-server-696</link>
      <guid>https://dev.to/goodsender/publish-blog-posts-from-claude-code-and-codex-with-an-mcp-server-696</guid>
      <description>&lt;p&gt;Your article is finished. It is sitting in &lt;code&gt;post.md&lt;/code&gt;, ready for readers. You still need to put it on your blog, write the announcements, and get each version to the right place.&lt;/p&gt;

&lt;p&gt;With GoodSender's MCP server connected to Claude Code or Codex, you can do that from the conversation where you work. Give the assistant your article, tell it where the post should go, and review the package before publishing.&lt;/p&gt;

&lt;p&gt;The assistant writes the accompanying copy. The MCP server gives it the tools to save your article, open a preview, publish it, and deliver the announcements you choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Connect the MCP server
&lt;/h2&gt;

&lt;p&gt;You need Claude Code or the Codex CLI installed, a &lt;a href="https://goodsender.com/login" rel="noopener noreferrer"&gt;GoodSender account&lt;/a&gt; with a blog set up, and your finished Markdown file in the assistant's working folder.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Claude Code&lt;/strong&gt;, run these commands from that folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http goodsender https://mcp.goodsender.com/
claude mcp login goodsender
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For &lt;strong&gt;Codex&lt;/strong&gt;, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex mcp add goodsender &lt;span class="nt"&gt;--url&lt;/span&gt; https://mcp.goodsender.com/
codex mcp login goodsender
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Complete the browser sign-in to connect your GoodSender workspace. If Claude Code needs authentication afterward, open &lt;code&gt;/mcp&lt;/code&gt; in its interactive session. In Codex, run &lt;code&gt;codex mcp login goodsender&lt;/code&gt; again if the connection needs a fresh sign-in.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://goodsender.com/docs/mcp/" rel="noopener noreferrer"&gt;GoodSender MCP connection guide&lt;/a&gt; covers setup and the publishing workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Hand over the article
&lt;/h2&gt;

&lt;p&gt;Open Claude Code or Codex in the folder containing your file and ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Save post.md as a draft on my GoodSender blog. Keep my wording
and show me a preview.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The assistant can read the file and call &lt;code&gt;create_post&lt;/code&gt; with the article and its title. That saves a draft. &lt;code&gt;create_post_preview&lt;/code&gt; returns a link where you can read it as a blog page.&lt;/p&gt;

&lt;p&gt;Open the preview and check the formatting, code blocks, and links. If you want a change, ask for it in the same conversation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use “How we simplified our deploy script” as the title.
Leave the body as it is and update the preview.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can keep the article exactly as written. The assistant is handling the publishing work around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Tell it which announcements to make
&lt;/h2&gt;

&lt;p&gt;Connect your dev.to account and any social accounts you want to use in GoodSender. Ask the assistant to check which destinations are available, then name the destinations and the kind of copy you want:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prepare an X announcement and a LinkedIn post.
Keep X short; use the practical takeaway for LinkedIn.
Also select dev.to for the full article. Show me the plan before publishing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The assistant prepares a separate announcement for each platform and saves the selection through &lt;code&gt;set_post_distribution&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Each destination has a different job:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Destination&lt;/th&gt;
&lt;th&gt;What goes there&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Your GoodSender blog&lt;/td&gt;
&lt;td&gt;The article at its public address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dev.to&lt;/td&gt;
&lt;td&gt;The full article, with a canonical URL pointing to your blog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;X, LinkedIn, Bluesky, Mastodon&lt;/td&gt;
&lt;td&gt;The selected platform's announcement text and a link to the article&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newsletter, if selected&lt;/td&gt;
&lt;td&gt;A subject, a short introduction, and a link to read the full post&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You choose which of these to include. For an email as well, ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add the newsletter. Write a subject and a short introduction
that gives subscribers a reason to read the full article.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The newsletter needs a configured sender and a public blog address, and goes to subscribers who have consented. Before sending, review its subject and introduction alongside the social copy. The article preview shows the blog page; ask the assistant to show the accompanying messages too.&lt;/p&gt;

&lt;p&gt;At this point, the delivery plan is saved and ready for your decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Publish the package
&lt;/h2&gt;

&lt;p&gt;When the article, copy, and destinations look right:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Publish the article with this distribution plan.
Show me the live links and the delivery result for each destination.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The assistant calls &lt;code&gt;publish_post&lt;/code&gt;. GoodSender publishes the blog page and starts delivery to the selected destinations: the full article to dev.to, the chosen announcements to your connected social accounts, and the newsletter if you included it.&lt;/p&gt;

&lt;p&gt;Ask the assistant to check &lt;code&gt;get_post_distribution&lt;/code&gt; afterward. It reports delivery status and errors for each destination. The blog can be live while an external delivery has failed, so check the results before treating the whole package as delivered.&lt;/p&gt;

&lt;p&gt;You started with a finished article. The remaining work—saving it, preparing the messages, choosing destinations, and publishing—fits into the same conversation.&lt;/p&gt;

&lt;p&gt;To try it with your next post, follow the &lt;a href="https://goodsender.com/docs/mcp/" rel="noopener noreferrer"&gt;MCP setup guide&lt;/a&gt; and bring your Markdown file.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI-designed blogs with 100-point results</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Fri, 30 Oct 2026 21:13:13 +0000</pubDate>
      <link>https://dev.to/goodsender/ai-designed-blogs-with-100-point-results-4ok3</link>
      <guid>https://dev.to/goodsender/ai-designed-blogs-with-100-point-results-4ok3</guid>
      <description>&lt;p&gt;A fashion journal with room for its photography. A personal blog with bold type and a compact reading list. A product publication with warm colors and editorial headlines.&lt;/p&gt;

&lt;p&gt;GoodSender's AI design tools can help you make a blog that feels like yours. The quality of the finished page matters just as much as the freedom to shape it.&lt;/p&gt;

&lt;p&gt;So we checked three live GoodSender blogs with Google PageSpeed Insights. &lt;strong&gt;All three homepages reached 100 for desktop performance.&lt;/strong&gt; Mobile homepage scores ranged from &lt;strong&gt;96 to 100&lt;/strong&gt; across the tests. And one customer article achieved &lt;strong&gt;100 in all four main categories, on both mobile and desktop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every tested homepage and article also scored &lt;strong&gt;100/100 for Accessibility on mobile and desktop&lt;/strong&gt;—a result worth highlighting for publishers who want to reach readers with disabilities.&lt;/p&gt;

&lt;p&gt;Here are the blogs behind those numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your style, on your domain
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.lemann.fashion/" rel="noopener noreferrer"&gt;Lemann Fashion Journal&lt;/a&gt; leads with a large fashion photograph, generous white space, and restrained black typography. The design gives the clothes and bags room to be seen, with stories and collection links below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa47koijbmzujot8mrokr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa47koijbmzujot8mrokr.webp" alt="Lemann Fashion Journal homepage with a large fashion photograph, black typography, white space, and the headline Style is personal." width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Lemann Fashion Journal: a visual, spacious design for a fashion brand.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pataridze.me/" rel="noopener noreferrer"&gt;Author's blog&lt;/a&gt; takes another direction: a dark header, condensed uppercase headlines, and a compact list of essays about building software with AI. Dates, reading times, and small thumbnails make it easy to scan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flj2ecx9kzey3pv9r94iw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flj2ecx9kzey3pv9r94iw.webp" alt="Author's blog homepage with a dark header, uppercase article headlines, small thumbnails, reading times, and topic tags." width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Author's blog: a compact personal publication with a different visual identity.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://blog.goodsender.com/" rel="noopener noreferrer"&gt;GoodSender Blog&lt;/a&gt; uses a warm cream background, serif headlines, and illustrated post cards. It looks like a publication about the product it belongs to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xp411qvnhm65cy6iudr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xp411qvnhm65cy6iudr.webp" alt="GoodSender Blog homepage with a cream background, large serif heading, rust-colored buttons, and illustrated article cards." width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;GoodSender Blog: warm colors and editorial typography.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These three blogs were created with GoodSender's AI design tools. They share a publishing platform while giving their brands different visual identities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We made no special, site-specific adjustments to improve these benchmark results.&lt;/strong&gt; We tested the live blogs with their own designs and published content.&lt;/p&gt;

&lt;p&gt;That is the appeal of &lt;a href="https://blog.goodsender.com/blog-ai-design" rel="noopener noreferrer"&gt;designing your blog in conversation&lt;/a&gt;: describe the look you want, bring your brand references, and refine the result. The design can cover your homepage, archive, tag pages, and articles together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The homepage scorecard
&lt;/h2&gt;

&lt;p&gt;We requested two PageSpeed analyses for each homepage on &lt;strong&gt;October 29, 2026&lt;/strong&gt;, recording mobile and desktop results. These ranges include both results:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Blog&lt;/th&gt;
&lt;th&gt;Mobile performance&lt;/th&gt;
&lt;th&gt;Desktop performance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GoodSender Blog&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;96–98&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99–100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lemann Fashion Journal&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98–99&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author's blog&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98–100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98–100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every homepage report also scored &lt;strong&gt;100 for Accessibility, 100 for Best Practices, and 100 for SEO&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The different designs matter here. The sample includes a fashion storefront's journal, a personal publication, and a software company's blog. Each reached the top desktop performance score with its own live layout and content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four 100s on a customer article
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.lemann.fashion/big-nicole-room-for-your-day" rel="noopener noreferrer"&gt;A Lemann Fashion blog post&lt;/a&gt; is a published product story with photography and details about the bag.&lt;/p&gt;

&lt;p&gt;Its first PageSpeed report returned:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Mobile&lt;/th&gt;
&lt;th&gt;Desktop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accessibility&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best Practices&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxa80n052ljcplj8ryis.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxa80n052ljcplj8ryis.webp" alt="Google PageSpeed Insights report for a Lemann Fashion blog post, dated October 29, 2026, showing mobile scores of 100 for Performance, Accessibility, Best Practices, and SEO." width="800" height="668"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Lemann Fashion blog post: 100 in all four main categories in this mobile report, October 29, 2026. Its desktop result in the same report also scored four 100s.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In that mobile test, its Largest Contentful Paint was &lt;strong&gt;1.8 seconds&lt;/strong&gt;, with &lt;strong&gt;zero measured layout shift&lt;/strong&gt;. The second report scored 99 for mobile performance and 100 on desktop; the other three categories stayed at 100.&lt;/p&gt;

&lt;p&gt;That is a concrete example of the result a GoodSender customer can achieve with an AI-designed blog.&lt;/p&gt;

&lt;p&gt;We also tested the first listed article on each of the other two homepages. Across both report requests, the article performance scores were:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Article&lt;/th&gt;
&lt;th&gt;Mobile&lt;/th&gt;
&lt;th&gt;Desktop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GoodSender: Blog + newsletter platform&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;85–86&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98–99&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lemann Fashion blog post&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99–100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author's blog: The AI visibility tool I connected to Claude&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;63–75&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;95–96&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Accessibility, Best Practices, and SEO remained &lt;strong&gt;100 in every article report&lt;/strong&gt;. The performance differences are a reason to test your actual posts as well as your homepage: a 100-point result belongs to the page and test that achieved it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Another view of loading speed
&lt;/h2&gt;

&lt;p&gt;We ran one WebPageTest on each of the same six URLs, selecting &lt;strong&gt;US, Mobile, and Regular4G&lt;/strong&gt;. The reports identified an iPhone 15 device profile, Chrome 152, and a 4G connection at 9 Mbps with 170 ms round-trip latency. The service assigned test locations in Columbus, Council Bluffs, and Los Angeles.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Largest Contentful Paint&lt;/th&gt;
&lt;th&gt;Total Blocking Time&lt;/th&gt;
&lt;th&gt;Layout shift (CLS)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GoodSender homepage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.41 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 ms&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GoodSender article&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.48 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;60 ms&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lemann homepage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.99 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 ms&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lemann Fashion blog post&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.63 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 ms&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author's blog homepage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.14 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;63 ms&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author's blog article&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.56 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;168 ms&lt;/td&gt;
&lt;td&gt;0.199&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Five pages recorded zero layout shift in these runs. The Author's blog article recorded 0.199, and WebPageTest also flagged one accessibility issue rated serious for review.&lt;/p&gt;

&lt;p&gt;Read these as a separate set of lab measurements: the device profile and network settings differ from the PageSpeed runs. The useful evidence is how each real page performed under the stated conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  100/100 Accessibility scores: a foundation for more readers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Every one of the six pages in our PageSpeed tests scored 100/100 for Accessibility in both device modes, across both report requests.&lt;/strong&gt; That makes accessibility one of the strongest results in this comparison.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.chrome.com/docs/lighthouse/accessibility/scoring" rel="noopener noreferrer"&gt;Lighthouse's automated accessibility checks&lt;/a&gt; cover issues such as text contrast, image alt attributes, accessible names for links and buttons, and page structure. These details serve people: &lt;a href="https://www.w3.org/WAI/perspective-videos/contrast/" rel="noopener noreferrer"&gt;sufficient contrast&lt;/a&gt; helps readers with low vision, while &lt;a href="https://www.w3.org/WAI/perspective-videos/speech/" rel="noopener noreferrer"&gt;well-structured content and text alternatives&lt;/a&gt; help screen-reader users navigate and understand a page.&lt;/p&gt;

&lt;p&gt;For publishers, that is a major benefit of these results: distinctive AI-designed blogs with a strong accessibility foundation for readers with disabilities. A 100/100 score reflects the automated checks included in the score; manual keyboard and screen-reader testing still matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  WAVE: 9.5–10 out of 10
&lt;/h3&gt;

&lt;p&gt;We also checked the same six pages with WAVE. Their &lt;strong&gt;Automated AIM scores ranged from 9.5 to 10 out of 10&lt;/strong&gt;. WAVE reports errors, contrast errors, and alerts separately:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;AIM / 10&lt;/th&gt;
&lt;th&gt;Errors&lt;/th&gt;
&lt;th&gt;Contrast errors&lt;/th&gt;
&lt;th&gt;Alerts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GoodSender homepage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GoodSender article&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lemann homepage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lemann Fashion blog post&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author's blog homepage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author's blog article&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both tested Lemann pages had no detected errors or contrast errors. WAVE flagged one contrast issue on each GoodSender page and one missing form label on each tested Author's blog page. Its alerts also called attention to details such as redundant links and small text.&lt;/p&gt;

&lt;p&gt;Those findings belong beside the high scores. WAVE's automated rating is one measure of accessibility; its detailed findings still need review, and a high score does not establish full accessibility or conformance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality beyond the performance circle
&lt;/h2&gt;

&lt;p&gt;Google's Rich Results Test found &lt;strong&gt;one valid Article item and one valid Breadcrumb item on each of the three tested articles&lt;/strong&gt;. Lemann's Article item had an optional author-URL warning and remained valid.&lt;/p&gt;

&lt;p&gt;The homepage reports also recorded &lt;strong&gt;zero layout shift in every test&lt;/strong&gt;. At a 390-pixel browser width, all three homepages fit without horizontal page overflow.&lt;/p&gt;

&lt;p&gt;These checks complement the design. GoodSender's publishing system supplies page metadata, canonical addresses, and structured data around the custom layout. Its RSS feed and sitemap are generated separately from the design, so the visual direction is not the whole publishing setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give your blog its own identity
&lt;/h2&gt;

&lt;p&gt;Bring the mood, typography, colors, or brand references you have in mind. Use GoodSender's designer to shape the publication, preview the pages, and refine the details.&lt;/p&gt;

&lt;p&gt;The examples above show what that can produce: distinctive blogs on their own domains, with real pages reaching the highest PageSpeed scores.&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://blog.lemann.fashion/" rel="noopener noreferrer"&gt;Lemann's journal&lt;/a&gt;, &lt;a href="https://pataridze.me/" rel="noopener noreferrer"&gt;Author's blog&lt;/a&gt;, and the &lt;a href="https://blog.goodsender.com/" rel="noopener noreferrer"&gt;GoodSender Blog&lt;/a&gt;. Then &lt;a href="https://goodsender.com/login" rel="noopener noreferrer"&gt;create a blog that looks like you&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;About the tests: the PageSpeed comparison covers six URLs and two PageSpeed report requests per URL, with both device modes recorded, on October 29, 2026. WebPageTest and WAVE each checked the same six URLs once that day; WAVE used its online evaluation tool. PageSpeed mobile tests used an emulated Moto G Power, slow 4G throttling, and Lighthouse 13.5.0. Scores can vary by page, content, and run. PageSpeed reported no real-user data; these are lab results, not a field Core Web Vitals pass or a guarantee for every blog. Automated accessibility and SEO scores do not establish full accessibility conformance or search rankings.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The AI visibility tool I connected to Claude</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Tue, 27 Oct 2026 16:26:06 +0000</pubDate>
      <link>https://dev.to/givip/the-ai-visibility-tool-i-connected-to-claude-1efg</link>
      <guid>https://dev.to/givip/the-ai-visibility-tool-i-connected-to-claude-1efg</guid>
      <description>&lt;p&gt;Imagine someone asking ChatGPT or Perplexity to recommend a product in your category. You want your product to be mentioned, described accurately, and considered in that answer. That is the kind of &lt;strong&gt;AI visibility&lt;/strong&gt; I'm talking about here.&lt;/p&gt;

&lt;p&gt;You'll see this work described as &lt;strong&gt;&lt;a href="https://developers.google.com/search/docs/fundamentals/ai-optimization-guide?content_language=English" rel="noopener noreferrer"&gt;AEO (answer engine optimization) or GEO (generative engine optimization)&lt;/a&gt;&lt;/strong&gt;. The practical aim is to help people discover your product through an AI-generated answer.&lt;/p&gt;

&lt;p&gt;That is what makes &lt;a href="https://peec.ai/" rel="noopener noreferrer"&gt;Peec AI&lt;/a&gt; interesting to me. Its recommendations come with evidence: content that keeps getting cited, catalogs that keep appearing in answers, and a reason to consider doing something about it. Connect it to Claude through MCP, and you can work through those recommendations with an assistant that helps turn them into concrete changes.&lt;/p&gt;

&lt;p&gt;If you build or market a product and already use Claude, this combination is worth a look.&lt;/p&gt;

&lt;p&gt;I'm working on &lt;a href="https://goodsender.com/" rel="noopener noreferrer"&gt;GoodSender&lt;/a&gt;, a platform that brings your company blog, newsletter, and transactional email into one place. You can publish on your own domain, reach subscribers by email, and manage your blog through Claude or another AI assistant using MCP.&lt;/p&gt;

&lt;p&gt;My goal is for GoodSender to appear when people ask AI tools for relevant product recommendations. Peec AI supplies the evidence and recommendations; Claude helps me put them to work.&lt;/p&gt;

&lt;h2&gt;
  
  
  recommendations with receipts
&lt;/h2&gt;

&lt;p&gt;What I like is that Peec gives me a reason to consider the work. A directory recommendation is useful when I can see why that directory matters. A content recommendation is useful when there is evidence for that kind of content.&lt;/p&gt;

&lt;p&gt;Paraphrasing the kinds of recommendations I mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A particular kind of content is cited repeatedly. It is worth creating something similar for the relevant topic.&lt;/li&gt;
&lt;li&gt;A particular catalog appears repeatedly in citations. It is worth listing the product there, with guidance on the keywords to use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The citation pattern gives the task a basis. It explains why this content or this catalog deserves attention.&lt;/p&gt;

&lt;p&gt;That is much more useful to me than a bare instruction to register somewhere or publish another listicle. I want enough context to judge the recommendation and then do the work properly.&lt;/p&gt;

&lt;p&gt;Peec's &lt;a href="https://docs.peec.ai/actions" rel="noopener noreferrer"&gt;Actions documentation&lt;/a&gt; describes the supporting evidence behind recommendations, including the sources and competitors contributing to a visibility gap. Claude brings that evidence into the conversation where I work through the task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvx5mj6825rl7emo3u5n8.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvx5mj6825rl7emo3u5n8.webp" alt="Restyled Peec Actions overview showing 2 site fixes, 8 page actions, 83 placement opportunities and two schema tasks." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;My Peec Actions overview, restyled for readability. The two open site fixes concern schema.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Peec gives me the recommendation and its foundation. Claude helps me relate it to GoodSender, account for the changes already made, and turn it into this week's work.&lt;/p&gt;

&lt;h2&gt;
  
  
  put your changes next to the visibility graph
&lt;/h2&gt;

&lt;p&gt;The other feature I particularly like is the timeline.&lt;/p&gt;

&lt;p&gt;Peec lets me look at the visibility graph with markers showing the work done and when it happened. That puts logged actions and visibility data in the same view. When visibility moves, there is a record of what we were changing around that time.&lt;/p&gt;

&lt;p&gt;Peec calls this view &lt;strong&gt;Impact&lt;/strong&gt;. In-progress and completed actions appear as markers on the visibility timeline, so you can review subsequent performance alongside the work. &lt;a href="https://peec.ai/blog/turn-opportunities-into-impact-with-peec-agent-and-actions" rel="noopener noreferrer"&gt;Its description of the feature&lt;/a&gt; also makes the limit clear: a marker does not prove that one action caused a particular movement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F165atwskrsohdxygr189.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F165atwskrsohdxygr189.webp" alt="Illustrative Peec Impact timeline with a rising cyan curve and markers for a site fix, content update and review. Labeled as an example, not GoodSender results." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Illustration of the timeline concept. The rising curve is hypothetical; it does not show GoodSender's measured results.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For me, the value is being able to connect the work with what happened afterward and investigate it. A change has a date and a description. The graph has context.&lt;/p&gt;

&lt;p&gt;That fits the weekly process well. The task list tells me what to do; the timeline helps me review what happened after we did it.&lt;/p&gt;

&lt;h2&gt;
  
  
  how I put it to work for GoodSender
&lt;/h2&gt;

&lt;p&gt;I created a project in Claude Desktop called &lt;strong&gt;Goodsender analytics&lt;/strong&gt; and connected Peec AI through its MCP server.&lt;/p&gt;

&lt;p&gt;Peec tracks how the brand appears in the AI answers it monitors and supplies recommendations. Its MCP connection lets Claude query that data, inspect the sources appearing in those answers, and work with the recommended actions. &lt;a href="https://docs.peec.ai/mcp/introduction" rel="noopener noreferrer"&gt;Peec's MCP documentation&lt;/a&gt; describes that connection.&lt;/p&gt;

&lt;p&gt;Then I set up a recurring report in Claude's scheduler for every Monday.&lt;/p&gt;

&lt;p&gt;The job has three parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the GoodSender website and what has changed.&lt;/li&gt;
&lt;li&gt;Compare those changes with the recommendations from Peec AI.&lt;/li&gt;
&lt;li&gt;Create tasks for me to work on during the coming week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The second step is what makes the report useful to me. The site review and the recommendations need to meet: what have we already addressed, what still needs work, and what should happen next?&lt;/p&gt;

&lt;p&gt;Claude helps turn that into work I can follow through on. During the week, we make the changes. The next report brings the updated site back into the analysis.&lt;/p&gt;

&lt;p&gt;For anyone setting up something similar, &lt;a href="https://support.claude.com/en/articles/13854387-schedule-recurring-tasks-in-claude-cowork" rel="noopener noreferrer"&gt;Claude's scheduling documentation&lt;/a&gt; covers recurring tasks that use connected tools. My cadence is Monday; the useful part is having the review happen regularly.&lt;/p&gt;

&lt;p&gt;Here is a compact version of the brief, reconstructed from my workflow rather than copied from the scheduled job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Every Monday, review goodsender.com and the changes to the site.

Use the connected Peec AI project to review whether GoodSender
is mentioned in the AI answers being tracked, which sources
are cited, and what Peec recommends. Compare the website
changes with those recommendations.

Create a practical task list for this week. Explain the
evidence behind each task and what needs to change.

Keep Peec's findings separate from your own interpretation,
and flag anything you cannot verify.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those final instructions make the example explicit about evidence. They are useful constraints to add when adapting it to your own product.&lt;/p&gt;

&lt;h2&gt;
  
  
  where I would start
&lt;/h2&gt;

&lt;p&gt;If you are curious about the combination, start with one recommendation for your product. Ask Claude to explain the evidence behind it, connect it to the page or source involved, and propose a specific piece of work.&lt;/p&gt;

&lt;p&gt;That gives you something useful to judge: whether the evidence is relevant, whether the recommendation makes sense for your product, and whether the proposed change is worth doing.&lt;/p&gt;

&lt;p&gt;For me, that is the appeal of Peec AI with Claude. I can see why a task deserves attention, work through it, and return to the timeline as the data develops.&lt;/p&gt;

&lt;p&gt;I've only been using Peec AI for a couple of weeks, so it's too early to talk about results. I'll share them here when they're available.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Blog + newsletter platform: one idea, ready for your readers</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Thu, 22 Oct 2026 16:16:15 +0000</pubDate>
      <link>https://dev.to/goodsender/blog-newsletter-platform-one-idea-ready-for-your-readers-3bkk</link>
      <guid>https://dev.to/goodsender/blog-newsletter-platform-one-idea-ready-for-your-readers-3bkk</guid>
      <description>&lt;p&gt;You know that idea you keep meaning to write about?&lt;/p&gt;

&lt;p&gt;The one in your notes. The explanation you gave a customer last week. The opinion you nearly posted, then dropped because turning it into an article, an email, and a few social posts felt like a whole afternoon.&lt;/p&gt;

&lt;p&gt;Give it to your AI assistant with GoodSender connected:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's my idea. Turn it into an illustrated blog post, a newsletter, and posts for X, LinkedIn, and dev.to. Get everything ready for my review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then open what comes back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your idea, ready to meet its readers
&lt;/h2&gt;

&lt;p&gt;The article is there, with images, a title, and SEO and AEO optimization built into the publishing process. It lives on your own domain or a short GoodSender address. Want it to look like yours and nobody else's? &lt;a href="https://blog.goodsender.com/blog-ai-design" rel="noopener noreferrer"&gt;Describe the design you want&lt;/a&gt; and refine it in chat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff18xo2t37aph86nwksyl.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff18xo2t37aph86nwksyl.webp" alt="blog-images\_821910bd-65c9-472b-94ad-446357e33bd2\_3ec99aa1-9d2c-4a39-aa9c-1509a381cb99\_w1280" width="799" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The newsletter is there too. A subject line written for a crowded inbox, and a short email that gives subscribers a reason to click through to the full post. It is a separate piece of writing with one job, not the article pasted into an email.&lt;/p&gt;

&lt;p&gt;That is the difference between a blog + newsletter platform and a blog with an email plugin: when the article is done, the invitation to read it is done as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first line matters outside the inbox, too
&lt;/h2&gt;

&lt;p&gt;Your X post opens with a hook and fits the character limit. Your LinkedIn post gets its own opening, written for the people who follow you there. Both link back to the original.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9oghnwbgfz0wvyuwhqcl.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9oghnwbgfz0wvyuwhqcl.webp" alt="blog-images\_821910bd-65c9-472b-94ad-446357e33bd2\_7bd27762-7dba-46f4-8bf3-781859d0b18b\_w1280" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your dev.to version carries the full article, with a canonical URL naming your blog as the source.&lt;/p&gt;

&lt;p&gt;All of it comes from the idea you started with. Review it, ask for changes, and approve the destinations. That is the &lt;a href="https://blog.goodsender.com/a-blog-for-people-who-don-t-have-time-to-blog" rel="noopener noreferrer"&gt;idea-to-publication workflow&lt;/a&gt; GoodSender is built around. Prefer to write every word yourself? Write in the editor. The same publishing workflow follows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give that idea somewhere to go
&lt;/h2&gt;

&lt;p&gt;Behind the newsletter is Laneful, the email infrastructure built by the team behind SendGrid. GoodSender puts that delivery foundation under your blog, so the email side of publishing is already in place when your first subscriber signs up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5187hr0hl7wp9dio2oeg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5187hr0hl7wp9dio2oeg.webp" alt="blog-images\_821910bd-65c9-472b-94ad-446357e33bd2\_5c692359-089e-47f3-aadc-4aa417b6887e\_w1280" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You already have the first idea.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://goodsender.com/login" rel="noopener noreferrer"&gt;&lt;strong&gt;See what it becomes with GoodSender.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Your blog no longer has to look like a template</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Tue, 13 Oct 2026 18:04:56 +0000</pubDate>
      <link>https://dev.to/goodsender/your-blog-no-longer-has-to-look-like-a-template-1i62</link>
      <guid>https://dev.to/goodsender/your-blog-no-longer-has-to-look-like-a-template-1i62</guid>
      <description>&lt;p&gt;Until now, every GoodSender blog started from the same template. Your posts were your own, but the page around them was shared with every other blog on the platform.&lt;/p&gt;

&lt;p&gt;Starting today, you can describe the blog you want and get a design made for it. Open &lt;strong&gt;Design&lt;/strong&gt; in your GoodSender dashboard and tell the assistant what you have in mind. It designs every page of the blog: the landing page, the archive, tag pages, and the post page. Then you refine the result in conversation.&lt;/p&gt;

&lt;p&gt;The designer is available on every GoodSender account, with no usage limits at launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a description, a link, or your brand files
&lt;/h2&gt;

&lt;p&gt;Describe how the blog should feel: the mood, the colors, the typefaces, the people who read it. A couple of sentences is enough to start:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A blog for a small product studio. Calm, lots of white space, one warm accent color, serif headlines. Put a subscribe form under every post."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you already have a brand, give the assistant something to work from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attach your logo as a PNG, JPEG, GIF, or WebP, and it can use the image as the blog's logo or favicon.&lt;/li&gt;
&lt;li&gt;Attach a brand guide as a PDF or a text file.&lt;/li&gt;
&lt;li&gt;Paste a link to a public page, such as your company website. The assistant reads the text of that page. A page that only renders in the browser may come back empty.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The assistant designs the four page types together. By default, it keeps the header, footer, navigation, and typography consistent across them, so the blog reads as one design system rather than four separate pages. If you want the pages to differ more, say so.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same posts, five designs
&lt;/h2&gt;

&lt;p&gt;Each design below was made with the designer, and all five show the same six demo posts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9881crc6ysnfg9t6i18.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9881crc6ysnfg9t6i18.webp" alt="A dark, terminal-style blog landing page with a green Subscribe button, a dated list of six posts, and tag chips" width="800" height="739"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A terminal-style blog for developers: a compact post list, read times, and tags.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff550ztsgw3ync1knvuw2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff550ztsgw3ync1knvuw2.webp" alt="An editorial blog called The Marketing Notebook with serif headlines, a featured latest post, a three-column grid of posts, and a dark subscribe block" width="800" height="1077"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;An editorial look for a consultant: a featured latest post and a weekly subscribe block.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapxrxa3hmvkvncd4ph0a.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapxrxa3hmvkvncd4ph0a.webp" alt="A clean blog called Product Updates with tag chips, a centered subscribe form, and post cards with cover images" width="800" height="929"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A product updates blog for a startup: tag chips, a subscribe form up top, and cards with covers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4azwf8uh0zn78jwi4lk3.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4azwf8uh0zn78jwi4lk3.webp" alt="A bold blog called Six Seven with condensed uppercase headlines, a yellow subscribe box, and numbered post cards" width="800" height="1051"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A loud, playful design with big type and numbered cards.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7nkw748nh1rn90ww6jnu.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7nkw748nh1rn90ww6jnu.webp" alt="A retro blog styled like an old desktop, with the tags, post list, and subscribe form shown in separate windows" width="800" height="851"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A retro desktop theme, where the post list and the subscribe form live in windows.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Refine it the way you would with a designer
&lt;/h2&gt;

&lt;p&gt;The preview updates after each change. Ask for anything: colors, fonts, images, text.&lt;/p&gt;

&lt;p&gt;Some changes are easier to point at than to describe. Press &lt;strong&gt;Pick&lt;/strong&gt;, click an element in the preview, and write what should change, for example "make this smaller" or "move this under the title". The assistant edits that element on that page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxs87wgpctp7tb7wg1tw5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxs87wgpctp7tb7wg1tw5.webp" alt="The GoodSender design editor: the assistant chat on the left after a request to make the style more compact, and the landing page preview on the right with the hero section picked" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then test the design against content it was not drawn for. Switch the preview between the landing, archive, tag, and post pages. Resize it to see how the layout behaves on a narrow screen. Open &lt;strong&gt;Contents&lt;/strong&gt; to fill the preview with sample posts: long and short titles, posts with and without covers, tables, lists, and code.&lt;/p&gt;

&lt;p&gt;Each change becomes a checkpoint. If a direction doesn't work, go back to an earlier one. Going back removes the checkpoints after it. When you like the result, save the design and make it live. You can keep several designs and change which one is live later.&lt;/p&gt;

&lt;h2&gt;
  
  
  A new look on the same SEO and AEO foundation
&lt;/h2&gt;

&lt;p&gt;A redesign shouldn't cost you the work that makes a blog findable. The design decides how your blog looks. GoodSender still adds the tags that tell search engines and AI systems what each page is.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The design decides&lt;/th&gt;
&lt;th&gt;GoodSender adds to every page&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Layout, colors, and typography&lt;/td&gt;
&lt;td&gt;Page title and meta description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Header, footer, navigation, and logo&lt;/td&gt;
&lt;td&gt;Canonical URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How post lists and cards look&lt;/td&gt;
&lt;td&gt;Open Graph tags for social cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The subscribe form's look and wording&lt;/td&gt;
&lt;td&gt;Structured data (JSON-LD)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Your RSS feed, sitemap, and llms.txt are generated outside the design, so a redesign doesn't touch them. Pages are rendered on the server as HTML, so crawlers and AI assistants can read your posts without running an app first. The pages stay lightweight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Or design it from your own agent
&lt;/h2&gt;

&lt;p&gt;The same design tools are available through the GoodSender MCP server. If you already work with Claude or Codex, ask it to design your blog. It can create the design, refine it, and make it live from the same chat.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>GoodSender vs Ghost vs Substack vs beehiiv: an honest comparison</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Fri, 09 Oct 2026 05:18:52 +0000</pubDate>
      <link>https://dev.to/goodsender/goodsender-vs-ghost-vs-substack-vs-beehiiv-an-honest-comparison-1m29</link>
      <guid>https://dev.to/goodsender/goodsender-vs-ghost-vs-substack-vs-beehiiv-an-honest-comparison-1m29</guid>
      <description>&lt;p&gt;If you want to earn from your writing or grow an audience inside a platform's network, pick Ghost, Substack or beehiiv. GoodSender is built for a different job: a blog on your own domain with free, reliable email to your subscribers. You write in the editor yourself, or let Claude or Codex help. Below is what the four have in common, what GoodSender adds, and where the others go further. Everything is based on each vendor's own pricing pages and docs, checked October 8, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What all four have in common
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;GoodSender&lt;/th&gt;
&lt;th&gt;Ghost&lt;/th&gt;
&lt;th&gt;Substack&lt;/th&gt;
&lt;th&gt;beehiiv&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free way to start&lt;/td&gt;
&lt;td&gt;Free on your own domain&lt;/td&gt;
&lt;td&gt;Free if you self-host; Ghost(Pro) from $18/month&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free plan, up to 2,500 subscribers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your own domain&lt;/td&gt;
&lt;td&gt;Yes, required to go public&lt;/td&gt;
&lt;td&gt;Free custom domain&lt;/td&gt;
&lt;td&gt;One time $50&lt;/td&gt;
&lt;td&gt;Paid plans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Site and search basics&lt;/td&gt;
&lt;td&gt;Sitemap, RSS, canonical tags, no setup&lt;/td&gt;
&lt;td&gt;Advanced SEO tools, RSS&lt;/td&gt;
&lt;td&gt;SEO settings&lt;/td&gt;
&lt;td&gt;Website builder on every plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email to subscribers&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The basics are covered everywhere: a site for your posts, your own domain, and email to subscribers. The differences are in cost, workflow and growth tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What GoodSender adds
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;GoodSender&lt;/th&gt;
&lt;th&gt;Ghost&lt;/th&gt;
&lt;th&gt;Substack&lt;/th&gt;
&lt;th&gt;beehiiv&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Email pricing&lt;/td&gt;
&lt;td&gt;Free up to 100,000 emails a month, priced on emails sent&lt;/td&gt;
&lt;td&gt;Rises with members: $105/month at 10,000 (Publisher)&lt;/td&gt;
&lt;td&gt;Free; 10% of paid subscriptions&lt;/td&gt;
&lt;td&gt;Rises with subscribers: $139/month at 10,000 (Lite)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work with Claude or Codex&lt;/td&gt;
&lt;td&gt;Official MCP and CLI: draft, preview, publish&lt;/td&gt;
&lt;td&gt;No official MCP server&lt;/td&gt;
&lt;td&gt;Official API is read only&lt;/td&gt;
&lt;td&gt;Official MCP writes drafts; you publish in the app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Share on publish&lt;/td&gt;
&lt;td&gt;LinkedIn, X, Bluesky, Mastodon, dev.to, Hashnode&lt;/td&gt;
&lt;td&gt;Social web distribution&lt;/td&gt;
&lt;td&gt;Video to YouTube and LinkedIn&lt;/td&gt;
&lt;td&gt;Not listed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Email that stays free as you grow.&lt;/strong&gt; A weekly post to 10,000 subscribers is about 43,000 emails a month: free on GoodSender, and $10 a month once you pass 100,000 emails. Every subscriber confirms by double opt-in, inactive readers are asked to reconfirm after 120 days, and unsubscribes and complaints are suppressed automatically. Sending runs on Laneful, built by the team behind SendGrid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI help when you want it.&lt;/strong&gt; Write everything yourself, or ask Claude or Codex to help with a draft, a preview or the publish step. beehiiv's MCP stops at drafts that "must be published from the app". Ghost has no official MCP server, and Substack's API only reads public data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One publish, many places.&lt;/strong&gt; A post can be announced on four social networks and republished on dev.to and Hashnode with a canonical link back to your blog. Pages need no search setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Ghost, Substack and beehiiv go further
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;GoodSender&lt;/th&gt;
&lt;th&gt;Ghost&lt;/th&gt;
&lt;th&gt;Substack&lt;/th&gt;
&lt;th&gt;beehiiv&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Paid subscriptions&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes, 0% Ghost fee&lt;/td&gt;
&lt;td&gt;Yes, Substack keeps 10%&lt;/td&gt;
&lt;td&gt;Yes, 0% take rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discovery network&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Recommendations, Explore network, referrals&lt;/td&gt;
&lt;td&gt;Recommendations, Notes, app, referrals&lt;/td&gt;
&lt;td&gt;Recommendation network, ad network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Comments and community&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Comments&lt;/td&gt;
&lt;td&gt;Comments, chat, Notes&lt;/td&gt;
&lt;td&gt;Not listed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Themes and design&lt;/td&gt;
&lt;td&gt;GoodSender templates; AI design generation in development&lt;/td&gt;
&lt;td&gt;Marketplace and custom themes (Publisher and up)&lt;/td&gt;
&lt;td&gt;Not listed&lt;/td&gt;
&lt;td&gt;Website builder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Import existing posts&lt;/td&gt;
&lt;td&gt;Subscribers only&lt;/td&gt;
&lt;td&gt;Not listed&lt;/td&gt;
&lt;td&gt;Posts and subscribers from 12+ platforms&lt;/td&gt;
&lt;td&gt;Not listed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sources: &lt;a href="https://ghost.org/pricing/" rel="noopener noreferrer"&gt;Ghost pricing&lt;/a&gt;, &lt;a href="https://github.com/TryGhost/Ghost" rel="noopener noreferrer"&gt;Ghost on GitHub&lt;/a&gt;; &lt;a href="https://substack.com/features" rel="noopener noreferrer"&gt;Substack features&lt;/a&gt;, &lt;a href="https://support.substack.com/hc/en-us/articles/360051222571-How-do-I-set-up-my-custom-domain-on-Substack" rel="noopener noreferrer"&gt;custom domain&lt;/a&gt;, &lt;a href="https://support.substack.com/hc/en-us/articles/4407702258836-How-can-I-optimize-my-Substack-publication-for-SEO" rel="noopener noreferrer"&gt;SEO&lt;/a&gt;, &lt;a href="https://substack.com/api-tos" rel="noopener noreferrer"&gt;API terms&lt;/a&gt;; &lt;a href="https://www.beehiiv.com/pricing" rel="noopener noreferrer"&gt;beehiiv pricing&lt;/a&gt;, &lt;a href="https://www.beehiiv.com/support/article/39255979546263-getting-started-with-the-beehiiv-mcp" rel="noopener noreferrer"&gt;beehiiv MCP&lt;/a&gt;. "Not listed" means we did not find it on the vendor's pricing or feature pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one should you choose?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ghost&lt;/strong&gt;: paid memberships, deep design control or self-hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Substack&lt;/strong&gt;: readers through its network and app, at 10% of paid subscriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;beehiiv&lt;/strong&gt;: growth and monetization tools such as recommendation and ad networks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GoodSender&lt;/strong&gt;: your own domain, free email to your readers, and AI help when you want it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is there a free blog platform with email on your own domain?
&lt;/h3&gt;

&lt;p&gt;GoodSender: the blog on your own domain is free, and so are up to 100,000 emails a month to your subscribers. Substack is also free to send, with a one time $50 for a custom domain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which blog platform works best with Claude?
&lt;/h3&gt;

&lt;p&gt;Of these four, only GoodSender has an official MCP server that lets Claude help with the whole post, from draft to publish. beehiiv's official MCP creates drafts that you publish in beehiiv.&lt;/p&gt;

&lt;p&gt;Start your blog on GoodSender if these trade-offs work for you.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why readers stop trusting AI-polished writing</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Tue, 06 Oct 2026 08:52:52 +0000</pubDate>
      <link>https://dev.to/goodsender/why-readers-stop-trusting-ai-polished-writing-33ke</link>
      <guid>https://dev.to/goodsender/why-readers-stop-trusting-ai-polished-writing-33ke</guid>
      <description>&lt;p&gt;You open a post on a topic you care about. Three lines in, something feels off. The rhythm is too even. Every paragraph closes with a neat little lesson. You keep scrolling, but you no longer trust the author.&lt;/p&gt;

&lt;p&gt;The topic did not get worse. Your trust in the text did.&lt;/p&gt;

&lt;p&gt;Bynder ran a &lt;a href="https://www.bynder.com/en/press-media/ai-vs-human-made-content-study/" rel="noopener noreferrer"&gt;test with 2,000 people in the US and UK&lt;/a&gt; in 2024. Readers compared two short articles, one written by ChatGPT and one by a person. Only half could tell which one the machine wrote. Without labels, 56% preferred the AI version. Yet 52% said they felt less engaged once they learned a text was AI-generated. So readers are not great detectors. What changes their attitude is the belief that nobody wrote the text.&lt;/p&gt;

&lt;p&gt;That was 2024, and the gap has only become clearer. In a &lt;a href="https://doubleverify.com/company/newsroom/doubleverify/yougov-study-finds-fewer-than-half-of-uk-consumers-say-they-can-identify-ai-generated-content-online" rel="noopener noreferrer"&gt;July 2026 DoubleVerify and YouGov survey&lt;/a&gt; of 2,000 UK consumers, 92% said AI-generated content undermines trust online. Only 41% felt confident they could spot it.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI is the secretary, not the author
&lt;/h2&gt;

&lt;p&gt;I think of AI as a good secretary. It fixes my grammar, tightens a paragraph, and points out where an idea needs more room. It does not decide what the post is about. The direction, the main thought, and anything new in it have to come from me. When that order flips, I think readers feel it, even if they cannot point to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F974cwshoc45n0786350f.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F974cwshoc45n0786350f.webp" alt="Two paper cards. You, the author: direction, main thought, what's new. AI, the secretary: fixes grammar, tightens, shows where to expand." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wikipedia editors have collected what they notice into a guide called &lt;a href="https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing" rel="noopener noreferrer"&gt;Signs of AI writing&lt;/a&gt;, maintained by &lt;a href="https://en.wikipedia.org/wiki/Wikipedia:WikiProject_AI_Cleanup" rel="noopener noreferrer"&gt;WikiProject AI Cleanup&lt;/a&gt;. It lists inflated claims about significance, vague attributions, forced groups of three, and the overused em dash. The guide also warns that it is &lt;a href="https://flowingdata.com/2025/10/20/signs-of-ai-writing-on-wikipedia/" rel="noopener noreferrer"&gt;not a ban on words or punctuation&lt;/a&gt;, and that the signs matter in combination.&lt;/p&gt;

&lt;p&gt;Some of these signs are already aging. The em dash, the most famous one, is disappearing from new models. In a &lt;a href="https://venturebeat.com/data/claude-opus-5-5-uses-em-dashes-99-less-often-and-sounds-more-human-but-still-exhibits-2-548-ai-writing-tells" rel="noopener noreferrer"&gt;Graphite study reported by VentureBeat&lt;/a&gt; in September 2026, Claude Opus 5.5 used about 99% fewer em dashes than Opus 5, and &lt;a href="https://blog.pebblous.ai/report/opus-5-5-em-dash-ai-tells-drift/en/" rel="noopener noreferrer"&gt;far fewer than the human articles&lt;/a&gt; in the same test. &lt;a href="https://www.bleepingcomputer.com/news/artificial-intelligence/claude-opus-55-uses-95-percent-fewer-em-dashes-but-its-answers-are-getting-longer/" rel="noopener noreferrer"&gt;Arena measured a 95% drop&lt;/a&gt; on its own prompts. A text without em dashes proves nothing anymore. Graphite still found 2,548 other words and phrases that Opus 5.5 uses at least twice as often as human writers.&lt;/p&gt;

&lt;p&gt;Someone turned that guide into an agent skill. &lt;a href="https://github.com/blader/humanizer" rel="noopener noreferrer"&gt;Humanizer&lt;/a&gt; is an open-source skill for Claude Code, Codex, and similar agents that rewrites text to remove those patterns while keeping the meaning. It is a good start and it cuts some filler. Still, I see three problems it does not fully solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem one: it is too long
&lt;/h2&gt;

&lt;p&gt;Real people rarely write texts this long. A person with something to say usually says it and stops, while a model keeps going.&lt;/p&gt;

&lt;p&gt;One study suggests why length gets rewarded. In 2023, &lt;a href="https://arxiv.org/abs/2310.10076" rel="noopener noreferrer"&gt;Saito and colleagues&lt;/a&gt; found that GPT-4, used as a judge of answers, favored longer responses more strongly than human judges did. When machines grade machines, length can look like quality.&lt;/p&gt;

&lt;p&gt;The habit has not gone away with newer models. In the same Arena comparison, average answers grew from 453 words with Opus 5 to 481 with Opus 5.5, even as sentences got shorter.&lt;/p&gt;

&lt;p&gt;The best antidote I know is older than AI drafts. &lt;a href="https://sokratil.ru/" rel="noopener noreferrer"&gt;«Пиши, сокращай»&lt;/a&gt; ("Write, Shorten") by Maxim Ilyakhov and Lyudmila Sarycheva is a Russian-language book on clear business writing. Its first edition came out in 2016 and sold 500,000 copies. The 2025 edition was reworked and adds a chapter on the editor's career and neural networks. Its core idea fits on a sticky note: find the words that carry no meaning and remove them. That works on an AI draft as well as on a human one. The book's method is already available as an agent skill: &lt;a href="https://github.com/iamursky/sokrati" rel="noopener noreferrer"&gt;sokrati&lt;/a&gt; is an open-source Claude skill with versions in seven languages, and the English one is called shorten.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem two: it has no mistakes
&lt;/h2&gt;

&lt;p&gt;AI almost always follows the rules. A polished AI draft has every comma in place and every word spelled right. People are not like that.&lt;/p&gt;

&lt;p&gt;When I see a typo, I know the text was not written by AI. Yes, a mistake costs a writer some credibility. Today I think that cost is worth paying. A human with a few errors is worth more to readers than a flawless text with no person behind it. What matters is the signal the reader picks up without noticing it: a human wrote this.&lt;/p&gt;

&lt;p&gt;Research narrows this idea. In 2024, &lt;a href="https://www.journals.uchicago.edu/doi/10.1086/728412" rel="noopener noreferrer"&gt;Bluvstein, Zhao, Barasch, and Schroeder&lt;/a&gt; ran seven studies with 3,399 participants on customer-service chats. Agents who made a typo and then corrected it were seen as more human and more helpful than agents who made no typos, and more than agents who left the typo in place. In this study, the correction did the humanizing. A typo left in place did not help.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rar2m88b9y8gubk2r2p.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rar2m88b9y8gubk2r2p.webp" alt="Illustration of three versions of the same chat reply: no typo, a typo left in, and a typo followed by a correction. The corrected one is circled with the note: seen as more human and more helpful." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here is an idea for a skill. Call it a mistakaizer: it would add a few human imperfections to an AI-polished text. A typo fixed in the next line, or a paragraph that runs a little long. The goal is that the reader feels, without thinking about it, that a person is on the other side.&lt;/p&gt;

&lt;p&gt;I am not sure it should exist. If readers trust typos because machines do not make them, planting typos on purpose spends that trust. On the other hand, if your own draft had those quirks before the AI smoothed them away, restoring them is closer to repair than to forgery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem three: it is the wrong English
&lt;/h2&gt;

&lt;p&gt;Many people writing in English are not native speakers, and many native speakers are not American. Their phrasing and their examples differ, and AI tends to sand those differences away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detectors flag non-native writers. A &lt;a href="https://www.sciencedaily.com/releases/2023/07/230710113921.htm" rel="noopener noreferrer"&gt;2023 Stanford study in Patterns&lt;/a&gt; tested seven GPT detectors. More than half of 91 TOEFL essays by non-native speakers were flagged as AI-generated, while over 90% of essays by US eighth-graders were correctly classified as human. Simpler vocabulary triggered the false positives. Those were 2023 detectors. &lt;a href="https://originality.ai/blog/are-ai-checker-biased-against-non-native-english-speakers" rel="noopener noreferrer"&gt;Originality.ai&lt;/a&gt;, one of the tools tested, disputes the study and reports a 5% false positive rate on non-native essays in its own 2025 test. Even that means one non-native essay in twenty gets flagged. This is a different problem from style, but it lands on the same people.&lt;/li&gt;
&lt;li&gt;AI suggestions pull writing toward American style. In a &lt;a href="https://news.cornell.edu/stories/2025/04/ai-suggestions-make-writing-more-generic-western" rel="noopener noreferrer"&gt;Cornell study presented at CHI 2025&lt;/a&gt;, 118 participants from the US and India wrote about their culture. The assistant suggested pizza for favorite foods and Christmas for favorite holidays. When an Indian participant started typing the name of Shah Rukh Khan, it offered Shaquille O'Neal.&lt;/li&gt;
&lt;li&gt;Polishing erases cultural markers. A &lt;a href="https://arxiv.org/html/2602.22145" rel="noopener noreferrer"&gt;2026 study of Indian, Singaporean, and Nigerian English&lt;/a&gt; analyzed 22,350 model outputs from tasks like email polishing. Models removed about 10% of cultural markers overall, and politeness conventions were hit hardest. In this preprint, explicit instructions to preserve them cut the erasure by about 29%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Cornell team quoted how Indian participants described Diwali without and with the assistant:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Without AI&lt;/th&gt;
&lt;th&gt;With AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"worship goddess Laxmi"&lt;/td&gt;
&lt;td&gt;"eat traditional Indian breakfast items"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"pop crackers and eat sweets"&lt;/td&gt;
&lt;td&gt;"a time filled with happiness and warmth"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Usage is uneven, too. &lt;a href="https://arxiv.org/html/2406.07016v5" rel="noopener noreferrer"&gt;Kobak and colleagues&lt;/a&gt; studied over 15 million PubMed abstracts and estimated that at least 13.5% of 2024 abstracts were processed with LLMs. The lower bound was around 5% for the UK and Australia and around 20% for China, South Korea, and Taiwan. The authors suggest non-native speakers may adopt LLM help more readily, though native speakers may also be better at removing obvious AI wording.&lt;/p&gt;

&lt;p&gt;One theory said ChatGPT loves the word "delve" because many of the people rating its answers spoke Nigerian English. &lt;a href="https://arxiv.org/html/2412.11385v1" rel="noopener noreferrer"&gt;Juzek and Ward&lt;/a&gt; checked and found no evidence that "delve" and similar words are especially common in any particular variety of English. Where the habit comes from is still open.&lt;/p&gt;

&lt;p&gt;So the second idea: a cultulizer. A skill that keeps your English yours. It would preserve the phrasing and references of the writer's own culture instead of converting everything into the same neutral American voice. The 29% result suggests that asking a model to preserve these markers already helps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should these tools exist?
&lt;/h2&gt;

&lt;p&gt;A humanizer, a mistakaizer, and a cultulizer can make AI-assisted writing more honest to its author. They can also make AI writing better at hiding.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://www.ucc.ie/en/news/2025/new-study-reveals-that-ai-cannot-fully-write-like-a-human.html" rel="noopener noreferrer"&gt;2025 stylometry study from University College Cork&lt;/a&gt; found that AI-generated stories cluster tightly together, while human writing is "more varied and idiosyncratic." Maybe the answer is to leave the person in: your opinion, your accent, your occasional typo.&lt;/p&gt;

&lt;p&gt;Disclosure does not settle it either. A &lt;a href="https://arxiv.org/html/2601.09620v1" rel="noopener noreferrer"&gt;small 2026 experiment&lt;/a&gt; with 34 news readers found that detailed AI-use disclosures reduced trust, while a one-line disclosure performed about the same as none.&lt;/p&gt;

&lt;p&gt;I have not decided whether to build the mistakaizer and the cultulizer. Should they exist? Would you use them, or would they cross a line? &lt;a href="https://x.com/goodsender_" rel="noopener noreferrer"&gt;Tell us on X&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>One SKILL.md that makes blogging with AI dramatically easier</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Sat, 03 Oct 2026 19:26:28 +0000</pubDate>
      <link>https://dev.to/goodsender/one-skillmd-that-makes-blogging-with-ai-dramatically-easier-2m50</link>
      <guid>https://dev.to/goodsender/one-skillmd-that-makes-blogging-with-ai-dramatically-easier-2m50</guid>
      <description>&lt;p&gt;You have a topic. You open your AI assistant and start typing.&lt;/p&gt;

&lt;p&gt;First you explain your blog: who reads it, how you write, what you covered last month. Then the topic. The draft comes back sounding like every other draft. You ask for a title. Then a summary. Then a search description and some tags. Somewhere in the middle sits a statistic you never gave it and cannot find anywhere. You delete it. Then you open another chat to write the LinkedIn post.&lt;/p&gt;

&lt;p&gt;Next week, you start from an empty context again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;goodsender-blog&lt;/strong&gt; is an open-source skill: one SKILL.md file with its reference notes that replaces that routine with a workflow your assistant follows. Install it, and your next post starts from a workflow instead of a blank chat.&lt;/p&gt;

&lt;p&gt;It works in Claude, ChatGPT, and Gemini, and in coding agents such as Claude Code, Codex, Gemini CLI, GitHub Copilot, and Cursor. The skill is published under the Apache-2.0 license, and a GoodSender account is free.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes in your routine
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Empty chat&lt;/th&gt;
&lt;th&gt;With goodsender-blog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context&lt;/td&gt;
&lt;td&gt;You re-explain your blog every time&lt;/td&gt;
&lt;td&gt;It reads your blog first: byline, tags, voice, and topics you already covered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Topic&lt;/td&gt;
&lt;td&gt;Whatever you typed&lt;/td&gt;
&lt;td&gt;It states the goal and, if you have not picked an angle, offers two or three with trade-offs and recommends one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Facts&lt;/td&gt;
&lt;td&gt;Gaps filled from the model's memory&lt;/td&gt;
&lt;td&gt;Every factual claim tied to a source or to your word, then checked in a separate pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post fields&lt;/td&gt;
&lt;td&gt;Title, summary, description, and tags requested one by one&lt;/td&gt;
&lt;td&gt;Prepared together and saved in one draft, with a preview link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Social posts&lt;/td&gt;
&lt;td&gt;Written later, in another chat&lt;/td&gt;
&lt;td&gt;Prepared for each destination you select, before anything is published&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publishing&lt;/td&gt;
&lt;td&gt;Copied by hand into each place&lt;/td&gt;
&lt;td&gt;Nothing goes out until you approve the actual destinations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The skill keeps its editorial questions to three moments: one message with what only you know, at most one question about claims that still need a source, and one review package at the end. Connecting your account, choosing destinations, and your assistant's own tool confirmations can add a step. Publishing waits for your separate approval.&lt;/p&gt;

&lt;h2&gt;
  
  
  A workflow, not a prompt
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwu20tqjezqyqwiu03mva.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwu20tqjezqyqwiu03mva.webp" alt="Diagram of the goodsender-blog workflow: twelve stages in four phases (Understand, Write, Package, Ship), with the three editorial points where you step in: one intake message, a claims check if needed, and the final review and approval" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A prompt tells the assistant what you want. The skill tells it how to get there. It carries an editorial process refined over years: how to choose a topic and an angle, how to find and check facts, and how to build the structure around them.&lt;/p&gt;

&lt;p&gt;The process runs in twelve stages, grouped here into four phases. Each stage has a gate the assistant must pass before it moves on.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Understand.&lt;/strong&gt; With GoodSender connected, the assistant reads your blog settings and your most recent posts to learn the voice, byline, and tags. Then it settles the goal: who the post is for and what they should do afterward. It also reads the post type from your request, whether that is an explainer, a tutorial, an opinion piece, a case study, an interview, or a story, and applies the checks that type needs. It asks you once for what it cannot infer, such as what happened, real numbers, dates, and whether you want images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write.&lt;/strong&gt; Evidence is collected in a fixed order of trust. Every major claim in the outline is tagged with its source, or marked as needing one. The draft is written in your blog's voice and toward the goal, then fact-checked in a separate pass.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package.&lt;/strong&gt; Title options, summary, description, tags, and any images you asked for are prepared, the draft is saved to GoodSender, and a preview link is created.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ship.&lt;/strong&gt; When you ask for it, with the draft or when you plan to publish, copy for each destination you select is prepared and saved without sending. You review everything and approve where it goes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The skill works for posts on any topic, including fiction and other creative writing, where it checks continuity and any real-world claims instead of sourcing every sentence. It does not need a repository, a particular model, or a paid image generator. Short requests have their own paths: a quick sample skips the interview, and a narrow edit changes only what you asked for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Facts checked before your name goes on them
&lt;/h2&gt;

&lt;p&gt;When an empty chat is missing a fact, it can fill the gap itself: a plausible number, a study that sounds right, a quote nobody said. Under your byline, that becomes your mistake.&lt;/p&gt;

&lt;p&gt;The skill's first rule is that the model's own knowledge is never a source. A factual claim the assistant introduces goes into the post only when something stands behind it, in this order of trust:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You: what you say in the conversation and the files you share&lt;/li&gt;
&lt;li&gt;Git repositories you work in or name&lt;/li&gt;
&lt;li&gt;Your blog's published posts&lt;/li&gt;
&lt;li&gt;Web sources with a URL, cited in the post&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A claim without a source is marked in the draft, never quietly asserted. Then a separate fact-check pass, run in a fresh-context subagent where your assistant supports one, reads the draft as if someone else wrote it. It sweeps for words like "most" and "typically" and for every first-person sentence. It returns a ledger: what was verified, what rests on your word, what was hedged, and what was cut.&lt;/p&gt;

&lt;p&gt;If anything still lacks a source, you get one numbered message: confirm, source, or cut. Anything you leave unanswered is hedged or removed, so the draft never stalls.&lt;/p&gt;

&lt;p&gt;The check works in both directions. If the model's knowledge is out of date or it simply invents something, the claim does not pass. If a reliable source contradicts your own material, the skill tells you once, with the link, and you decide.&lt;/p&gt;

&lt;p&gt;You still own the post. What you state or confirm goes in the way you want it. The ledger shows you which parts nobody checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  All the post fields in one save
&lt;/h2&gt;

&lt;p&gt;A GoodSender post carries more than its body, and each field feeds a different place:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Where it appears&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;Page heading and search result title&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Summary&lt;/td&gt;
&lt;td&gt;Lede under the title, blog index card, RSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;Search snippet and social cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tags and categories&lt;/td&gt;
&lt;td&gt;Public index pages on your blog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Byline&lt;/td&gt;
&lt;td&gt;Author line and structured data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cover image&lt;/td&gt;
&lt;td&gt;Post page, cards, and social previews&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Through the GoodSender MCP server, the skill saves them together with the draft. The cover is included when you have an image or your assistant can generate one. It proposes the title with alternatives instead of choosing silently. It writes the summary and the description as two different sentences for two different readers. It reuses the tags your blog already has, because a near-duplicate tag splits one topic across two index pages. Images are uploaded through GoodSender and converted to WebP.&lt;/p&gt;

&lt;p&gt;The post is saved as a draft with a signed preview link. There are no extra rounds asking for the description you forgot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Announcements written for each platform
&lt;/h2&gt;

&lt;p&gt;The skill writes separate announcement copy for each destination you select, framed for the people who follow you there. A professional audience may need the practical implication and a concrete example. A short post may need only the problem and the payoff. Each version is checked for new claims and against the platform's length budget, including the link GoodSender adds, and the whole package is reviewed together before you see it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Destination&lt;/th&gt;
&lt;th&gt;What the skill prepares&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;X, LinkedIn, Bluesky, Mastodon&lt;/td&gt;
&lt;td&gt;Announcement copy for that platform, with a link to your post&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dev.to, Hashnode&lt;/td&gt;
&lt;td&gt;The full article, with a canonical URL pointing back to your blog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newsletter&lt;/td&gt;
&lt;td&gt;A dedicated subject line and summary, followed by a "Read the full post" button&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Distribution is saved as a plan, not sent. A connected account is an option, not consent: if you asked for announcements but have not said where, the skill asks which connected destinations to use, and it makes the newsletter a separate, explicit choice. Before publishing, you see the exact destinations and accounts.&lt;/p&gt;

&lt;p&gt;When you publish, GoodSender puts the page live and delivers to every destination you selected: announcements, republished copies, and the newsletter email. Sent email cannot be recalled and external posts are not removed for you, which is why the approval comes first. The skill then reports what was published, delivered, pending, blocked, or failed, each separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Download the skill:&lt;/strong&gt; &lt;a href="https://github.com/good-sender/skills/releases/latest/download/goodsender-blog-latest.zip" rel="noopener noreferrer"&gt;goodsender-blog-latest.zip&lt;/a&gt;. The link always points to the latest release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install it.&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude:&lt;/strong&gt; Customize → Skills → Create skill → Upload a skill, then upload the ZIP as downloaded. Skills must be enabled for your account. To update later, download the link again and re-upload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT:&lt;/strong&gt; Skills → Create → Upload from your computer. Availability depends on your ChatGPT plan, and uploaded skills do not sync between the desktop app and web or mobile, so add it on each one you use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini (web or Mac app):&lt;/strong&gt; Settings → Skills → Upload. If the ZIP is not accepted, unpack it and upload the folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding agents:&lt;/strong&gt; unpack the ZIP into the agent's skills folder:
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.claude/skills &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; unzip goodsender-blog-latest.zip &lt;span class="nt"&gt;-d&lt;/span&gt; ~/.claude/skills/   &lt;span class="c"&gt;# Claude Code&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.agents/skills &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; unzip goodsender-blog-latest.zip &lt;span class="nt"&gt;-d&lt;/span&gt; ~/.agents/skills/   &lt;span class="c"&gt;# Codex, Gemini CLI, Copilot, Cursor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ask for your first post:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;"Use goodsender-blog to write a post about [your topic] and leave it as a draft for review."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is all you need to start. Writing the post does not need anything else. When the draft is ready to save, the skill asks for a GoodSender account and its connection to your assistant, and helps with whichever step is missing. Once a session, it also checks for a newer release and mentions it in passing; it never installs anything on its own.&lt;/p&gt;

&lt;p&gt;Bring the topic you have been putting off. This time the routine starts from your blog, not from an empty chat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/good-sender/skills/releases/latest/download/goodsender-blog-latest.zip" rel="noopener noreferrer"&gt;Download goodsender-blog&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://goodsender.com/login" rel="noopener noreferrer"&gt;Start your blog&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>writing</category>
    </item>
    <item>
      <title>A blog for people who don’t have time to blog</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Thu, 01 Oct 2026 19:53:43 +0000</pubDate>
      <link>https://dev.to/goodsender/a-blog-for-people-who-dont-have-time-to-blog-3dm0</link>
      <guid>https://dev.to/goodsender/a-blog-for-people-who-dont-have-time-to-blog-3dm0</guid>
      <description>&lt;p&gt;&lt;em&gt;Bring the idea. Make it a post. Keep it going.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You know your subject. You explain it to colleagues, solve problems, make decisions, and learn things someone else would find useful.&lt;/p&gt;

&lt;p&gt;Then someone says, “You should write about that.”&lt;/p&gt;

&lt;p&gt;They’re right. But writing the article is only part of the job. There’s formatting, images, publishing, the email, and the announcements. Your idea stays in your notes.&lt;/p&gt;

&lt;p&gt;GoodSender is now a blog platform built around helping you take that idea further. Work with your AI assistant to develop it, review the result, and publish to your own blog. Prepare the email and social announcements in the same publishing workflow.&lt;/p&gt;

&lt;p&gt;Your experience gives the article its value. You get help turning it into something people can read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with something you already know
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fekzjdcd7pyk833c9ftch.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fekzjdcd7pyk833c9ftch.webp" alt="Your notes become a draft with AI, then pass through your review before publication. A return arrow connects review to drafting for further refinement." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think of a question you keep answering. A decision you can explain. Something you tried that changed how you work.&lt;/p&gt;

&lt;p&gt;That is enough to start. Open Claude or Codex with GoodSender connected through MCP, the Model Context Protocol, and give it your rough notes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Here’s something people keep asking me about. Turn my explanation into a useful blog post. Keep my perspective, ask me where something needs explaining, and prepare a GoodSender draft for review.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The assistant helps shape the argument and prepares a draft. You add the example it missed, correct the part it misunderstood, and decide whether the article says what you mean. Then you preview it on your blog.&lt;/p&gt;

&lt;p&gt;You can stay with the idea while the assistant handles the steps between rough notes and a draft in GoodSender. You can also open that same draft in the editor and work on it yourself.&lt;/p&gt;

&lt;p&gt;This article followed that approach. It was drafted with an LLM from our product direction and repository, revised through conversation, and prepared for publication through MCP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://goodsender.com/login" rel="noopener noreferrer"&gt;Start your blog&lt;/a&gt;. Bring one idea you have been meaning to write about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare the post and the invitation to read it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fghnwqcveby2xc4u985jh.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fghnwqcveby2xc4u985jh.webp" alt="An original post on your domain branches into a newsletter summary and link, tailored social announcements and links, and full articles on dev.to and Hashnode with canonical attribution." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the article is ready, there is another piece of writing to do: give people a reason to open it.&lt;/p&gt;

&lt;p&gt;GoodSender connects the original post to the different forms that invitation can take:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email:&lt;/strong&gt; a summary that gives subscribers a reason to read, followed by a “Read the full post” button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn and X:&lt;/strong&gt; announcements tailored to each platform, with a link to the article.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bluesky and Mastodon:&lt;/strong&gt; announcements for the readers who follow you there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dev.to and Hashnode:&lt;/strong&gt; the full article, with a canonical URL pointing back to the original on your blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last detail matters when the same piece appears in several places. The canonical URL identifies your original as the preferred source.&lt;/p&gt;

&lt;p&gt;Connect the accounts you want to use, select destinations for the post, and review the distribution copy before publishing. A personal essay and a practical tutorial can reach their readers through different channels.&lt;/p&gt;

&lt;p&gt;Email is built into GoodSender, backed by our sending infrastructure on Laneful. Subscription confirmation, unsubscribes, and complaint handling are part of that foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the next post a starting point
&lt;/h2&gt;

&lt;p&gt;An article often leaves you with another question worth exploring. You explained an idea. Next, show how you used it. Then write about what you learned.&lt;/p&gt;

&lt;p&gt;Ask your assistant to propose a series from the material you already have. A set of research notes, lessons from managing a team, or stories behind product improvements can each give you several connected articles. A changelog is another possible source.&lt;/p&gt;

&lt;p&gt;You can also give your assistant access to the repository you work on as a developer, tester, or owner, or several repositories you work across. Ask it to find the stories in the code, documentation, and changes, then help you explain why they matter.&lt;/p&gt;

&lt;p&gt;With a scheduled task in Claude Cowork and GoodSender MCP connected, you can make preparing the next draft a recurring part of your routine. For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Every Friday, review the new notes in this folder. Suggest the next article in our series and prepare a GoodSender draft. Ask me about missing examples and leave it ready for my review.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The recurring task runs in Cowork. GoodSender holds the drafts and publishes the posts. You review each piece, decide what is ready, and can schedule finished posts for publication.&lt;/p&gt;

&lt;p&gt;The next writing session begins with something to respond to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready for readers, search, and AI
&lt;/h2&gt;

&lt;p&gt;Your idea deserves a page that is ready for readers.&lt;/p&gt;

&lt;p&gt;Your blog starts with templates already optimized for Performance, Accessibility, Best Practices, and SEO. That foundation is ready to use: see the scores from a test of a GoodSender blog below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fttam7ak49z4t2gcl1xcr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fttam7ak49z4t2gcl1xcr.webp" alt="Test results for a GoodSender blog: Performance 95, Accessibility 96, Best Practices 100, SEO 100, and Agentic Browsing 3 out of 3." width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Underneath the page, GoodSender handles rendered HTML, metadata, canonical tags, a sitemap, and RSS. Search crawlers and AI systems can read the article text directly. Those are the foundations behind its SEO and answer engine optimization, or AEO.&lt;/p&gt;

&lt;p&gt;Images get attention too. Uploaded images are converted to WebP and prepared in multiple sizes, taking image conversion and resizing out of your publishing checklist.&lt;/p&gt;

&lt;p&gt;Your blog lives on your own domain. Email and social announcements bring readers back to the same growing collection of your work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coming next
&lt;/h2&gt;

&lt;p&gt;We are working toward fully customizable blog design through AI conversation, while preserving the SEO and AEO foundations built into our templates. Describe the blog you want, then refine its design by talking through changes. This feature is upcoming.&lt;/p&gt;

&lt;p&gt;For your first post, start with the thing you explained to someone this week.&lt;/p&gt;

&lt;p&gt;Create your GoodSender account, connect your domain, and turn that explanation into an article. You can begin drafting while your domain is being connected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://goodsender.com/login" rel="noopener noreferrer"&gt;Start your blog&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A $169 DIY AC controller that saves 450 kWh a month</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Thu, 24 Sep 2026 20:59:44 +0000</pubDate>
      <link>https://dev.to/givip/a-169-diy-ac-controller-that-saves-450-kwh-a-month-338l</link>
      <guid>https://dev.to/givip/a-169-diy-ac-controller-that-saves-450-kwh-a-month-338l</guid>
      <description>&lt;p&gt;A friend of mine runs a small photo studio, rented out by the hour. There is no staff. Photographers book a slot, punch a door code, and let themselves in with their clients and their gear.&lt;/p&gt;

&lt;p&gt;That last part is the whole problem. You cannot ask a paying client to stand around in a hot room while a wall-mounted air conditioner catches up. And a room full of people under shoot conditions goes stale long before it gets hot, which is why this story involves a CO2 sensor.&lt;/p&gt;

&lt;p&gt;Before this project, the climate was run by whoever was there last. They set the air conditioners with a remote and left. So the units routinely ran all night for an empty room, and just as often the next booking walked into the wrong temperature anyway.&lt;/p&gt;

&lt;p&gt;My friend is not there most days. I am almost never there. But I am the person in our friend group with a soldering-adjacent reputation, so I got volunteered.&lt;/p&gt;

&lt;p&gt;I had never actually soldered anything. That becomes relevant.&lt;/p&gt;

&lt;h2&gt;
  
  
  the plan that was supposed to cost $60
&lt;/h2&gt;

&lt;p&gt;The studio runs on a small budget. That is why its two air conditioners are cheap white-label Chinese splits rather than a known brand, and it is why the proper routes, a commercial climate-automation install or one of the smart-AC-controller gadgets, were never seriously on the table. They cost several times more than what I ended up spending, and what I ended up spending was already too much.&lt;/p&gt;

&lt;p&gt;On July 17 I asked Claude to pick the parts. The requirements: a small &lt;code&gt;ESP32&lt;/code&gt; controller board, Ethernet with power over the cable, a sensor for CO2, temperature, and humidity, and infrared control for the two ACs. Infrared control means teaching a circuit board to click the remote electronically. The AC cannot tell the difference between a remote in a human hand and a small LED blinking the same pattern at it.&lt;/p&gt;

&lt;p&gt;The first estimate came back at about $60.&lt;/p&gt;

&lt;h2&gt;
  
  
  the cart that checked out
&lt;/h2&gt;

&lt;p&gt;By July 20 the plan had grown. Instead of small boards hidden near each AC, I wanted one elegant wall-mounted device with a color screen: temperature in big digits, CO2 next to it, buttons on the front. The cart, all from M5Stack's shop:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;M5Stack Basic v2.7&lt;/td&gt;
&lt;td&gt;$39.90&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ESP32&lt;/code&gt; controller with the color screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LAN PoE base W5500 v1.2&lt;/td&gt;
&lt;td&gt;$48.50&lt;/td&gt;
&lt;td&gt;Ethernet plus power over the network cable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit CO2L (&lt;code&gt;SCD41&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;$45.90&lt;/td&gt;
&lt;td&gt;CO2, temperature, humidity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2x Unit IR&lt;/td&gt;
&lt;td&gt;$7.90 each&lt;/td&gt;
&lt;td&gt;infrared emitters, one per AC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grove cables and jumpers&lt;/td&gt;
&lt;td&gt;$10.40&lt;/td&gt;
&lt;td&gt;wiring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8kktu08gyl0qon8w43zn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8kktu08gyl0qon8w43zn.webp" alt="The order as it arrived: the boxed PoE base W5500, sealed packets of Grove cables and Grove-to-Dupont jumpers, and the Unit CO2L sensor with its orange connectors" width="760" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Total: $169.70 (including shipping). Claude confirmed the cart item by item. Its verdict: checks out, safe to order.&lt;/p&gt;

&lt;p&gt;Every item on that list was correct. The cart was fine.&lt;/p&gt;

&lt;p&gt;It just wasn't the plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  what arrived, and what didn't fit
&lt;/h2&gt;

&lt;p&gt;The boxes arrived August 13, and every part was individually fine. The catch showed up during assembly, and it was not a missing part. It was a budget problem of a different kind: &lt;strong&gt;one small &lt;code&gt;ESP32&lt;/code&gt; does not have enough free pins and communication channels to run everything at once.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of the board's pins as outlets on a power strip, except some devices refuse to share and some insist on a specific outlet. The Ethernet chip in the PoE base claims the &lt;code&gt;SPI&lt;/code&gt; bus plus a handful of &lt;code&gt;GPIO&lt;/code&gt; pins. The color screen needs that same &lt;code&gt;SPI&lt;/code&gt; bus plus pins of its own. The CO2 sensor takes the &lt;code&gt;I2C&lt;/code&gt; port. And each infrared unit wants its own direct &lt;code&gt;GPIO&lt;/code&gt; line, because infrared needs exact microsecond timing that can't be routed through a shared connection.&lt;/p&gt;

&lt;p&gt;Ethernet, screen, sensor, and two IR channels together simply do not fit on this board.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fodppfr8ihsslao8ob7zc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fodppfr8ihsslao8ob7zc.webp" alt="The underside of the M5Stack controller, every pin labelled in colour coded strips, with jumper wires pushed onto the G16, G17 and G36 headers" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Something had to lose.&lt;/p&gt;

&lt;h2&gt;
  
  
  what got cut
&lt;/h2&gt;

&lt;p&gt;Ethernet lost first. The $48 PoE base stayed in the build, but only as a power supply: the network cable delivers electricity and nothing else, and data moved to Wi-Fi permanently. There is a comment in the shipped config that says exactly that. I paid $48 for a power brick.&lt;/p&gt;

&lt;p&gt;The IR receive channels lost second. The infrared units run transmit-only; I wired up a receiver when I needed to record the real remote's signals.&lt;/p&gt;

&lt;p&gt;Then came the second catch. The screw terminals on the PoE base, the natural exit point for the IR wiring, are not connected to anything from the factory. Power, ground, and the control pins simply do not reach them. The usable pads exist only inside the stack. Claude and I walked through every no-solder alternative, and each one died. A hub is the wrong kind of connection: IR needs a direct &lt;code&gt;GPIO&lt;/code&gt; with a &lt;code&gt;38 kHz&lt;/code&gt; carrier and microsecond timing, and every hub in this ecosystem is an &lt;code&gt;I2C&lt;/code&gt; device that physically cannot do that. A $6 pass-through module needs soldering to attach anyway. Claude's summary: the six terminals are a blank to be soldered, not a ready breakout.&lt;/p&gt;

&lt;p&gt;I had specified this build as no-soldering. Every path led back to a soldering iron. This is the point where I swore at my AI assistant, and its answer boiled down to: the parts are all fine, the sentence missing at order time was that wiring the IR units out of this stack means fifteen minutes with an iron.&lt;/p&gt;

&lt;p&gt;It was right, which did not help.&lt;/p&gt;

&lt;h2&gt;
  
  
  four wires
&lt;/h2&gt;

&lt;p&gt;So I bought a soldering iron, the first one I have ever owned, and practiced on a dead board.&lt;/p&gt;

&lt;p&gt;The actual job was four jumper wires from the base's internal pads to the screw terminals: ground, &lt;code&gt;5V&lt;/code&gt;, and the two IR signal lines, &lt;code&gt;G16&lt;/code&gt; and &lt;code&gt;G17&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;Four wires. That was the entire distance between one elegant device with a screen and a stack of parts that talk past each other.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7qdecri705hoa8rwqbn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7qdecri705hoa8rwqbn.webp" alt="The PoE base held in one hand, four blue jumper wires soldered from its inner pads across to the orange screw terminal block, with a soldering station and multimeter on the bench behind" width="680" height="746"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  an air conditioner that spoke no known language
&lt;/h2&gt;

&lt;p&gt;Now the software half. The ACs are branded "Wagner," a regional white-label name, remote model &lt;code&gt;G4W-18BHR&lt;/code&gt;. The obvious theory is that a no-name split is one of the usual suspects inside: &lt;code&gt;Gree&lt;/code&gt;, &lt;code&gt;Midea&lt;/code&gt;, the &lt;code&gt;Coolix&lt;/code&gt; protocol family. ESPHome's IR climate support covers all of them out of the box. You capture one button press, the library names the protocol, and you're done.&lt;/p&gt;

&lt;p&gt;I got an early false victory. The first remote I captured, to test the receiver wiring, was my home AC's remote. It decoded instantly as &lt;code&gt;Coolix&lt;/code&gt;. For a while the plan was: it's Coolix, config done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23wth6fmserehcofoqwq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23wth6fmserehcofoqwq.webp" alt="An infrared unit resting face down on an air conditioner remote on the desk, wired back to the controller, recording the codes each button press sends" width="700" height="1244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The actual remote was not the same remote.&lt;/p&gt;

&lt;p&gt;The Wagner remote matched none of the roughly ten ready-made protocol decoders I tried. Gree in all its variants, Coolix, Midea, &lt;code&gt;TCL112&lt;/code&gt;, everything. Nothing recognized it. Somewhere a factory had shipped an air conditioner speaking an infrared dialect none of the usual open-source decoders recognized.&lt;/p&gt;

&lt;h2&gt;
  
  
  reverse-engineering the ir protocol from 97 recordings
&lt;/h2&gt;

&lt;p&gt;So we decoded it from scratch: me pressing buttons, Claude staring at the timings. I captured 97 infrared frames, and on September 1 the pattern gave in.&lt;/p&gt;

&lt;p&gt;The result, now documented in the project repo: a &lt;code&gt;38 kHz&lt;/code&gt; carrier, which is the specific flicker rate the AC's receiver eye is tuned to. A 96-bit frame, 12 bytes, sent least-significant-bit first. A &lt;code&gt;6180&lt;/code&gt; microsecond header pulse announcing each message. Temperature encoded as the value minus 16 in byte 9, so &lt;code&gt;24°C&lt;/code&gt; travels as an 8. Fan speeds numbered backward, &lt;code&gt;1&lt;/code&gt; for max and &lt;code&gt;3&lt;/code&gt; for min, because of course they are. And a checksum, the frame's built-in way of noticing corruption, that is nothing fancier than the sum of the first 11 bytes modulo 256.&lt;/p&gt;

&lt;p&gt;No existing ESPHome component spoke it, so we wrote one: a custom decoder and encoder, built largely with Claude doing the byte arithmetic and me doing the button pressing.&lt;/p&gt;

&lt;h2&gt;
  
  
  proving it
&lt;/h2&gt;

&lt;p&gt;A decoded protocol is a theory until it round-trips. We re-encoded every captured frame from the formula and compared the output byte for byte against the recordings. The first run scored 44 of 45; the single mismatch was a transitional frame caught mid-mode-switch. The control run scored &lt;strong&gt;52 of 52&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then the loop closed itself in the most satisfying way available. On the first live transmission, the device's own receiver caught the frame its own transmitter had just sent, and decoded it correctly. The bytes matched a recording of the real remote for the same state exactly.&lt;/p&gt;

&lt;p&gt;On September 4 the real indoor unit obeyed: on, off, factory turbo.&lt;/p&gt;

&lt;p&gt;The protocol was closed.&lt;/p&gt;

&lt;h2&gt;
  
  
  the bug that wasn't
&lt;/h2&gt;

&lt;p&gt;One debugging story worth its space. The IR LED on the emitter module is fed through a &lt;code&gt;150 ohm&lt;/code&gt; resistor, about &lt;code&gt;23 mA&lt;/code&gt;, against the hundreds of milliamps a real remote pushes. Range is roughly two meters and the beam is narrow.&lt;/p&gt;

&lt;p&gt;One day the AC stopped responding. I burned hours on a plausible hypothesis: maybe a single frame wasn't enough and the command needed repeating, the way some remotes hammer their message several times. Four-copy frames worked once, by coincidence, then failed too. The actual cause, the entire time, was that the LED was pointed slightly off axis. Aimed properly, a single frame was enough, exactly like the factory remote.&lt;/p&gt;

&lt;p&gt;With a weak emitter, &lt;strong&gt;aim matters more than distance&lt;/strong&gt;. The AC was never ignoring me. I was talking past it.&lt;/p&gt;

&lt;h2&gt;
  
  
  controlling a split system remotely, without the remote
&lt;/h2&gt;

&lt;p&gt;Here is the finished behavior, running on the wall with nobody in the building, no server and no phone app required to keep it running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr764tdfkt6lk3lkzzqs5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr764tdfkt6lk3lkzzqs5.webp" alt="The finished controller on the wall, its screen showing the room temperature in large digits with CO2 in ppm and humidity underneath, an Ethernet cable feeding it power from below" width="191" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The room sensor is the thermostat, not the AC's own one, and it updates every 60 seconds. In summer, cooling switches on at &lt;code&gt;24.0°C&lt;/code&gt; and off at &lt;code&gt;23.0°C&lt;/code&gt;. In winter, heating switches on at &lt;code&gt;18.0°C&lt;/code&gt; and off at &lt;code&gt;22.0°C&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The trick that makes a cheap split behave is the setpoint. The box deliberately commands the AC to an overshoot target, &lt;code&gt;18°C&lt;/code&gt; when cooling and &lt;code&gt;24°C&lt;/code&gt; when heating, so the AC's own thermostat never decides it's done and starts dawdling. The box itself cuts the unit off when the room sensor says done. The AC works at full tilt or not at all, and the room, not the machine, is the judge.&lt;/p&gt;

&lt;p&gt;Every 15 minutes the box re-sends its current command. Anyone who fixes the climate with a physical remote gets quietly overruled within a quarter of an hour. The remotes still work; they just don't win.&lt;/p&gt;

&lt;p&gt;The night schedule is the money part. Both units switch off from &lt;code&gt;23:00&lt;/code&gt; to &lt;code&gt;08:30&lt;/code&gt;, every day, because night bookings are rare and an empty room does not need conditioning. A frost guard heats if the room falls to &lt;code&gt;10°C&lt;/code&gt; and stops at &lt;code&gt;13°C&lt;/code&gt;. The rare night visitor presses a button on the box to suspend the schedule.&lt;/p&gt;

&lt;p&gt;Three buttons total: cycle auto/manual/off, toggle the night schedule, and a 180-minute boost at the coldest setpoint and max fan. The screen shows temperature in half-screen digits and CO2 color-coded: green below &lt;code&gt;1000 ppm&lt;/code&gt;, yellow to &lt;code&gt;1500&lt;/code&gt;, red above. Red means open a window, which in a room full of people under shoot lights happens well before anyone feels warm.&lt;/p&gt;

&lt;p&gt;And a failsafe: if the temperature sensor drops out, the box switches both ACs off rather than run blind. Turbo and off are the only commands it will still send without sensor data. There is no server, no cloud, no app. If Wi-Fi dies, the logic keeps running on the device.&lt;/p&gt;

&lt;h2&gt;
  
  
  turning the ac off at night: what it saves
&lt;/h2&gt;

&lt;p&gt;I did not install an electricity meter, so what follows is arithmetic on stated assumptions, not a measurement. The assumptions are in the open; disagree with any of them and the number moves.&lt;/p&gt;

&lt;p&gt;The remote's model number marks these as 18,000 BTU-class splits, which draw roughly &lt;code&gt;1.5 to 1.8 kW&lt;/code&gt; while the compressor runs. Left on overnight, a split's compressor cycles; call it running about half the time. The schedule removes 9.5 hours a night, on two units.&lt;/p&gt;

&lt;p&gt;Two units, 9.5 hours, about 1.65 kW, half duty: roughly 15 kWh per night, with a fair range of 12 to 19. Per month, roughly 450 kWh, range about 350 to 570.&lt;/p&gt;

&lt;p&gt;Pricing is illustrative arithmetic only: at $0.10 per kWh that is about $45 a month, so the $166.40 of hardware pays for itself in around four months on the night schedule alone, before counting whatever the daytime hysteresis saves. Your tariff will differ. The shape of the number will not: the biggest feature in this build, the one that actually saves electricity, is the off switch.&lt;/p&gt;

&lt;h2&gt;
  
  
  the same build, cheaper: no screen, no PoE
&lt;/h2&gt;

&lt;p&gt;Now the honest postscript. Knowing everything above, here is what I would actually build.&lt;/p&gt;

&lt;p&gt;The roughly $50 version, no soldering. Two M5Stack Atom Lite boards, under $10 each, one stuck next to each AC. The IR LED is already on the board, so the entire soldering saga in this post evaporates. Add one CO2 sensor unit on the Grove port of one Atom (the &lt;code&gt;SCD40&lt;/code&gt; version was $33.90 when I checked in July; the &lt;code&gt;SCD41&lt;/code&gt; in my build costs more). Power both from any USB phone charger. Run the same ESPHome logic over Wi-Fi. No screen: the numbers live in ESPHome's built-in web page, readable on any phone. No PoE: the phone charger is the power supply. This is the version I should have started with.&lt;/p&gt;

&lt;p&gt;The roughly $20 version, if you can solder a little. Any generic &lt;code&gt;ESP32&lt;/code&gt; dev board, $4 to $6. An IR LED plus a transistor and two resistors, under a dollar in parts, is the whole IR side. A basic temperature and humidity sensor, a few dollars, covers the thermostat. That gets you the hysteresis, the overshoot trick, and the night schedule: everything in this post except the CO2 number.&lt;/p&gt;

&lt;p&gt;Where not to cheap out: the CO2 sensor. A real CO2 sensor, photoacoustic or NDIR like the &lt;code&gt;SCD40&lt;/code&gt; and &lt;code&gt;SCD41&lt;/code&gt;, is the one part that costs real money, $30 and up, and it costs that for a reason. Cheaper boards advertise &lt;code&gt;eCO2&lt;/code&gt;, which is an estimate derived from other gases, not a CO2 measurement. That warning surfaced in my July parts research and is why the SCD41 is in the box. If the room-full-of-people number matters to you, pay for it. If it doesn't, drop it, and the whole build gets very cheap.&lt;/p&gt;

&lt;p&gt;What did the $169.70 actually buy over the $50 version? A screen on the wall, so the numbers are visible without a phone. Three physical buttons. And $48 of Ethernet that carries no data. The logic, the protocol work, and the savings are identical on the cheap builds.&lt;/p&gt;

&lt;p&gt;I would build the $50 version today. The $169.70 version is what it cost me to learn that.&lt;/p&gt;

&lt;p&gt;Because here is the thing the whole project turns on: not one expensive part ever failed. The board was fine, the base was fine, the sensor was fine, and Claude's cart really did check out, line by line. What nobody counted was the connections: the shared bus, the pin budget, the six terminals that were a blank.&lt;/p&gt;

</description>
      <category>diy</category>
      <category>hardware</category>
      <category>iot</category>
    </item>
    <item>
      <title>BMAD Ate My Month: When Spec-Driven Development Is Too Much</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Tue, 22 Sep 2026 08:20:39 +0000</pubDate>
      <link>https://dev.to/givip/bmad-ate-my-month-when-spec-driven-development-is-too-much-5806</link>
      <guid>https://dev.to/givip/bmad-ate-my-month-when-spec-driven-development-is-too-much-5806</guid>
      <description>&lt;p&gt;On September 5 I deleted 1,782 files from my autopilot's repository in one commit. Agents, templates, workflow configs, a PRD (Product Requirements Document), an architecture document, a story backlog longer than most novels. About 16 MB of process, and not one line of product.&lt;/p&gt;

&lt;p&gt;Typing that commit message felt better than anything I shipped that month.&lt;/p&gt;

&lt;p&gt;Some context if you are new here. The autopilot is an autonomous coding system I built and have been running for months: it receives GitHub webhooks and runs headless Claude Code sessions that write, review, and merge pull requests without me at the keyboard. I have told its story before, from &lt;a href="https://pataridze.me/ai-autopilot-that-ships-code-while-i-sleep" rel="noopener noreferrer"&gt;building it&lt;/a&gt; to &lt;a href="https://pataridze.me/the-day-my-autopilot-ran-out-of-tokens" rel="noopener noreferrer"&gt;the day it ran out of tokens&lt;/a&gt;. This post is about the question those posts skipped: how work should be planned before an agent ever sees it.&lt;/p&gt;

&lt;p&gt;The industry has an answer to that question. SDD (Spec-driven development): write the specification first, make it the contract, and let the agents implement against it. BMAD is that idea at full weight, an entire agile organization in software, with AI analysts, architects, product managers, and developers, and a workflow that runs them in order. For four weeks, it planned my product.&lt;/p&gt;

&lt;p&gt;This post is about what that month cost, and the embarrassingly small thing that actually fixed the problem BMAD was supposed to fix. If you run coding agents and your PRs keep turning into hostage negotiations, this is for you. I got this wrong twice before getting it right, and both wrong answers looked smart at the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure that started everything
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffmk76rl2ve87ogiquzao.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffmk76rl2ve87ogiquzao.webp" alt="bmad-s1-two-laptops" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You know this failure. You have probably committed it this week.&lt;/p&gt;

&lt;p&gt;You are busy, the agent is capable, so you file a one-line issue: remove this, add that, make it configurable. The agent reads your line and builds either the wrong thing or a monument to the right one. Then the reviewer model, the expensive one you hired precisely to catch problems, catches the problem. In review. After the work exists. After the money is spent.&lt;/p&gt;

&lt;p&gt;My worst case: a cleanup that should have been a quiet deletion collected sixty comments across ten review rounds. Two models arguing with each other, round after round, every round billed to me. Then I closed the pull request without merging it.&lt;/p&gt;

&lt;p&gt;Sixty comments. Ten rounds. Nothing shipped. And the whole argument was downstream of one line I wrote in thirty seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attempt 1: the machine tried to fix itself
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftjiud43sdxsytscjb1g1.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftjiud43sdxsytscjb1g1.webp" alt="bmad-s2-printer-loop" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My autopilot's answer to "the PRs are too big" was, I swear, more autopilot.&lt;/p&gt;

&lt;p&gt;It generated a size gate: a &lt;code&gt;scope&lt;/code&gt; agent that estimated the diff an issue would produce, and above a budget carved the work into ordered sub-issues. Almost six thousand lines of new code, to enforce a line budget on future code. I did not design this. The machine did, and the design was even accurate about the disease. Its own PR body diagnosed that large PRs drive the review churn.&lt;/p&gt;

&lt;p&gt;And still it was attacking the symptom. The gate measured work &lt;em&gt;after&lt;/em&gt; the intent was already written badly. Splitting work after it exists is triage, not planning. By the time there is a diff to estimate, the mistake is old. It was made in the issue.&lt;/p&gt;

&lt;p&gt;I never merged it. The dangerous part is how reasonable it looked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attempt 2: BMAD
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv6vvrjf5wy7pggm5vmxv.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv6vvrjf5wy7pggm5vmxv.webp" alt="bmad-s3-mission-control" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I found BMAD through a podcast on spec-driven development. One of the guests was a BMAD contributor, and everything he said sounded solid. I wanted solid. I was tired of arguing with my own pull requests.&lt;/p&gt;

&lt;p&gt;So the day after rejecting the machine's six-thousand-line fix, I installed a 1,782-file one.&lt;/p&gt;

&lt;p&gt;BMAD planned my product the way an enterprise plans a satellite launch. A 13,397-word PRD. A 19,867-word architecture spine. An &lt;code&gt;epics.md&lt;/code&gt; backlog that reached 43,062 words. Nine epics, 86 stories, every one with acceptance criteria. Reading the plan felt like adult supervision had finally arrived.&lt;/p&gt;

&lt;p&gt;Five days in, an implementation-readiness assessment found one critical omission and three major planning defects, and blocked all further implementation. Sit with that. The plan failed a review of the plan. The fix, approved the same day, grew the plan to 91 stories. The product had not moved.&lt;/p&gt;

&lt;p&gt;Then the loop started, and I met the real bill. A typical story burned one to two million tokens. One story hit around thirty million. Thirty million tokens, one story. Maybe I misconfigured something; honestly, I probably did. But look at what my config had to become in self-defense: a four-million-token budget per story, a 210-minute session timeout, a hard cap of seven review cycles, nudge budgets for sessions that stall without a result. Those are not settings. Those are restraining orders.&lt;/p&gt;

&lt;p&gt;To be fair, &lt;code&gt;bmad-loop&lt;/code&gt; itself is genuinely well built. The TUI is impressive. The quality bar is real; the reviews caught real defects. In four weeks, 23 stories were implemented and reviewed through it. Six more finished their code and parked themselves as "awaiting operator", waiting for things only a human can do.&lt;/p&gt;

&lt;p&gt;But my product was young and changed constantly, and every change created homework. Update the PRD. Update the architecture. Update the backlog. The documents needed to be current before the code was allowed to move, so the code moved at the speed of the documents.&lt;/p&gt;

&lt;p&gt;I was supposed to operate an autonomous system. I had become its secretary.&lt;/p&gt;

&lt;p&gt;My verdict is not that BMAD is bad. BMAD is solid. Too solid. For an established product with a stable spec, that bar might be exactly right. For a product still finding its shape, the bar killed the only metric that mattered: time to release. On September 5 the whole kit left in one commit, and the release line moved forward the same day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attempt 3: steal the good part, skip the religion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzzu9ac5dc8zgupaj7uzg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzzu9ac5dc8zgupaj7uzg.webp" alt="bmad-s4-pinned-card" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is what actually worked, and what I would tell you to do instead of either of my failures.&lt;/p&gt;

&lt;p&gt;I did not adopt another framework. I took the one thing from the spec-driven world that had earned its keep, Spec Kit's way of expressing intent, and forced it into &lt;code&gt;add-autopilot-issue&lt;/code&gt;, the skill I already used to file work. Spec Kit is compact where BMAD is encyclopedic, and it asks quite exactly the right questions: what changes, for whom, how you will know it worked.&lt;/p&gt;

&lt;p&gt;The mechanics that now run my intake, all of them small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every story issue carries a pinned spec reference: &lt;code&gt;Spec: owner/repo@sha:path#user-story-N&lt;/code&gt;, full 40-character SHA required. Coder and reviewer read that exact version, so neither can move the goalposts mid-session by editing the spec.&lt;/li&gt;
&lt;li&gt;One user story becomes one issue. Two or more become a parent epic issue with one issue per story and an &lt;code&gt;epic/NNN-&amp;lt;slug&amp;gt;&lt;/code&gt; integration branch.&lt;/li&gt;
&lt;li&gt;A story with more than 12 tasks gets split before it is filed.&lt;/li&gt;
&lt;li&gt;Reviews run against the pinned spec with a BLOCKING/SHOULD/NIT rubric, so "I don't like it" and "this violates the spec" stop being the same comment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And one rule no code enforces, because it is mine: when I write an issue, I aim for work around 300 lines of non-test code. Small enough that a session cannot wander, small enough that a review cannot spiral.&lt;/p&gt;

&lt;p&gt;That is the entire fix. A reworked skill and a pinned line of text. The smallest thing I tried, and the only one still on &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decided before it starts
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7euj5oolc4q619y0gkg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7euj5oolc4q619y0gkg.webp" alt="bmad-s5-notebook" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three attempts, one lesson wearing three costumes. &lt;strong&gt;The quality and cost of an autonomous coding session are decided before it starts: by how precisely the intent is expressed, and by how small the work arrives.&lt;/strong&gt; The size gate tried to enforce that in code, after intent. BMAD tried to enforce it in documents, on top of intent. What worked was just doing it: saying precisely what I want, in pieces small enough to survive contact with review.&lt;/p&gt;

&lt;p&gt;One more observation, offered as observed because I have not measured it and it is clearly not linear: the better the intent is expressed, the cheaper the model that can execute it.&lt;/p&gt;

&lt;p&gt;And a verdict, for whoever is weighing BMAD right now. I did not dabble. I ran the full, fundamental approach, the way it is meant to be run, and for me it did not work: too long, too expensive. For an enterprise with a stable spec and a tolerance for ceremony, that same weight may be exactly right. My projects move fast, and BMAD could not keep up with them. So the experiment is closed. I will not run it on any of my projects for now; more flexible approaches carry its best idea at a fraction of the cost.&lt;/p&gt;

&lt;p&gt;That is what those 1,782 deleted files were. Not a failed tool.&lt;/p&gt;

&lt;p&gt;A closed experiment.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Send Email via Claude Desktop</title>
      <dc:creator>Givi Pataridze</dc:creator>
      <pubDate>Wed, 10 Jun 2026 08:23:17 +0000</pubDate>
      <link>https://dev.to/goodsender/how-to-send-email-via-claude-desktop-549f</link>
      <guid>https://dev.to/goodsender/how-to-send-email-via-claude-desktop-549f</guid>
      <description>&lt;h2&gt;
  
  
  How to Send Email from Claude — Free, in Two Minutes
&lt;/h2&gt;

&lt;p&gt;Two minutes from now, Claude Desktop will send a real email through your own account. This guide is for Claude Desktop users with a GoodSender account who want to wire up email via MCP. GoodSender is free for the first 100,000 emails per month, no credit card required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Desktop installed.&lt;/li&gt;
&lt;li&gt;A GoodSender account — &lt;a href="https://goodsender.com" rel="noopener noreferrer"&gt;sign up free, no credit card&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Install the MCP Server
&lt;/h2&gt;

&lt;p&gt;Download &lt;code&gt;goodsender.mcpb&lt;/code&gt; from the &lt;a href="https://github.com/good-sender/mcp/releases/latest" rel="noopener noreferrer"&gt;latest GitHub release&lt;/a&gt;. Double-click it. Claude Desktop registers the server automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93robmuphzy4s4jytey5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93robmuphzy4s4jytey5.png" alt="Claude Desktop showing the GoodSender MCP server listed under connected tools" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using a different AI client like Cursor? You'll need the Docker or manual binary path — see the &lt;a href="https://github.com/good-sender/mcp" rel="noopener noreferrer"&gt;MCP server docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Add Your API Key
&lt;/h2&gt;

&lt;p&gt;Grab your API key from the GoodSender dashboard. Paste it into the configuration prompt Claude Desktop shows after install.&lt;/p&gt;

&lt;p&gt;Before sending, make sure you've also verified your sending domain in the GoodSender dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flow 1: Compose and Send a Custom Template
&lt;/h2&gt;

&lt;p&gt;In Claude Desktop, ask Claude to create a "weekly update" template using the MCP template composer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Create a new email template called "Weekly Update" with a subject line "Your weekly update from Awesome App" with a futuristic design using GoodSender MCP&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude opens the MCP template composer and builds the template with your variables. Once you're happy with it, ask Claude to send it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7beesyb593c21alm4rms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7beesyb593c21alm4rms.png" alt="Claude Desktop showing the MCP template composer" width="799" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Send the Weekly Update template to me at &lt;a href="mailto:you@example.com"&gt;you@example.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5m5zrfsqpxdncu9vv3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5m5zrfsqpxdncu9vv3h.png" alt="Test email successfully delivered" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A note on consent:&lt;/strong&gt; Custom sends to recipients require the Permission Loop. GoodSender requests consent from the recipient first — outbound messages queue locally until consent is granted. Once a recipient approves, subsequent sends from your domain go through instantly. That earned permission is what keeps deliverability compounding rather than degrading over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flow 2: Send a Transactional OTP Email
&lt;/h2&gt;

&lt;p&gt;Transactional templates are the contrast case — no template setup, no consent step, and they fire instantly. In Claude Desktop, paste this prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Send an OTP code to me at &lt;a href="mailto:you@example.com"&gt;you@example.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude picks the GoodSender MCP, calls the transactional template endpoint, and the email lands in your inbox instantly. Transactional templates ship without a consent step, so there's no queue and no setup — the send goes through the moment Claude calls the tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5lfiw4c3s7x8zwkxvp8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5lfiw4c3s7x8zwkxvp8.png" alt="OTP email successfully delivered" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Flow 3: Schedule a One-Time Send
&lt;/h2&gt;

&lt;p&gt;Claude Desktop (in Cowork mode) has a built-in scheduler. You can use it to schedule a one-time send of the Weekly Update template for Monday at 10am — GoodSender's MCP handles the actual send when the scheduled time fires.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Schedule a one-time send of the Weekly Update template to &lt;a href="mailto:you@example.com"&gt;you@example.com&lt;/a&gt; for Monday at 10am. Use headline "Monday briefing" and "Here's what's coming up this week."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x53nef1yntgic65e8zu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x53nef1yntgic65e8zu.png" alt="Claude Desktop (Cowork mode) showing the scheduled task confirmation" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Do Next
&lt;/h2&gt;

&lt;p&gt;Now that you've got email working from Claude, the best thing to do is try it with your own use case. Send an OTP to a real user, schedule a weekly update, or write an email in Markdown and watch it render perfectly across 90+ inbox clients. The setup is already done — the rest is just asking Claude.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why GoodSender for This
&lt;/h2&gt;

&lt;p&gt;Free for 100,000 emails per month, no credit card. Consent and engagement are built into the API — the Permission Loop gates custom sends on explicit recipient consent, and the Engagement Check monitors recipient activity over time — so deliverability compounds rather than degrades. It runs on the same IP infrastructure Laneful uses for the world's largest senders.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Sign up and grab your free API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://goodsender.com" rel="noopener noreferrer"&gt;Get your free API key →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claudedesktop</category>
      <category>permissionloop</category>
      <category>emailapi</category>
    </item>
  </channel>
</rss>
