jeffersongoncalves/filament-hotjar
A Laravel Filament plugin that integrates Hotjar analytics into your admin panel. Easily add your Hotjar site ID and tracking snippet to Filament pages, enabling heatmaps, session recordings, and feedback widgets with minimal configuration.
Architecture fit. The change is a small, well-scoped extension to the package's existing Plugin::make() fluent configuration object. navigationGroup(string|Closure) delegates a presentation concern (where the settings page sits in the host panel's navigation) back to the consuming application, which is the correct boundary: the package owns the page, the application owns its information architecture. Accepting string|Closure matches established Filament idiom for navigation labels and groups, so it should feel native to anyone already configuring a panel. It is additive — the default translated group is preserved when the method is not called — which is the right default for an admin-surface package where discoverability matters.
Integration feasibility. Integration is a single fluent call in the panel provider; no migrations, published config, assets, or route changes. The real integration cost is the stated prerequisite on filament-analytics-core 3.1. That is a second dependency to verify, upgrade, and pin, and it is the item most likely to gate adoption for teams currently on core 3.0.
Technical risk. Low functional risk, moderate dependency risk.
Key questions.
filament-analytics-core 3.1 a new package, a rename, or a split-out of previously bundled code? This determines whether the upgrade is a composer update or an adoption decision.Closure receive the panel (and tenant) as an argument, and is it evaluated per-request or cached at registration?navigationLabel, navigationIcon, and navigationSort configurable on the same fluent object, or is group the only lever?Stack fit. Targets Laravel applications running a Filament panel, with the package registered as a panel plugin in a PanelProvider. The change presumes the consuming panel already has a curated navigation structure — it is only useful to teams who have defined their own groups and want the settings page to sit among them rather than in the package's default translated group.
Migration path. Effectively two steps, both reversible and both opt-in for behaviour:
^3.1 and bring filament-analytics-core to ^3.1 in the same change.->navigationGroup(...) to the existing Plugin::make() chain.No data migration, no republish, no cache clear beyond the standard Filament caches. Teams that do nothing get identical behaviour to 3.0.x, which makes this a low-ceremony upgrade.
Compatibility. Two axes to verify: package-level (Filament major, PHP version) and configuration-level (group string must match a group actually declared on that panel). In multi-panel or multi-tenant installs, confirm the group resolves per panel rather than globally, and prefer the Closure form if group naming is dynamic. Check for duplicate or orphaned nav entries after the change rather than assuming the item moved cleanly.
Sequencing.
navigationGroup(...) only to panels that declare a matching group; use a closure if the value is panel- or tenant-dependent.Maintenance. Minimal. One configuration line, no schema, no runtime services. Ongoing cost is the version pin on two packages instead of one, and the need to re-verify the group after any panel navigation refactor — a change in the host application can silently break placement.
Support. The predictable support ticket is "the analytics page moved / disappeared." The cause will almost always be a group name that no longer matches a declared panel group, or a nav item the user's role cannot see, not a package defect. Worth pre-empting with a docs example and a note in the internal runbook: group name is a soft reference, not a validated one. Because the default translated group is retained when unset, upgrading teams should also be told explicitly that their page will not move on its own.
Scaling. Negligible performance impact — it is metadata on a nav item. The scaling consideration is organisational: more panels, tenants, and locales mean more places a static group string can be wrong, which argues for the Closure form in any environment with more than one panel.
Failure modes.
Ramp-up. For a developer already fluent in Filament panel configuration, this is a minutes-to-adopt change with near-zero learning curve. For a team new to the ecosystem, the friction is not this method but the plugin/core split and the panel-provider registration model — budget orientation time there. TPM recommendation: accept the upgrade, treat it as a configuration nicety rather than a feature worth a release announcement, and use the dependency floor on core 3.1 as the trigger to audit what else in the panel depends on that package before sequencing the bump.
How can I help you explore Laravel packages today?