{"id":50115658,"url":"https://github.com/sangaibisi/changeweave","last_synced_at":"2026-05-23T15:04:40.554Z","repository":{"id":352100785,"uuid":"1213856987","full_name":"Sangaibisi/changeweave","owner":"Sangaibisi","description":"AI-native changelog generator — analyzes actual code diffs (not just commit messages) to produce intelligent release notes. Spring Boot + Next.js + MCP server. Supports GitHub, GitLab, Bitbucket.","archived":false,"fork":false,"pushed_at":"2026-04-17T20:59:36.000Z","size":252,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T22:40:05.178Z","etag":null,"topics":["ai","bitbucket","changelog","developer-tools","github","gitlab","mcp","model-context-protocol","nextjs","openai","release-notes","self-hosted","spring-boot","typescript"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sangaibisi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-17T20:49:23.000Z","updated_at":"2026-04-17T20:59:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Sangaibisi/changeweave","commit_stats":null,"previous_names":["sangaibisi/changeweave"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Sangaibisi/changeweave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sangaibisi%2Fchangeweave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sangaibisi%2Fchangeweave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sangaibisi%2Fchangeweave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sangaibisi%2Fchangeweave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sangaibisi","download_url":"https://codeload.github.com/Sangaibisi/changeweave/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sangaibisi%2Fchangeweave/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33400258,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","bitbucket","changelog","developer-tools","github","gitlab","mcp","model-context-protocol","nextjs","openai","release-notes","self-hosted","spring-boot","typescript"],"created_at":"2026-05-23T15:04:32.050Z","updated_at":"2026-05-23T15:04:40.075Z","avatar_url":"https://github.com/Sangaibisi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🧵 ChangeWeave\n\n### **AI-native changelog generator that reads your code — not just your commit messages.**\n\n*Stop copy-pasting git logs. Ship release notes your users actually understand.*\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-A3E635?style=flat-square)](./LICENSE)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-A3E635?style=flat-square)](https://github.com/Sangaibisi/changeweave/pulls)\n![Java](https://img.shields.io/badge/Java-17-F89820?style=flat-square\u0026logo=openjdk\u0026logoColor=white)\n![Spring Boot](https://img.shields.io/badge/Spring_Boot-3-6DB33F?style=flat-square\u0026logo=springboot\u0026logoColor=white)\n![Next.js](https://img.shields.io/badge/Next.js-14-000000?style=flat-square\u0026logo=nextdotjs\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square\u0026logo=typescript\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-ready-2496ED?style=flat-square\u0026logo=docker\u0026logoColor=white)\n![Postgres](https://img.shields.io/badge/PostgreSQL-16-4169E1?style=flat-square\u0026logo=postgresql\u0026logoColor=white)\n![MCP](https://img.shields.io/badge/MCP-server-8B5CF6?style=flat-square)\n\n\u003c/div\u003e\n\n---\n\n## 🎯 The Problem\n\n\u003e *\"feat: stuff\"*, *\"fix: bug\"*, *\"wip\"*, *\"asdf\"* — every changelog author's nightmare.\n\nTraditional changelog tools scrape commit messages and hope for the best. They miss breaking changes hiding inside refactors, get confused by squashed PRs, and produce release notes that read like `git log | grep -v chore`.\n\n**ChangeWeave opens the diffs.** It reads what actually changed, groups related edits, filters noise, detects breaking changes, and writes release notes that a product manager — not just a committer — would be proud to ship.\n\n## ✨ Features\n\n- 🔬 **Diff-aware analysis** — categorizes changes and scores impact from real code, not commit message guesswork\n- 🎚️ **Tiered context engine** — smart token budgeting across 3 tiers (summary → diffs → full files) so you only pay for depth where it matters\n- 💥 **Breaking change detection** — flags removed exports, changed signatures, altered routes, schema migrations\n- 🧹 **Noise filtering \u0026 PR grouping** — merges chatty commits, collapses revert chains, groups related edits into logical units\n- 🌍 **Multi-provider** — GitHub · GitLab · Bitbucket Cloud · Bitbucket Data Center (self-hosted)\n- 🗺️ **15 languages** — generate changelogs in any of 15 languages with one click\n- 🎨 **Tone \u0026 audience tuning** — technical, marketing, casual — pick per release\n- 📊 **Public changelog pages** — shareable URLs with view analytics and referrers\n- 🤖 **MCP server built-in** — drive it from Claude Desktop, Cursor, or Windsurf via the Model Context Protocol\n- 🔒 **Privacy-first** — fully self-hostable, tokens encrypted at rest, SSRF-guarded outbound calls\n- 🆓 **MIT licensed** — no usage limits, no telemetry, no vendor lock-in\n\n## 🏗️ Architecture\n\n```\n          ┌──────────────────────────────────────────────────┐\n          │                                                  │\n          ▼                                                  │\n   ┌─────────────┐           ┌──────────────┐          ┌────┴───────┐\n   │  🌐 Browser │──── UI ──▶│  🎨 Next.js  │─── API ─▶│ ☕ Spring  │\n   └─────────────┘           │   Frontend   │          │   Boot API │\n                             └──────────────┘          └──┬──┬──┬───┘\n                                                          │  │  │\n                              ┌───────────────────────────┘  │  └────────┐\n                              ▼                              ▼           ▼\n                     ┌──────────────┐              ┌──────────────┐  ┌────────┐\n                     │ 🧠 MCP Server│              │ 🐘 Postgres  │  │🔴 Redis│\n                     │  (Node/TS)   │              │   + Flyway   │  │ cache  │\n                     └──────┬───────┘              └──────────────┘  └────────┘\n                            │\n                            ▼\n                     ┌──────────────────────────────────────────┐\n                     │  🐙 GitHub · 🦊 GitLab · 🪣 Bitbucket   │\n                     └──────────────────────────────────────────┘\n```\n\n### How a release note is born 🐣\n\n1. **📥 Trigger** — webhook fires on `git push`, or you hit *Generate* manually in the dashboard.\n2. **📡 Fetch** — backend pulls commits + diffs via the provider API (GitHub / GitLab / Bitbucket).\n3. **🧪 Analyze** — MCP server runs the pipeline:\n   - `noise-filter` drops boilerplate commits\n   - `revert-detector` collapses `A → B → revert(A+B)` chains\n   - `pr-grouper` merges related commits into logical changes\n   - `commit-clusterer` finds semantic clusters\n   - `impact-scorer` tags HIGH / MEDIUM / LOW impact\n   - `breaking-detector` sniffs out API breaks\n   - `module-mapper` groups files into features\n4. **💬 Generate** — `AITransformationService` turns the structured analysis into prose (OpenAI by default, rule-based fallback when no key is set).\n5. **🚀 Publish** — you review, edit, and ship to a public changelog page with a shareable URL.\n\n### Tech stack\n\n| Layer | What's inside |\n|-------|--------------|\n| **Backend** ☕ | Java 17 · Spring Boot 3 · Spring Security · JPA · Flyway migrations |\n| **Frontend** 🎨 | Next.js 14 (App Router) · React · TailwindCSS · Zustand · React Query |\n| **MCP Server** 🧠 | Node.js 18+ · TypeScript · `@modelcontextprotocol/sdk` · Octokit |\n| **Storage** 🗄️ | PostgreSQL 16 · Redis 7 |\n| **AI** 🤖 | OpenAI (`gpt-4o-mini` default) — any OpenAI-compatible endpoint works |\n| **Ops** 🐳 | Docker · Docker Compose (dev + prod profiles) |\n\n## 🚀 Quick Start (Docker)\n\n**Prerequisites:** [Docker Desktop](https://www.docker.com/products/docker-desktop/) and git.\n\n```bash\ngit clone https://github.com/Sangaibisi/changeweave.git\ncd changeweave\ncp .env.example .env        # 💡 optional — defaults boot the app as-is\ndocker compose up --build -d\n```\n\nEverything comes up locally — no cloud account required:\n\n| 🧩 Service | 🔗 URL |\n|-----------|--------|\n| Frontend | [http://localhost:3000](http://localhost:3000) |\n| Backend API | [http://localhost:8080/api](http://localhost:8080/api) |\n| MCP Server | [http://localhost:3100/mcp](http://localhost:3100/mcp) |\n| PostgreSQL | `localhost:5432` |\n| Redis | `localhost:6379` |\n\nRegister an account on the frontend and you're in. 🎉\n\n\u003e 💡 Without `OPENAI_API_KEY`, ChangeWeave falls back to rule-based changelog generation. Add a key whenever you want the AI polish.\n\nSee [SETUP.md](./SETUP.md) for rebuilds, logs, resets and more.\n\n## ⚙️ Configuration\n\nAll config is env-driven. The [`.env.example`](./.env.example) ships **dev-safe defaults** — the app boots unchanged. Set these when you want the real thing:\n\n| Variable | What it unlocks |\n|----------|----------------|\n| 🤖 `OPENAI_API_KEY` | AI-generated changelog prose |\n| 🐙 `GITHUB_CLIENT_ID` / `GITHUB_CLIENT_SECRET` | GitHub OAuth login + repo connect ([create app](https://github.com/settings/developers)) |\n| 🪝 `GITHUB_WEBHOOK_SECRET` | Webhook signature verification |\n| 🦊 `GITLAB_CLIENT_ID` / `GITLAB_CLIENT_SECRET` | GitLab OAuth ([create app](https://gitlab.com/-/user_settings/applications)) |\n| 🪣 `BITBUCKET_CLIENT_ID` / `BITBUCKET_CLIENT_SECRET` | Bitbucket Cloud OAuth |\n| 🏢 `BITBUCKET_DC_URL` | Base URL for self-hosted Bitbucket Data Center (PAT auth) |\n| 🔐 `JWT_SECRET` | **Production-required** — min 256-bit random string |\n| 📧 `MAIL_*` | SMTP credentials (SendGrid by default) for transactional email |\n\n## 💻 Local Development (hybrid)\n\nRun infra in Docker, backend/frontend on your host for fast reloads:\n\n```bash\n# ☕ Only the infra\ndocker compose up -d postgres redis\n\n# Backend (terminal 1)\ncd backend\nmvn spring-boot:run\n\n# Frontend (terminal 2)\ncd frontend\nnpm install\nnpm run dev\n```\n\n## 🤖 MCP Integration\n\nChangeWeave ships its own Model Context Protocol server so Claude, Cursor, Windsurf and friends can analyze commits and draft changelogs **from inside your editor**.\n\n```json\n{\n  \"mcpServers\": {\n    \"changeweave\": {\n      \"command\": \"npx\",\n      \"args\": [\"changeweave-mcp\"],\n      \"env\": { \"GITHUB_TOKEN\": \"ghp_xxxxxxxxxxxx\" }\n    }\n  }\n}\n```\n\nTools exposed: `analyze_commits`, `generate_changelog`, `get_commit_diff`, `compare_refs`, `detect_breaking_changes`, `list_changelogs`, `publish_changelog`.\n\nFull docs → [`mcp/README.md`](./mcp/README.md).\n\n## 🌐 Production Deployment\n\n`docker-compose.prod.yml` is the production profile:\n\n- ✅ Requires a real `JWT_SECRET` (fails fast if missing)\n- ✅ Requires `PUBLIC_URL` + `CORS_ORIGINS` to point at your domain\n- ✅ Expects an external reverse-proxy network named `changeweave-proxy` (Traefik / Caddy / nginx-proxy — your call)\n\n```bash\nexport PUBLIC_URL=https://changelog.your-domain.com\nexport CORS_ORIGINS=https://changelog.your-domain.com\nexport JWT_SECRET=$(openssl rand -base64 48)\nexport OPENAI_API_KEY=sk-...\n\ndocker network create changeweave-proxy\ndocker compose -f docker-compose.prod.yml up -d\n```\n\nPoint your reverse proxy at the `frontend` (port 3000) and `backend` (port 8080) services and you're live. 🎈\n\n## 🛡️ Security\n\n- 🔑 JWT access tokens (15 min) + refresh tokens (7 days) with rotation\n- 🚧 SSRF guard on all outbound HTTP calls\n- 🔐 Provider tokens encrypted before being persisted\n- 🕸️ Production compose isolates the app network from the public proxy network\n- 🧵 No telemetry — the project phones nobody home\n\nFound a security issue? Please [open an issue](https://github.com/Sangaibisi/changeweave/issues) — don't disclose publicly until there's a fix.\n\n## 📁 Project Layout\n\n```\nchangeweave/\n├── 📂 backend/                Spring Boot API\n│   └── src/main/java/com/changelogai/\n│       ├── controller/        REST endpoints\n│       ├── service/           Business logic\n│       │   ├── provider/      GitHub / GitLab / Bitbucket adapters\n│       │   └── AITransformationService.java\n│       ├── security/          JWT + SSRF guard\n│       └── entity/            JPA models\n├── 📂 frontend/               Next.js 14 app\n│   └── src/app/\n│       ├── (auth)/            login / register\n│       ├── dashboard/         authenticated UI\n│       └── changelog/[slug]/  public changelog pages\n├── 📂 mcp/                    MCP server (Node/TS)\n│   └── src/\n│       ├── analysis/          breaking · revert · clusterer · impact\n│       ├── context/           3-tier token budgeting\n│       ├── tools/             7 MCP tools\n│       └── providers/         git provider integrations\n├── 🐳 docker-compose.yml      dev stack\n├── 🐳 docker-compose.prod.yml prod stack\n└── 📄 SETUP.md                docker cheatsheet\n```\n\n## 🤝 Contributing\n\nPRs and issues are warmly welcome. 💚\n\n- No CLA required — contributions are released under the MIT License\n- Keep changes focused; one concern per PR\n- Run the stack locally before submitting (see *Local Development*)\n- Follow existing code style — no separate style guide yet\n\nFirst time contributing to OSS? [Open an issue](https://github.com/Sangaibisi/changeweave/issues/new) and say hi — we'll point you at something friendly.\n\n## 📜 License\n\n[MIT](./LICENSE) © Sangaibisi — free to use, modify, and ship. Go build cool stuff.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**⭐ If ChangeWeave saves you even one painful release day, please star the repo.**\n\nMade with 🧵 and long nights.\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsangaibisi%2Fchangeweave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsangaibisi%2Fchangeweave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsangaibisi%2Fchangeweave/lists"}