genealabs/laravel-changelog
GeneaLabs Laravel Changelog helps Laravel projects generate structured changelogs from Git commit history. Turn commit messages into release notes, keep users informed of changes, and reduce manual changelog maintenance with a simple Artisan-driven workflow.
Resolve scope before anything else — this is a gate, not a footnote. The supplied sources describe at least two, possibly three, different products: the tagline says "A Laravel Nova tool"; description.md describes a markdown changelog authoring/rendering package (Artisan commands, configurable route + Blade view, Keep a Changelog output); one internal developer note describes an Eloquent audit-trail trait with a published migration, a Changelog model, and per-model attribute history. A 55-star, zero-dependent package is unlikely to be all three. The scopes imply incompatible diligence: a renderer is a static page with no data custody; an audit trail writes historical attribute values to the primary database, which routinely captures PII, pricing, and entitlement state and pulls in retention, erasure, and access-policy obligations. A TPM cannot sequence, estimate, or accept risk on this until a half-day spike against the tagged 13.0.0 source says which one ships. Record the answer in a decision log entry so it isn't rediscovered in six months.
Architecture fit (renderer interpretation). Sits in the developer/ops tooling layer, outside the domain model, on no request-critical path. It is a presentation surface over a CHANGELOG.md that already lives in the repo. Blast radius of adoption — and of failure — is correspondingly small, which is exactly what makes it a cheap product win: a customer-facing "What's New" page without a build project.
Architecture fit (audit interpretation). Materially different and not a convenience feature. Write-amplified table on the primary database, containing historical attribute values. That is a data-governance decision wearing a package's clothing: table placement, retention and purge, GDPR erasure handling, and which models get the trait are all product/legal calls that precede the migration.
Integration feasibility. Low either way. Composer install, publish config (and views or migration), optionally gate the route or scope the trait. No external services, credentials, or queue workers. Realistic effort for a competent Laravel developer: under a day for the renderer, two to three days for audit logging — and in the latter case the time is dominated by the retention and access-policy decision, not the wiring.
Technical risk. Low in absolute terms, with five structural caveats:
Key questions.
composer.json or merely untested?Stack fit. Target Laravel 13 on a PHP version satisfying the new floor. Services on Laravel 11/12 stay on the prior package line — do not force 13.0.0 backwards; the value does not justify the friction. This is greenfield adoption, not a migration.
Migration path. None required. No incumbent to displace, no data to move. Treat 13.0.0 as the baseline for new Laravel 13 services and as a deliberate opt-in step for apps that later move to 13.
Compatibility gate — confirm three things in order, in a scratch branch. (a) framework major, (b) PHP floor, (c) that Composer actually refuses to resolve outside the supported pair rather than installing permissively. Write the answers into the service runbook; they are the thing on-call and the next upgrade owner will need.
Sequencing.
CHANGELOG.md location and add a CI step that generates or at least asserts on it. A changelog page is only as good as the pipeline that feeds it, and this is where the package's actual product value is either realized or quietly lost.TPM artifacts to leave behind. Decision-log entry (which scope we adopted, why), runbook lines (file path, route name, middleware, support floor), a standing line item on the framework-upgrade checklist, and the CI assertion from step 4.
Maintenance. Near-zero steady state for the renderer: no schema, no jobs, no keys to rotate. The genuine recurring cost is version alignment — every Laravel major upgrade now implies a package major upgrade, which belongs on the framework upgrade checklist rather than in someone's memory. For the audit variant, add ongoing retention management and a purge process; that is explicitly not zero-touch.
Support. Narrow failure set: "the page is empty / 404 / 500." All three trace to a missing or malformed markdown file, a disabled route, or a middleware misconfiguration — minutes to diagnose if the path and route name are in the runbook. If it is the audit-log variant, support expands to "why is this row missing" and "why is this table large," which is a different on-call conversation and a different owner.
Scaling. Effectively free for the renderer — static output, no per-user state. One thing to verify before exposing it on a high-traffic public surface: whether the markdown is re-read per request. If so, put a short-lived cache in front of it or confirm existing route/view caching covers it.
Failure modes.
vendor, so removal is a Composer command and nothing more.Ramp-up. A Laravel developer is productive in half a day; the spike is the only real onboarding cost. For a TPM, the ramp is knowing which four questions to ask on day one — scope, support floor, route exposure, content owner — and the judgement that this is a low-criticality convenience surface where a near-zero-cost adoption and a near-zero-cost exit are both acceptable, but where adopting it as the foundation of a release-communication strategy is not: subscriber management, segmentation, editorial workflow, and engagement analytics point to a dedicated announcements product.
How can I help you explore Laravel packages today?