riodwanto/superduper-filament-starter-kit
SuperDuper Filament Starter Kit is a Laravel admin panel scaffold built on Filament. It ships with authentication, user and role management, CRUD scaffolding, settings, media handling, dashboard widgets, and a responsive UI to help you launch back-office apps faster.
composer create-project riodwanto/superduper-filament-starter-kit my-app, then cp .env.example .env, php artisan key:generate, configure DB_*, php artisan migrate --seed, php artisan storage:link, npm install && npm run dev, php artisan serve./admin and sign in with the seeded super-admin (check database/seeders/DatabaseSeeder.php for the exact credentials; usually [email protected] / password — change immediately).app/Providers/Filament/AdminPanelProvider.php — the panel is registered here; plugins, middleware, colors, and navigation all hang off this file.app/Filament/Resources/ — every pre-built CRUD (Users, Roles, Posts, Pages, Media, Settings).config/ — plugin configs: filament-shield.php, filament-curator.php, filament-spatie-media-library.php, settings.php, SEO config.resources/views/ and routes/web.php — the front site, Blade components, and theme tokens.php artisan make:filament-resource Project --generate, define the form/table, then php artisan shield:generate --all so the new resource appears in permissions. That single loop (resource → policy → nav → front-end route) is the daily rhythm of the kit.php artisan make:filament-resource X --generate --view and then trim the generated form to the fields you actually need.php artisan shield:generate --all (or targeted --option=resources). Wire policies into AdminPanelProvider via ->plugins([FilamentShieldPlugin::make()]) — never hand-write can() checks that bypass Shield.HasMedia + InteractsWithMedia to the model, register a collection in registerMediaCollections(), and use the CuratorPicker form field in the Resource. Uploads land under the configured disk — keep them going through Curator so conversions, focal points, and the media manager stay consistent.app/Settings/). Edit them through the Filament settings pages; read them anywhere with app(GeneralSettings::class)->site_name. Cache them — spatie/laravel-settings is cache: false by default, so enable caching in the config.Post has slug, status, published_at, featured media, SEO meta. Use mutateFormDataBeforeCreate / mutateFormDataBeforeSave for derived fields (slug, author, reading time) instead of putting that logic in the model.tailwind.config.js tokens, not hardcoded hex. Front routes typically live in routes/web.php and resolve models by slug with route-model binding.ralphjsmit/laravel-seo-style meta table. Rendering happens in the front layout <head> — add @yield('meta') / @stack('seo') (or the equivalent component) to resources/views/layouts/app.blade.php so per-page meta actually emits.->navigationGroup('Content'); use ->cluster() when the admin grows past ~15 resources. Register dashboard widgets once in the panel provider so the overview stays composable.php artisan vendor:publish --tag=filament-... when you need to change behavior. Keep changes in app/ and resources/ so future kit updates remain mergable.php artisan shield:generate --all and assign the permission to a role. This is the #1 “it works for admin but not for editor” bug.php artisan optimize:clear (or filament:optimize-clear) after touching panel providers, Shield, or config. In production run php artisan filament:optimize to cache components and icons.composer.json for the pinned Filament version before adding any third-party plugin, and match its constraint.php artisan storage:link is required, and the Curator/media disk must match FILESYSTEM_DISK. If images 404 in production, it’s almost always the symlink or a missing public disk config.Slug field has generateUniqueSlug(); if you build slugs manually, add a model observer or unique validation rule. Silent Str::slug() overwrites are painful once URLs are live.curl | grep '<meta' rather than trusting the admin preview.bg-blue-600 in a Blade file, changing the theme in admin won’t affect it — always use the CSS variable (bg-primary).php artisan livewire:discover (or correct namespace registration) before they render.->modifyQueryUsing(fn ($q) => $q->with(['author', 'media'])) on the table to avoid per-row queries at scale.AdminPanelProvider::panel() (nav, colors, middleware, plugins), resource hooks (mutateFormDataBeforeCreate, afterCreate, getNavigationBadge), FilamentShieldPlugin config, and the Settings classes. Nearly every customization request routes through one of these.php artisan filament:about prints installed panels, plugins, and versions — start there when a plugin “isn’t showing up.” Livewire DevTools in the browser is invaluable for form/action misbehavior.vendor/. If a behavior is wrong, publish the config or extend the class; the kit ships updates regularly and vendor edits will be wiped.How can I help you explore Laravel packages today?