<?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: Michael Yousrie</title>
    <description>The latest articles on DEV Community by Michael Yousrie (@michael-yousrie).</description>
    <link>https://dev.to/michael-yousrie</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%2F4024580%2F5113fe07-bcda-40ee-bb54-f2d285440322.jpg</url>
      <title>DEV Community: Michael Yousrie</title>
      <link>https://dev.to/michael-yousrie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michael-yousrie"/>
    <language>en</language>
    <item>
      <title>How to add a changelog to any web app with one script tag</title>
      <dc:creator>Michael Yousrie</dc:creator>
      <pubDate>Sat, 11 Jul 2026 00:05:39 +0000</pubDate>
      <link>https://dev.to/michael-yousrie/how-to-add-a-changelog-to-any-web-app-with-one-script-tag-43b5</link>
      <guid>https://dev.to/michael-yousrie/how-to-add-a-changelog-to-any-web-app-with-one-script-tag-43b5</guid>
      <description>&lt;p&gt;You ship all the time. A fix here, a new setting there, a feature you spent a whole weekend on. And your users mostly don't notice.&lt;/p&gt;

&lt;p&gt;That gap is expensive. When people can't &lt;em&gt;see&lt;/em&gt; a product moving, it feels abandoned, even when you're shipping every week. They churn a little faster, they email asking for things you built a month ago, and all the momentum you're actually creating stays invisible.&lt;/p&gt;

&lt;p&gt;The fix is boring and old: a changelog. But not a changelog rotting in a Notion doc nobody opens. One that shows up &lt;strong&gt;inside your app&lt;/strong&gt;, where users already are.&lt;/p&gt;

&lt;p&gt;Here's the approach I settled on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea: a widget, not just a page
&lt;/h2&gt;

&lt;p&gt;A "what's new" widget is a small button or badge in your UI. Click it, and a panel slides out with your latest updates. Users see it in the flow of using your product, not on some &lt;code&gt;/changelog&lt;/code&gt; page they'd never visit.&lt;/p&gt;

&lt;p&gt;You really want three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An in-app widget users actually see.&lt;/li&gt;
&lt;li&gt;A public page and RSS feed you can link from emails and docs.&lt;/li&gt;
&lt;li&gt;A way to write updates in plain language and publish in a click.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The one-tag version
&lt;/h2&gt;

&lt;p&gt;I ended up building a tool for this (honest disclosure below), but the &lt;em&gt;integration&lt;/em&gt; is the part worth showing, because it's the pattern any changelog widget should follow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Paste before &amp;lt;/body&amp;gt; --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.patchlog.io/widget.js"&lt;/span&gt;
        &lt;span class="na"&gt;data-project=&lt;/span&gt;&lt;span class="s"&gt;"your-project-id"&lt;/span&gt;
        &lt;span class="na"&gt;data-position=&lt;/span&gt;&lt;span class="s"&gt;"bottom-right"&lt;/span&gt;
        &lt;span class="na"&gt;async&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One script tag. No SDK, no npm install, no framework coupling. It behaves the same in React, Vue, Rails, or a plain HTML page.&lt;/p&gt;

&lt;p&gt;Two implementation details matter, whether you build one of these yourself or evaluate an existing one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Render it in a Shadow DOM.&lt;/strong&gt; A changelog widget should not inherit or leak styles. If it uses the host page's global CSS, it will look broken on half the sites it lands on. Shadow DOM isolates it completely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail silently.&lt;/strong&gt; A marketing widget must never break the host app. If the network call fails, it should quietly do nothing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to actually write in it
&lt;/h2&gt;

&lt;p&gt;The tool is the easy part. The discipline is writing updates people care about. A few things that have worked for me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tag each entry&lt;/strong&gt; as New, Fixed, or Improved. People scan, so give them anchors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write like a person.&lt;/strong&gt; "CSV exports were timing out on big accounts, now fixed" beats "Resolved asynchronous export latency regression."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ship small and often.&lt;/strong&gt; Ten small updates read as momentum. One giant quarterly post reads as a company that went quiet for three months.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule them.&lt;/strong&gt; Write the note when you ship the code, set it to publish later, and your changelog stays alive even in a busy week.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest disclosure
&lt;/h2&gt;

&lt;p&gt;I build &lt;a href="https://patchlog.io" rel="noopener noreferrer"&gt;Patchlog&lt;/a&gt;, so the snippet above is my own tool. I'm not going to pretend otherwise. It's early: the free tier is one project and 25 updates, which is genuinely what I run on my own projects. I'm sharing the &lt;em&gt;approach&lt;/em&gt; because it's helped me, and if it saves you the afternoon it cost me to think through, great.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual point
&lt;/h2&gt;

&lt;p&gt;Whatever you use, whether you build it, use mine, or use a competitor, close the gap between &lt;em&gt;shipping&lt;/em&gt; and &lt;em&gt;your users noticing you shipped&lt;/em&gt;. That gap is quietly costing you retention, and it's one of the cheapest things in your entire product to fix.&lt;/p&gt;

&lt;p&gt;What do you use for changelogs today? Always curious how other people handle this.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>startup</category>
      <category>changelog</category>
    </item>
  </channel>
</rss>
