amjadiqbal/filament-rankforge-lite
Lightweight Filament plugin that adds RankForge-style drag-and-drop ordering to your resources. Attach the trait and rows become instantly sortable in the admin panel, with minimal setup and no bloat—ideal for menus, categories, and any ranked list.
Three steps to a working setup:
rankforge_meta migration, so run php artisan migrate after composer require. No publish step is mentioned for config; check config/rankforge.php only if you need to change defaults (locales, score thresholds, preview host).use HasSeo; — nothing else. The score column and meta row are managed for you on every save(), including queued jobs, seeders and Tinker, not just Filament.<head>: <x-rankforge::tags /> or the shorthand @rankforge. That is the first end-to-end use case — a blog post with an admin form, a live score, and correct meta output — and it should take under ten minutes.Where to look first: the SeoFields form section (if you use Filament, this is the whole authoring UI), then config/rankforge.php for locale and threshold tuning. Ignore the analysis internals until you have a score showing up.
Filament resource wiring. Drop SeoFields::make() into the resource schema as its own section, usually last and collapsed:
use Rankforge\Filament\Sections\SeoFields;
public static function form(Form $form): Form
{
return $form->schema([
// ...content fields...
SeoFields::make(),
]);
}
The section carries focus/related keyphrases, meta title and description, canonical, robots, and Open Graph fields, plus the live analysis panel. Treat it as a single unit — it is designed to sit beside your content fields so the analysis reacts as the editor types.
Table columns. SeoScoreColumn::make('seo_score') (or whatever accessor the trait exposes) is sortable and colour-coded. Use it for editorial triage: sort ascending to surface the worst-scoring published content, which is the highest-value daily workflow this package enables.
Rendering. A single @rankforge in layouts/app.blade.php covers the common case. For non-Blade or API-driven front ends, resolve the tags programmatically from the model's meta relation and inject them yourself.
Coexistence with ralphjsmit/laravel-seo. The release explicitly states no trait boot-method collision, so both traits can live on the same model. If you are migrating, run them in parallel first: keep laravel-seo rendering until RankForge output is verified, then swap the Blade directive. Because table, migration and config keys match RankForge, an in-place upgrade needs no content migration.
Editing outside Filament. Because the score syncs on every save, programmatic content updates (imports, API writes, bulk jobs) keep scores honest. That makes scheduled re-scoring viable: a nightly job that touches updated_at on stale posts will refresh scores without an admin opening a form.
localhost.noindex a money page. Consider restricting those fields by policy/role, or at minimum audit them before deploys.hreflang output depends on correct locale configuration. If you run multiple locales, verify the emitted hreflang set is reciprocal across the whole locale group — half-configured hreflang is worse than none.boot prefix. The claim is specific to ralphjsmit/laravel-seo; any other package that boots a trait method with the same name will still collide. Test in a branch before assuming compatibility.How can I help you explore Laravel packages today?