{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreie7e752iaof4zcalb4sqx2bth6zk3shynbawxrh4vfpoj2njuwvda",
    "uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3moq6zvfss7z2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreicii7pakw2z3nsamzzdbczacop6tjgwz66vq6cyn4kwqpxfdjpmqm"
    },
    "mimeType": "image/webp",
    "size": 65360
  },
  "path": "/20sid02/i-built-a-service-that-turns-github-prs-to-customer-readable-changelogs-5611",
  "publishedAt": "2026-06-20T14:57:45.000Z",
  "site": "https://dev.to",
  "tags": [
    "webdev",
    "productivity",
    "devops",
    "saas",
    "https://shiplog.arksoft.xyz"
  ],
  "textContent": "Nobody reads your PR titles. Especially not your users.\n\nYou 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.\n\nI got tired of that loop, so I built **Shiplog** — a Python CLI that reads your merged PRs and rewrites them into clean, grouped changelogs.\n\n##  What it does\n\nOne command:\n\n`bash\npip install shiplog-cli\nshiplog generate your-org/your-repo --days 30`\n\nIt fetches your merged PRs, runs each through an AI transform, and outputs a changelog grouped by category — New, Improved, Fixed, Infrastructure.\n\nA PR titled fix: pagination offset bug in list endpoint becomes:\n\n▎ Fixed\n▎ 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.\n\nHow it works\n\nGitHub PRs → Shiplog API → { category, title, body } → Markdown or JSON\n\n  * Auto-detects your repo from git origin — no config needed\n  * Skips bot PRs (dependabot, renovate) by default\n  * Runs generations in parallel with automatic rate-limit retries\n  * Outputs markdown or JSON, to stdout or a file\n\n\n\nQuick examples\n\n##  Auto-detect repo, last 14 days\n\n`cd your-project\nshiplog generate --days 14`\n\n##  Specific repo, write to file\n\n`shiplog generate owner/repo --days 30 -o CHANGELOG.md\n`\n\n##  JSON output for feeding into other tools\n\n`shiplog generate owner/repo --format json\n`\n\n##  Transform a single PR without GitHub\n\n`shiplog single \"Add dark mode support\" --body \"Adds theme toggle in settings\"`\n\nWhy not just use git log?\n\ngit log gives you developer context. Changelogs need user context. \"Refactor auth middleware to use JWT validation\" means nothing to a customer.\nShiplog rewrites it as something like:\n\n▎ Improved\n▎ Login sessions are now more secure — We upgraded how authentication tokens are validated, improving security without any changes on your end.\n\nThat's the gap it fills.\n\nTry it\n\n`pip install shiplog-cli\nshiplog generate --days 7`\n\nIt works on any public repo without auth. For private repoKEN or `gh auth token` automatically.\n\nSite: https://shiplog.arksoft.xyz\n\nWould love feedback — what would make this useful for your workflow?",
  "title": "I built a service that turns GitHub PRs to customer readable changelogs"
}