LaravelPackages.net
Acme Inc.
Toggle sidebar
banulakwin/filament-pwa

Filament PWA, web push, mobile bottom nav styling, and global search modal integration for Laravel.

0
0
1.0.1
About banulakwin/filament-pwa

banulakwin/filament-pwa is a Laravel package for filament pwa, web push, mobile bottom nav styling, and global search modal integration for laravel.. It currently has 0 GitHub stars and 0 downloads on Packagist (latest version 1.0.1). Install it with composer require banulakwin/filament-pwa. Discover more Laravel packages by banulakwin or browse all Laravel packages to compare alternatives.

Last updated

Filament PWA (banulakwin/filament-pwa)

Latest Version on Packagist Tests Total Downloads License

Filament panel PWA support: web push (VAPID + service worker), app badge sync, deduplicated admin broadcasts, mobile global search trigger, navigation loading overlay, and optional mobile bottom navigation view override.


Requirements

  • PHP ^8.4
  • Laravel ^11.0|^12.0|^13.0
  • Filament ^5.0

Installation

composer require banulakwin/filament-pwa

Or run the install command:

php artisan filament-pwa:install

This publishes config, service worker, webmanifest, and mobile bottom nav override.


Configure

1. VAPID Keys

Set in .env:

VAPID_SUBJECT=mailto:[email protected] VAPID_PUBLIC_KEY=your_public_key VAPID_PRIVATE_KEY=your_private_key

Or use FILAMENT_PWA_* prefixed overrides. Values also merge from config/services.php vapid if present.

2. Badge Count

Implement Banulakwin\FilamentPwa\Contracts\BadgeCountProvider and set:

FILAMENT_PWA_BADGE_COUNT_PROVIDER=App\Services\MyBadgeCountProvider

3. Recipients

Default strategy is config:

FILAMENT_PWA_NOTIFIABLE_MODEL=App\Models\User

Set recipient_criteria.where in config (e.g. ['is_admin' => true]).

Alternatively use recipient_strategy=query with DefinesWebPushRecipientsQuery on your model, or bind a custom WebPushRecipientResolver.

4. Notifiable Model

Add the trait to your user model:

use Banulakwin\FilamentPwa\Concerns\HasWebPushSubscriptions;

class User extends Authenticatable
{
    use HasWebPushSubscriptions;
}

5. Panel Registration

use Banulakwin\FilamentPwa\FilamentPwaPlugin;

->plugins([
    FilamentPwaPlugin::make(),
])

6. Optional panel plugins

These are not required by Composer; install them in your app when you use the related features:

composer require charrafimed/global-search-modal hammadzafar05/mobile-bottom-nav
use CharrafiMed\GlobalSearchModal\GlobalSearchModalPlugin;
use HammadZafar05\MobileBottomNav\MobileBottomNav;

->plugins([
    FilamentPwaPlugin::make(),
    GlobalSearchModalPlugin::make(),
    MobileBottomNav::make()->items([/* ... */]),
])

Run php artisan filament-pwa:install (or publish tag filament-pwa-mobile-bottom-nav) for the glass bottom nav Blade override.

7. PWA appearance

FILAMENT_PWA_THEME_COLOR=#ffffff FILAMENT_PWA_BACKGROUND_COLOR=#ffffff FILAMENT_PWA_APPLE_STATUS_BAR_STYLE=default

After filament-pwa:install, edit public/favicon/admin-site.webmanifest so theme_color / background_color match your brand. The status bar meta tag reads from config automatically.


Sending Pushes

use Banulakwin\FilamentPwa\WebPushBroadcaster;

WebPushBroadcaster::send('Title', 'Body', [
    'url' => '/admin/some-resource/1',
    'type' => 'contact-request',
    'priority' => 'normal',
    'dedupeKey' => 'contact-request:' . $id,
    'dedupeTtlSeconds' => 300,
]);

Routes

The package registers admin/api routes (configurable via route_prefix):

| Route | Method | Description | |-------|--------|-------------| | filament-pwa.badge-count | GET | Returns badge count JSON | | filament-pwa.push-subscription.store | POST | Register push subscription | | filament-pwa.push-subscription.destroy | DELETE | Remove push subscription |


Publish Tags

| Tag | Description | |-----|-------------| | filament-pwa-config | Config file | | filament-pwa-assets | Service worker + webmanifest | | filament-pwa-views | Blade views | | filament-pwa-mobile-bottom-nav | Mobile bottom nav override |


Testing

composer test          # Run PHPUnit
composer pint          # Fix code style
composer phpstan       # Static analysis
composer quality       # Run all (pint + phpstan + test)

Changelog

See CHANGELOG.md for details.


Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/your-feature)
  3. Run composer quality to ensure tests and style pass
  4. Commit and push
  5. Open a pull request

Package layout (reference)

src/
  FilamentPwaPlugin.php
  FilamentPwaServiceProvider.php
  WebPushBroadcaster.php
  Concerns/
    HasWebPushSubscriptions.php
  Console/
    InstallFilamentPwaCommand.php
  Contracts/
    BadgeCountProvider.php
    WebPushRecipientResolver.php
    DefinesWebPushRecipientsQuery.php
  Http/Controllers/
    BadgeCountController.php
    PushSubscriptionController.php
  Models/
    PushSubscription.php
  Notifications/
    WebPushAlertNotification.php
    Channels/
      MinishlinkWebPushChannel.php
  Resolvers/
    ConfigWebPushRecipientResolver.php
config/
  filament-pwa.php
database/
  migrations/
    2026_04_17_150000_create_push_subscriptions_table.php
resources/
  stubs/
    sw.js
    admin-site.webmanifest
  views/
    components/pwa-head.blade.php
    hooks/mobile-global-search-trigger.blade.php
    partials/*.blade.php
    vendor/mobile-bottom-nav/bottom-navigation.blade.php

License

MIT — see LICENSE for details.

Comments