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 Goatcounter Laravel Package

jeffersongoncalves/filament-goatcounter

A Filament plugin that brings GoatCounter analytics into your admin panel, adding widgets and pages to view site traffic, page views, referrers, and other visitor statistics without leaving your dashboard.

View on GitHub
Deep Wiki
Context7

Getting Started

This package adds an analytics dashboard (settings page) to a Filament panel via a plugin object. Minimum steps:

  1. composer require the package alongside filament-analytics-core 3.1+ if you intend to use navigation grouping — the navigationGroup() API depends on core 3.1.
  2. Register the plugin on your panel provider:
    ->plugin(Plugin::make())
    
  3. Open the panel — the analytics page appears in the translated default navigation group.

First use case: drop the plugin into the panel, confirm the page renders with your existing auth/permissions, then decide whether to override the navigation group to match your panel's IA (e.g. "Reporting" / "Insights"). Start with the default group and only override once you know where it belongs in your menu.

Implementation Patterns

Default grouping (do nothing). Leaving navigationGroup() unset preserves the translated group shipped with the package — best for single-locale apps or when you want the package's opinion.

Static group name. Align the page with an existing panel group:

Plugin::make()->navigationGroup('Reporting')

Use this when your panel already standardises on string groups across resources/pages.

Closure-based group. Use a closure when the group depends on runtime context (tenant, user role, feature flag):

Plugin::make()->navigationGroup(fn () => filament()->getCurrentPanel()->getId() === 'admin'
    ? 'Administration'
    : 'Insights')

Keep the closure cheap — it is evaluated during navigation building on every panel render.

Consistency pattern. Define group names as constants or an enum shared between the plugin registration and your resources so navigation labels never drift:

enum NavGroup: string { case Reporting = 'Reporting'; }
// ...
Plugin::make()->navigationGroup(NavGroup::Reporting->value)

Multi-panel setups. Register the plugin once per panel with a panel-appropriate group, rather than trying to make one registration serve every panel.

Gotchas and Tips

  • Version coupling is real. navigationGroup() only exists with filament-analytics-core 3.1+. On older core the method is missing — you'll get a BadMethodCallException at boot, not a silent fallback. Pin the core version in composer.json if you rely on grouping.
  • Null/empty string semantics. Passing '' is not the same as omitting the call. If you want the translated default, don't call navigationGroup() at all; don't pass an empty value expecting a reset.
  • Closures run often. Navigation is built on many requests; avoid DB queries, container resolution of heavy services, or auth()->user() lookups inside the closure unless cached.
  • Ordering isn't grouping. This only changes the group; sort order within the group still comes from the page's own navigation sort. If the page lands oddly, check navigationSort rather than the group.
  • Translation mismatch. Custom group strings bypass the package's translations — if you're shipping a multilingual panel, put your group label through __() yourself.
  • Debugging. If the page doesn't move, clear the Filament cached components/navigation (php artisan filament:optimize-clear or optimize:clear) and re-check that the plugin is registered on the panel actually being rendered.
  • Extension point. The plugin object is the intended configuration surface — prefer chaining on Plugin::make() over subclassing or touching core package config, so upgrades stay painless.
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.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings