savannabits/admin-generator
Savannabits Admin Generator scaffolds Laravel admin CRUD interfaces from your models and database schema, quickly producing controllers, views, routes, and forms so you can spin up management panels with less boilerplate and customization.
Architecture fit
The package is a dev-time scaffolding tool, not a runtime dependency — it emits controllers, routes, Blade views and form/table definitions and then gets out of the way. That is the most attractive property from a TPM standpoint: blast radius is bounded, and there is no library sitting in the request path at production time. Generated output is ordinary Laravel PHP that the team owns and edits freely, so there is no lock-in to the tool.
The catch is that the tool is architecturally paired. It writes code that assumes savannabits/craftable's layout, base controller, auth scaffolding and asset pipeline (AdminLTE). Adopting this generator is therefore also a decision to adopt — or already have — Craftable as the admin panel architecture. That coupling is explicit in the description and not optional. A second implicit coupling runs from Eloquent model names to route names, view paths, controller names and foreign-key guesses (Category → category_id), which makes naming convention a de facto architectural constraint on the schema.
Integration feasibility
Mechanically simple: a Composer install into a Laravel 7 app that already runs Craftable, a vendor:publish for stubs and config, and an artisan command. Feasibility drops sharply on evidence: zero stars, zero dependents, no README-scale documentation beyond a one-paragraph description and a release note. The published stubs/ directory is the actual specification — it documents which field types, validation rules and relationship shapes the generator understands, and it is more reliable than any blog post or assumed command name.
Realistic feasibility test: one disposable branch, one flat reference model with 4–6 scalar columns, one generated screen loaded in a browser. Estimate half a day to a day to reach a go/no-go signal. That is cheap enough to justify as a timeboxed spike and not cheap enough to justify committing a roadmap to.
Technical risk
^7.0 constraint must be read against composer show -a output, not assumed.--force flag almost certainly means "destroy my customizations."required|string|max:255), relationship handling falls over at belongsToMany pivot sync, and three things typically need manual wiring: sidebar/menu entry, permissions/roles, route registration.Key questions
Stack fit
Qualifies only on the full stack: Laravel 7, PHP 7.2–7.4, Blade, AdminLTE via Craftable, Laravel auth. It does not fit a modern Laravel codebase, an SPA/API-first architecture, or a non-Craftable admin. Before anything else, confirm the actual illuminate/* and php constraints from composer show -a savannabits/admin-generator — this single check resolves the compatibility question faster than any spike.
Migration path
This is not a migration; it is a one-time scaffold. The defensible pattern:
composer require on a clean tree.Compatibility
Hard fail on Laravel 8+ and, in practice, on PHP 8+. If the org is on Laravel 10/11, the honest answer is that fork-and-port effort exceeds the boilerplate it saves, and the evaluation should end there. The viable window is a legacy Laravel 7 application already running Craftable, where the marginal cost is a branch and a day.
Sequencing
Confirm stack pin → timeboxed spike on a single flat model (no relationships) → measure hours saved against a hand-rolled baseline → decide drop / use on N models / vendor-fork → only then establish team conventions: generate-commit-customize workflow, form requests own validation, table-specific logic lives in accessors and Blade partials, and a fixed checklist for the three manual wiring steps (menu, permissions, routes). Move to belongsTo only after a working baseline; expect manual pivot sync for belongsToMany.
Maintenance
The generator itself has no maintenance path — it is a 2020 artifact with no releases since. That is acceptable because it exits the picture after generation: output is plain PHP and the maintenance burden transfers to the owning team at generation time. The thing that does not transfer is the ability to upgrade, patch or receive fixes for the generator, so any reuse beyond a single scaffold implies a vendored fork and a named owner for it.
Support
No vendor, no community, no documentation beyond the stubs and a release note. Internal support is the team that ran the command. Mitigate by documenting in-repo: the exact command surface, the model-definition contract used as generator input (keep it in a committed file, never in shell history), and the stub customizations. Undocumented generator input is how custom validation rules are silently lost six months later.
Scaling
Value scales linearly with the number of similar, CRUD-shaped models — that is where per-screen savings compound. It does not scale across complexity: bespoke workflows, custom permissions and heavy interactivity are exactly where a standardising generator becomes something to fight. Runtime scaling is a non-issue since generated code is ordinary Laravel. The scaling risk is team-wide consistency drift as generated screens accumulate under different authors with different customization habits.
Failure modes
View [layouts.app] not found — Craftable not installed correctly, routinely misdiagnosed as a generator failure.route:clear && view:clear && config:clear, not debugging routes.BlogPost → blog_posts vs blogposts), which breaks routes and views in ways that look like random failures.0000-00-00, booleans as 0/1, long text blowing out the table).Ramp-up
The cost is the composite skill: Craftable plus the generator plus Laravel 7 idioms. For a team already fluent in that stack, ramp-up is a day and the payoff is real. For anyone else, onboarding likely exceeds the boilerplate saved on a handful of screens — which is the gating condition. The TPM-level recommendation follows directly: do not adopt this as a dependency or a standard; run a small, timeboxed spike on a disposable internal tool to measure actual hours saved, and if it pays off, treat the generated code as a one-time scaffold the team then owns and maintains as ordinary code.
How can I help you explore Laravel packages today?