<?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: Siddharth Mahajan</title>
    <description>The latest articles on DEV Community by Siddharth Mahajan (@20sid02).</description>
    <link>https://dev.to/20sid02</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%2F3994241%2Faedfb12d-7e9c-49ea-8bcb-6cf84b6eb8c9.png</url>
      <title>DEV Community: Siddharth Mahajan</title>
      <link>https://dev.to/20sid02</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/20sid02"/>
    <language>en</language>
    <item>
      <title>I built a service that turns GitHub PRs to customer readable changelogs</title>
      <dc:creator>Siddharth Mahajan</dc:creator>
      <pubDate>Sat, 20 Jun 2026 14:57:45 +0000</pubDate>
      <link>https://dev.to/20sid02/i-built-a-service-that-turns-github-prs-to-customer-readable-changelogs-5611</link>
      <guid>https://dev.to/20sid02/i-built-a-service-that-turns-github-prs-to-customer-readable-changelogs-5611</guid>
      <description>&lt;p&gt;Nobody reads your PR titles. Especially not your users.&lt;/p&gt;

&lt;p&gt;You merge "fix: offset bug in pagination endpoint" and your PM asks, "so what shipped this week?" Now you're scrolling through GitHub, rewriting commit messages into something a customer would understand.&lt;/p&gt;

&lt;p&gt;I got tired of that loop, so I built &lt;strong&gt;Shiplog&lt;/strong&gt; — a Python CLI that reads your merged PRs and rewrites them into clean, grouped changelogs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;One command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bash&lt;br&gt;
pip install shiplog-cli&lt;br&gt;
shiplog generate your-org/your-repo --days 30&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It fetches your merged PRs, runs each through an AI transform, and outputs a changelog grouped by category — New, Improved, Fixed, Infrastructure.&lt;/p&gt;

&lt;p&gt;A PR titled fix: pagination offset bug in list endpoint becomes:&lt;/p&gt;

&lt;p&gt;▎ Fixed&lt;br&gt;
▎ Pagination now returns correct results — Previously, navigating past the first page of list views could skip or duplicate items due to an offset calculation error.&lt;/p&gt;

&lt;p&gt;How it works&lt;/p&gt;

&lt;p&gt;GitHub PRs → Shiplog API → { category, title, body } → Markdown or JSON&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-detects your repo from git origin — no config needed&lt;/li&gt;
&lt;li&gt;Skips bot PRs (dependabot, renovate) by default&lt;/li&gt;
&lt;li&gt;Runs generations in parallel with automatic rate-limit retries&lt;/li&gt;
&lt;li&gt;Outputs markdown or JSON, to stdout or a file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quick examples&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-detect repo, last 14 days
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;cd your-project&lt;br&gt;
shiplog generate --days 14&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Specific repo, write to file
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;shiplog generate owner/repo --days 30 -o CHANGELOG.md&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  JSON output for feeding into other tools
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;shiplog generate owner/repo --format json&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Transform a single PR without GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;shiplog single "Add dark mode support" --body "Adds theme toggle in settings"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Why not just use git log?&lt;/p&gt;

&lt;p&gt;git log gives you developer context. Changelogs need user context. "Refactor auth middleware to use JWT validation" means nothing to a customer.&lt;br&gt;
Shiplog rewrites it as something like:&lt;/p&gt;

&lt;p&gt;▎ Improved&lt;br&gt;
▎ Login sessions are now more secure — We upgraded how authentication tokens are validated, improving security without any changes on your end.&lt;/p&gt;

&lt;p&gt;That's the gap it fills.&lt;/p&gt;

&lt;p&gt;Try it&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install shiplog-cli&lt;br&gt;
shiplog generate --days 7&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It works on any public repo without auth. For private repoKEN or &lt;code&gt;gh auth token&lt;/code&gt; automatically.&lt;/p&gt;

&lt;p&gt;Site: &lt;a href="https://shiplog.arksoft.xyz" rel="noopener noreferrer"&gt;https://shiplog.arksoft.xyz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback — what would make this useful for your workflow?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>devops</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
