Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Hotjar Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  • Dependency coupling: a minor package release that hard-requires a specific minor of a sibling package effectively makes core 3.1 a coordinated upgrade. Whether 3.1.0 is truly non-breaking depends on core 3.1 being non-breaking.
  • Closure resolution: closures are attractive for per-panel or per-tenant group names, but they introduce late-bound behaviour. If the group is resolved once at boot/registration time rather than at render time, tenant-scoped or locale-scoped values may resolve incorrectly or be cached across requests.
  • Silent fallback: keeping the translated group when the method is absent is good, but it means a misconfigured group name fails quietly rather than loudly — the page can end up in a group that doesn't exist, or vanish from navigation.
  • Versioning semantics: a feature released as a minor with an effective dependency floor is worth flagging to users as an upgrade note, not just a changelog line.

Key questions.

  1. Which Filament majors and Laravel versions are supported at 3.1.0, and is that unchanged from 3.0.x?
  2. Is 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.
  3. Does the Closure receive the panel (and tenant) as an argument, and is it evaluated per-request or cached at registration?
  4. What happens when the supplied group string does not match any group declared on the panel — orphaned item, fallback, or hidden page?
  5. Are navigationLabel, navigationIcon, and navigationSort configurable on the same fluent object, or is group the only lever?
  6. Is the translated default still locale-reactive after a group is explicitly set (expected: no)?

Integration Approach

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:

  1. Raise the composer constraint to ^3.1 and bring filament-analytics-core to ^3.1 in the same change.
  2. Optionally add ->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.

  1. Confirm Laravel/Filament support matrix and that core 3.1 is available and acceptable.
  2. Upgrade dependency constraints on a branch; run the existing test suite and a panel smoke test.
  3. Apply navigationGroup(...) only to panels that declare a matching group; use a closure if the value is panel- or tenant-dependent.
  4. Visual and permission regression on the settings page: does it appear, in the right place, for the right roles, in every panel and locale.
  5. Ship, then update internal docs/ADRs with the chosen group and the core version pin.

Operational Impact

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.

  • Core 3.1 not installed → method or class not found on plugin registration; surfaces immediately at boot, so low blast radius.
  • Group string not matching any declared group → page orphaned or hidden (expected behaviour, poor diagnosability).
  • Closure throwing or returning null → navigation render failure on every panel page, not just the settings page. This is the highest-severity mode and warrants a defensive return in the closure.
  • Closure resolved too early → stale or cross-tenant group names in cached/multi-tenant setups.
  • Silent behaviour retention after upgrade → stakeholders assume the page moved when it did not.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
takashato/laravel-vietqr
aitor24/laralang
kraenzle-ritter/entity-relations
dindigital/din-image
pomirleanu/image-colors
sawmainek/laravel-api-generator
delatbabel/jsonresponses
mouhamedfd/permissions-generator
eduplus/qr
laravel2580/idehelpers
delatbabel/viewpages
anavel/gettext
muhamadrezaar/highcharts
delatbabel/keylists
frankkessler/salesforce-laravel-oauth2-rest
anavel/foundation
wdmtech/enviricons
eii/laravel-captcha
muka/shape-reader
tdt/json