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 Page Visits Laravel Package

jeffersongoncalves/filament-page-visits

A Filament plugin for tracking and displaying page visits in your admin panel. Log page views, see which pages are most popular, and review visit analytics without leaving Filament. Simple to install and configure for any Laravel app using Filament.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Scope of the release. 3.2.0 is an additive, non-breaking minor release. It ships one new analytics widget (ResponseTimeTrendChart, daily p50/p95/p99 over a rolling 90-day window) plus translations across 19 locales. No deprecations or breaking changes are declared, and the widget can be disabled via metrics_page.widgets.response_time_trend.

Architecture fit. The widget is a read-only presentation layer: it renders aggregates from response_time_stats, a column introduced by an upstream dependency (jeffersongoncalves/laravel-page-visits 1.3.0), and does not sit in the request path. That is a good fit for an internal ops/product dashboard, but it creates a deliberate cross-package coupling — this package's headline feature is only as good as another package's schema and aggregation job. Treat the pair as a single deployable unit rather than two independent dependencies.

Integration feasibility. Low. The upgrade path is four commands (composer update of the upstream package, publish its migrations, migrate, and ensure page-visits:aggregate-and-prune runs). The auto-hide behaviour when the column is absent is a sensible defensive default and means a partial rollout will not break existing dashboards — it degrades to the pre-3.2.0 experience.

Technical risk.

  • Data-availability illusion. The chart only populates after the upstream migration and at least one aggregation run. An empty chart is indistinguishable from a broken widget to a non-technical stakeholder; this is the most likely source of a "the dashboard is broken" ticket.
  • Percentile semantics are inherited, not owned. p50/p95/p99 correctness depends on how the upstream package computes and stores response_time_stats. We are accepting that contract without evidence in these notes about sample resolution, histogram vs. raw-sample derivation, or timezone/day-boundary handling.
  • Migration on a large table. Adding a column to a visits table is usually cheap on modern MySQL/Postgres, but on high-volume installs it warrants a lock-duration check and a maintenance window decision.
  • Window vs. retention mismatch. The widget assumes 90 days of data exist. If aggregate-and-prune prunes more aggressively, the chart will silently show a shorter horizon than its label claims.
  • Localisation QA. 19 locales were added; long-form locales (de, fr, pt-BR, ru) frequently overflow widget legends and axis labels. This is cosmetic but highly visible.

Key questions for the maintainer/vendor.

  1. How is response_time_stats populated and at what granularity — can we reproduce p95 independently to validate it?
  2. Is the 90-day query covered by an index, and what is its cost on a visits table with tens of millions of rows?
  3. What is the default retention in aggregate-and-prune, and does it guarantee ≥90 days?
  4. Is there a supported backfill for the new column, or does the chart start empty at deploy time?
  5. Which Laravel/Filament/PHP versions are in the tested matrix, and are the upstream version constraints pinned tightly enough to prevent a silent mismatch?
  6. Can the widget be permission-gated (e.g. only ops roles see latency percentiles)?
  7. Are the 19 locales human-reviewed or machine-generated, and is there a fallback for untranslated keys?

Integration Approach

Stack fit. Assumes a Laravel application with a Filament-style admin panel, the laravel-page-visits package already installed, and MySQL/Postgres as the backing store. The widget needs no queue worker, no external service, and no new infrastructure — it is a view over data we already collect.

Sequencing (order matters; do not reorder).

  1. Upgrade upstream first. composer update jeffersongoncalves/laravel-page-visits to ≥1.3.0 in a staging branch and confirm the constraint resolves against the current Laravel/PHP matrix.
  2. Publish and run the migration in staging; measure lock time against a production-sized copy. If the lock exceeds the acceptable window, schedule it.
  3. Verify the aggregation job. Confirm page-visits:aggregate-and-prune is scheduled and has run at least twice post-migration. Confirm retention ≥90 days. Backfill or accept a ramp-up period — decide explicitly, and communicate the "data appears over the next N days" expectation before anyone sees the chart.
  4. Then upgrade this package to 3.2.0 and confirm the widget renders with real data in staging.
  5. Promote with the toggle off (metrics_page.widgets.response_time_trend = false), then enable it for a pilot group once the first aggregation cycles land.

Compatibility checks. Pin both packages together in composer.json so the widget cannot be deployed against a pre-1.3.0 page-visits. Confirm the auto-hide path is exercised once in staging (deploy without the column) so we know the failure mode is graceful rather than a stack trace. Spot-check three locales, including one long-string locale, at the narrowest supported breakpoint.

Rollout shape. Low blast radius, so a standard canary is sufficient: enable for the engineering/ops panel first, then widen. Keep the config flag documented as the one-line rollback — reverting the package version should not be necessary for a cosmetic or data-quality problem.

Operational Impact

Maintenance. We now have an explicit two-package upgrade dependency. Add both to the same dependabot/renovate group and the same release checklist; a solo upgrade of either package is the most likely way to break the widget. Ongoing effort is low — no new code to own — but the config surface (metrics_page.widgets.response_time_trend) becomes an operational artefact that should be documented in the runbook, not just the README.

Support. The dominant support load will be "the chart is empty / the numbers look wrong." Pre-empt it with a short runbook: (a) check the scheduled aggregation command ran, (b) check the migration landed and the column exists, (c) check retention settings, (d) only then treat it as a bug. Without this, the auto-hide behaviour will actively conceal the real cause and push tickets to engineering. Localisation issues will generate a smaller, low-severity stream of cosmetic tickets.

Scaling. The widget is a read-only aggregate query over 90 days; on a well-indexed table this is trivial for a dashboard viewed by tens of concurrent users. The real scaling concern is upstream storage and job runtime: adding per-request latency samples increases write volume on the visits table, and the aggregation job's duration grows with traffic. Budget for that in the upstream package's assessment, not this one — but flag it now, because the bill arrives after this release is adopted.

Failure modes and detection.

  • Silent hide when the column is missing — no alert; add a synthetic or health check that asserts the widget's data source exists.
  • Stale data if the scheduler stops — add a freshness indicator or an alert on "aggregation job last ran > 25h ago."
  • Migration lock during deploy — mitigated by staging timing measurement.
  • Upstream breaking change (page-visits 2.x) — pin the constraint and treat the upstream major as a coordinated upgrade.
  • Truncated window if retention < 90 days — verify once at setup; the chart gives no warning.

Ramp-up. Engineering effort to integrate is under a day for someone familiar with the stack; the larger cost is organisational — analysts and on-call need to understand that the chart lags by one aggregation cycle and depends on a scheduled command. Plan a short briefing for dashboard consumers and a runbook entry for on-call before enabling it broadly.

Recommendation. Adopt. This is a cheap, reversible, additive capability that turns data we already collect into a decision-useful latency view. Gate adoption on two things only: confirming the upstream aggregation job is scheduled and retention covers 90 days, and publishing the "empty chart" runbook entry. Everything else can be handled post-release.

Caveat: this review is based solely on the 3.2.0 release notes; the package identity, version constraints, and upstream internals above are inferred and should be confirmed against the source and the maintainer's answers to the questions in Technical Evaluation.

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.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums