jeffersongoncalves/filament-metrics-matomo
A Filament plugin that brings Matomo analytics into your admin panel, with ready-made widgets and metrics for page views, visitors, and traffic insights. Connect your Matomo account and display key website stats directly in Filament dashboards.
Architecture fit. This is a Filament panel plugin that contributes a settings page, with filament-analytics-core as the underlying domain package. The 3.3.0 addition is a presentation-layer configuration hook: Plugin::make()->navigationGroup(string|Closure) lets the host panel place the settings page in an existing navigation group. That is a clean separation between analytics core behavior and Filament UI concerns, and it aligns with the standard Laravel/Filament plugin registration model. The dependency on filament-analytics-core >= 3.1 confirms a split-core/adapter architecture; the adapter should remain thin.
Integration feasibility. Low effort. Adoption is a single chained call in the panel provider where the plugin is registered. The string|Closure union supports both static grouping and dynamic grouping (for example, per-panel or per-tenant navigation). Existing installations that do not call the method retain the previous translated group, so the change is additive. The practical prerequisite is composer alignment with filament-analytics-core 3.1 or later.
Technical risk. Low, but not zero. The feature is backwards compatible and defaults are preserved. The main risks are dependency skew (package 3.3.0 with core <3.1), Filament major-version compatibility, closure evaluation context and lifecycle, navigation group name collisions, and translation fallback behavior. Because the closure is evaluated in the panel boot/navigation path, a throwing closure or an expensive query inside it could affect panel rendering. The release note does not indicate breaking changes or deprecations.
Key questions.
filament-analytics-core 3.1 a hard composer constraint or a runtime requirement?Closure evaluated—per request, per panel boot, or cached—and what arguments are injected?navigationGroup affect authorization or visibility, or is it purely presentational?Stack fit. Laravel + Filament panel application, installed via Composer. No new services, queues, storage, or infrastructure are introduced. The package fits existing PanelProvider plugin registration and does not alter the host application's architecture.
Migration path. Upgrade filament-analytics-core to >=3.1 first, then upgrade this package to 3.3.0. Existing consumers need no code change unless they want custom navigation grouping. Teams that want the settings page inside an existing group add ->navigationGroup('Group Name') or a closure at plugin registration. Teams that prefer the translated default do nothing.
Compatibility. The API is additive and should be treated as a semver-minor change. Backwards compatibility holds for existing plugin registrations. Confirm PHP and Filament version constraints in composer.json, and confirm whether Filament v4 (or the next major) is supported. Because the method name and signature are new, older package versions will not recognize it; pinning is advisable during rollout.
Sequencing.
filament-analytics-core versions across environments.filament-analytics-core to >=3.1 in a non-production branch and resolve composer constraints.3.3.0.navigationGroup() for panels that require consistent grouping; test both string and closure variants.Maintenance. Low. The new surface area is one configuration method. The main maintenance obligation is keeping the adapter and filament-analytics-core version ranges aligned, and documenting the closure contract if dynamic grouping is used. Closure-based configuration becomes application-owned code and should be covered by tests.
Support. Minimal support burden. Support documentation should show both string and Closure examples, state the core 3.1 prerequisite, and explain that omitting the method preserves the translated default group. The most likely support questions are “why did my settings page move?” and “why is the group name untranslated?”—both are configuration and translation issues rather than defects.
Scaling. Negligible runtime cost for static strings. If closures perform database or container lookups per panel boot, review for N+1 or repeated queries, especially in multi-tenant or multi-panel installations. Navigation configuration itself does not affect analytics data volume or query scaling.
Failure modes. Composer resolution failure or runtime error when core is below 3.1; orphaned or duplicated navigation entries from incorrect group names; panel boot failure if a closure throws; raw translation keys if the default group translation is missing; unexpected placement when multiple plugins target the same group; and cache staleness if Filament navigation is cached. None are data-loss risks, but panel boot failures are user-visible.
Ramp-up. Very low for developers familiar with Filament. A single release-note line is enough to adopt the feature. TPM and engineering should spend the ramp-up time on version alignment and a staging verification of navigation rendering, translations, and authorization rather than on learning a new API.
How can I help you explore Laravel packages today?