vepora / laravel-client-changelog
Auto-generate a client-facing changelog from git commits via AI — delivered as a public page and email digest.
Package info
github.com/VeporaCo/laravel-client-changelog
pkg:composer/vepora/laravel-client-changelog
Requires
- php: ^8.3
- laravel/framework: ^11.0|^12.0|^13.0
- openai-php/client: ^0.10
Requires (Dev)
- orchestra/testbench: ^9.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
README
Auto-generate a client-facing changelog from git commits via AI — delivered as a public page and email digest.
Every time you deploy, run one command. The package reads your recent git commits, strips the technical noise, and uses AI to produce plain-English summaries grouped into New Features, Improvements, and Fixed. Results are stored in your database, shown on a public /changelog page, and optionally emailed to your clients on a schedule you control.
Features
- AI-powered translation — turns
feat(auth): add oauth2 pkce flowinto "Users can now sign in with Google and GitHub." - Multiple AI providers — Groq (free, default), OpenAI, Claude, Gemini, Grok
- Public changelog page — zero-config timeline UI built with Tailwind CDN
- Email digest — per-deploy, daily, or weekly batching
- Pause/Resume — freeze generation before a sprint and catch up on resume
- Queue-friendly — dispatches a job by default;
--syncfor synchronous use
Requirements
- PHP 8.3+
- Laravel 11, 12, or 13
- A queue worker (or use
--sync)
Installation
composer require vepora/laravel-client-changelog
Publish the config and run migrations:
php artisan vendor:publish --tag=changelog-config php artisan migrate
Add your AI key to .env:
CHANGELOG_AI_PROVIDER=groq # groq | openai | claude | gemini | grok CHANGELOG_AI_KEY=your-key-here
Usage
Generating a changelog entry
Call this at the end of your deploy script:
php artisan changelog:generate
Options:
| Flag | Description |
|---|---|
--sync |
Process synchronously (no queue) |
--no-ai |
Skip AI; store raw commits directly (useful in CI) |
Pause & Resume
Freeze changelog generation before a planned maintenance window or sprint:
php artisan changelog:pause --until=2026-05-10 --reason="Refactor sprint" php artisan changelog:resume --send-accumulated # sends a catch-up digest php artisan changelog:resume --discard # drops accumulated commits
Status
php artisan changelog:status
Outputs a table showing pause state, last entry, pending digest count, and notify mode.
Configuration
// config/changelog.php return [ 'notify' => [ // per_deploy | daily | weekly 'mode' => env('CHANGELOG_MODE', 'daily'), 'send_at' => '18:00', 'timezone' => env('CHANGELOG_TZ', 'UTC'), 'skip_if_no_changes' => true, // array of email addresses 'recipients' => [], ], 'ai' => [ // groq (default, free) | gemini | claude | openai | grok 'provider' => env('CHANGELOG_AI_PROVIDER', 'groq'), 'key' => env('CHANGELOG_AI_KEY'), // groq: llama-3.3-70b-versatile // gemini: gemini-2.0-flash // grok: grok-3-mini // claude: claude-haiku-4-5-20251001 // openai: gpt-4o-mini 'model' => env('CHANGELOG_AI_MODEL', 'llama-3.3-70b-versatile'), // professional | friendly 'tone' => 'professional', ], // Commit types silently dropped before AI sees them 'ignore_types' => ['chore', 'test', 'tests', 'docs', 'ci', 'style', 'build'], // URL segment for the public changelog page 'page_url' => 'changelog', // Laravel middleware applied to the page — empty = public 'page_middleware' => [], ];
Notify modes
| Mode | Behavior |
|---|---|
per_deploy |
Sends an email immediately after changelog:generate |
daily |
Batches entries and sends once per day at send_at |
weekly |
Batches entries and sends once per week on Monday at send_at |
For daily and weekly, add the Laravel scheduler to your crontab:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Customising the views
php artisan vendor:publish --tag=changelog-views
Views are published to resources/views/vendor/changelog/.
AI Providers
| Provider | Env key | Default model | Free tier |
|---|---|---|---|
| Groq | CHANGELOG_AI_KEY |
llama-3.3-70b-versatile |
Yes |
| OpenAI | CHANGELOG_AI_KEY |
gpt-4o-mini |
No |
| Claude | CHANGELOG_AI_KEY |
claude-haiku-4-5-20251001 |
No |
| Gemini | CHANGELOG_AI_KEY |
gemini-2.0-flash |
Yes (quota) |
| Grok | CHANGELOG_AI_KEY |
grok-3-mini |
No |
Set CHANGELOG_AI_PROVIDER and CHANGELOG_AI_MODEL to override defaults.
Changelog
See CHANGELOG.md.
License
MIT — see LICENSE.