helios-live / filament-feature-showcase
A Filament plugin that displays a beautiful version changelog modal with an always-accessible 'What's New' button.
Package info
github.com/helios-live/filament-feature-showcase
Language:Blade
pkg:composer/helios-live/filament-feature-showcase
Requires
- php: ^8.1
- filament/filament: ^3.0 || ^4.0 || ^5.0
- spatie/laravel-package-tools: ^1.14
Requires (Dev)
- orchestra/testbench: ^8.0 || ^9.0 || ^10.0
- pestphp/pest: ^2.0 || ^3.0
- pestphp/pest-plugin-laravel: ^2.0 || ^3.0
README
A beautiful Filament plugin that displays a version changelog modal with an always-accessible "What's New" button. Keep your users informed about new features with an elegant, accordion-style changelog.
Features
- Auto-show modal when a new version is released
- Accordion-style changelog showing all versions (newest first)
- Persistent floating "What's New" button with unseen version indicator
- Version label in the sidebar footer
- Fully configurable via a publishable config file
- Dark mode support
- Respects your Filament theme colors
Installation
composer require helios-live/filament-feature-showcase
Setup
1. Register the plugin
Add the plugin to your AdminPanelProvider:
use HeliosLive\FilamentFeatureShowcase\FeatureShowcasePlugin; public function panel(Panel $panel): Panel { return $panel // ... ->plugin(FeatureShowcasePlugin::make()); }
2. Publish the config
php artisan vendor:publish --tag=filament-feature-showcase-config
3. Add to your theme
The plugin's Tailwind classes need to be included in your Filament theme. Add the following @source directive to your theme CSS file (usually resources/css/filament/admin/theme.css):
@source '../../../../vendor/helios-live/filament-feature-showcase/resources/**/*.blade.php';
Then rebuild your theme:
npm run build
4. User model requirement
Your User model must have a JSON column to store the last seen version (defaults to preferences). The column must be cast to array:
protected $casts = [ 'preferences' => 'array', ];
If you don't have one, create a migration:
php artisan make:migration add_preferences_to_users_table
Schema::table('users', function (Blueprint $table) { $table->json('preferences')->nullable(); });
You can use a different column name by setting user_column in the config.
Configuration
Edit config/filament-feature-showcase.php to define your versions and features:
return [ 'current' => '1.2.0', 'user_column' => 'preferences', 'preference_key' => 'last_seen_version', 'dismiss_route' => '/admin/dismiss-version-showcase', 'changelog' => [ '1.2.0' => [ 'title' => 'Dark Mode Support', 'description' => 'Full dark mode support across the platform.', 'features' => [ [ 'icon' => 'heroicon-o-moon', 'title' => 'Dark Mode', 'description' => 'Toggle between light and dark themes.', ], ], ], '1.1.0' => [ 'title' => 'Search Improvements', 'description' => 'Find what you need faster.', 'features' => [ [ 'icon' => 'heroicon-o-magnifying-glass', 'title' => 'Global Search', 'description' => 'Search across all resources instantly.', ], ], ], ], ];
Plugin Options
FeatureShowcasePlugin::make() ->showSidebarVersion(true) // Show version in sidebar footer (default: true) ->showButton(true) // Show the floating "What's New" button (default: true) ->buttonPosition('bottom-left') // Button position: bottom-left, bottom-right, top-left, top-right
Translations
The package UI strings are translatable using Laravel's localization system.
You may publish the translation files with:
php artisan vendor:publish --tag=filament-feature-showcase-translations
This will publish the package language files so you can customize labels such as the modal title, version badge, action buttons, and helper text.
For example, after publishing the translations, you may edit the Spanish file:
lang/vendor/filament-feature-showcase/es/messages.php
Depending on your Laravel version, the file may also be published under:
resources/lang/vendor/filament-feature-showcase/es/messages.php
Translating changelog entries
Changelog values are also passed through Laravel's __() helper when rendered.
This means you can keep using plain strings:
'changelog' => [ '1.2.0' => [ 'title' => 'Dark Mode Support', 'description' => 'Full dark mode support across the platform.', 'features' => [ [ 'icon' => 'heroicon-o-moon', 'title' => 'Dark Mode', 'description' => 'Toggle between light and dark themes.', ], ], ], ],
Or you can use translation keys:
'changelog' => [ '1.2.0' => [ 'title' => 'changelog.versions.1_2_0.title', 'description' => 'changelog.versions.1_2_0.description', 'features' => [ [ 'icon' => 'heroicon-o-moon', 'title' => 'changelog.versions.1_2_0.features.dark_mode.title', 'description' => 'changelog.versions.1_2_0.features.dark_mode.description', ], ], ], ],
Then define those translations in your application, for example:
// lang/es/changelog.php return [ 'versions' => [ '1_2_0' => [ 'title' => 'Compatibilidad con modo oscuro', 'description' => 'Compatibilidad completa con modo oscuro en toda la plataforma.', 'features' => [ 'dark_mode' => [ 'title' => 'Modo oscuro', 'description' => 'Alterna entre temas claros y oscuros.', ], ], ], ], ];
How It Works
- When a user logs in, the plugin checks their
last_seen_versionpreference againstconfig('filament-feature-showcase.current') - If the versions don't match, the modal auto-opens showing the latest version's features
- Clicking "Got it, let's go!" marks the version as seen
- The floating sparkles button is always available to re-open the changelog
- All versions are shown in a collapsible accordion, newest first
License
MIT