remihin/filament-title-with-slug
A Filament form field that pairs a title input with an auto-generated, editable slug. It keeps the slug in sync as you type, lets you tweak it manually, and helps ensure clean, unique URLs for your Laravel models.
Architecture fit. This is a narrow, additive UI-layer component: one Filament form field that replaces a title + slug TextInput pair. It does not touch persistence, routing, queues, or domain models, and it lives entirely inside the admin panel boundary — meaning it can be removed without data-model surgery. That composition profile is what makes a 0-star package defensible here: the blast radius of it being wrong is one form field, not a subsystem. Fit is contingent on two things we must verify, not assume: (a) the host app runs Filament v3, and (b) the slug is a first-class indexed column on the Eloquent model. If slugs are currently produced in a service layer or model observer, this component creates a second generation authority, and split authority over URL segments is a worse outcome than the duplication it saves.
Integration feasibility. Mechanically trivial: composer require, no service provider or panel plugin registration (it is a form component, not a plugin — confirm this in the README for your version), then swap two inputs for one in the resource schema. The engineering cost is not the integration; it is the surrounding work — deciding uniqueness scope (global vs. per-locale vs. per-parent), backfilling slugs for existing records, and preserving inbound-link equity for any slug that shifts.
Technical risk.
Key questions.
composer.json?spatie/laravel-translatable for per-locale slugs?Stack fit. Laravel 10/11, PHP 8.1+, Livewire, Filament v3. The package belongs in form schemas only — never in controllers, jobs, or API layers. Enforce a single generation authority per resource: either fully inside the component or fully in a model observer.
Migration path. Do not retrofit onto live resources in one pass.
Compatibility. Pin to the exact patch (1.0.2) rather than a caret range while the changelog is uninformative; relax the pin only once we can read a real diff. Read the Filament constraint before scheduling any panel upgrade — if it declares only ^3.0, our v4 planning must carry an explicit dependency-replacement contingency. Test interaction with any localization plugin; dual plugins on the same field commonly collide on validation rules. Also verify disabled/readonly behavior on edit submits the existing slug.
Sequencing and effort.
Per-resource swap is a few hours of engineering; the backfill and redirect work dominates the schedule and should be estimated and owned separately.
Maintenance. Low ongoing effort while it works — the component is declarative and small. The recurring cost is version-tracking against Filament majors, which is the most likely trigger for eventual replacement. Budget a standing line item for "evaluate Filament v4 compatibility or fork."
Support. No commercial support; community issues only, with a single maintainer. Escalation for a production-blocking bug is effectively self-service. Mitigation: given the small surface area, forking into our namespace is genuinely cheap — decide at the v4 upgrade point whether to vendor or replace, and do not depend on upstream responsiveness in the meantime.
Scaling. Non-issue. Slug derivation is per-request string work on a single admin form submission; no throughput implications at any realistic content volume. The one scale-adjacent concern is uniqueness validation against a very large content table — index the slug column and validate at the database layer, not just in the form.
Failure modes.
Ramp-up. Effectively zero for a developer fluent in Filament form schemas — hours, not days. The real ramp-up burden is institutional, not technical: understanding the existing slug contract and the redirect obligations. Do not assign this to a non-Filament developer. Write the slug-generation policy into each resource's README — when it regenerates, who may manually override, how uniqueness resolves — because that policy, not the API, is what the next maintainer will need.
How can I help you explore Laravel packages today?