{
"$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"
}