rocramer/nova-matomo-analytics
This Laravel Nova card integrates Matomo analytics directly into your admin panel, letting you display visitors, page views, and other key metrics with configurable date ranges and widgets for quick at-a-glance insights into your site traffic.
Architecture fit. This is a presentation-layer plugin: a Nova card that surfaces Matomo reports inside the admin panel via a published config file holding a Matomo URL, site ID, and API token. It introduces no schema, no migrations, no queue workers, and no new datastore. That is the shape a TPM wants — blast radius confined to the admin UI, adoption reversible, rollback is "remove the card registration." The dependency that actually governs the decision is not Laravel, it is Nova: a paid, closed-source product whose card and asset APIs have moved across majors since this package's April 2021 release. Frame it as a plugin pinned to a vendor product you are separately obligated to keep upgrading, not as a library you integrate once. Keep it strictly at the edge of the stack: an internal ops/marketing pulse view for people who already hold Nova accounts. Never a source of truth for billing, SLAs, or external reporting.
Integration feasibility. Mechanically this is a sub-day job — composer require, publish config and assets, register the card in NovaServiceProvider, populate four config values. The gate is not effort, it is compatibility and provenance. Twenty-two stars, zero dependents, and a four-year-old last release mean no ecosystem has validated this against current Nova/Laravel/PHP, and there is no public evidence of production use. Two things must close before any estimate:
avg_time_generation metric — which implies a Reporting API client, not an embed wrapper. Those are different implementations with different security reviews, scaling models, and failure modes. Read the source before planning; this is a scoping blocker, not a doc nit.Technical risk. Medium-high, concentrated almost entirely in abandonment and credential handling rather than code quality.
src from being readable in devtools by any Nova user. Confirm read-only scope and rotatability before rollout.frame-src and X-Frame-Options must permit the Matomo origin; no mixed content. None of this is a package setting — it is infra change that surfaces to users as a blank rectangle with no error.Key questions.
Stack fit. Good for a conventional Laravel + Nova admin with an internal audience that already holds Nova accounts and today context-switches to a separate Matomo tab. The value proposition is consolidation of context — one fewer login, faster routine answers — not new analytical capability. The numbers stay Matomo's, unchanged, which is a genuine advantage over hand-rolled cards that drift from the source of truth. Poor fit for anything customer-visible, anything requiring audit-grade metric definitions, anything needing consolidated cross-site reporting, or any panel exposed to external users. Multi-brand setups force one card per site ID with duplicated config — a real product gap, not a tuning problem, and worth recording in the backlog.
Migration path. There is no migration because there is no incumbent. Frame it correctly as a timeboxed greenfield pilot on a non-critical dashboard with an explicit go/no-go, not a rollout. Do the version-compatibility spike first, on a throwaway branch, before spending any effort on config, CSP, or design. Define success criteria and the abandonment trigger before the spike starts so the decision is made on evidence rather than drift.
Compatibility. Four surfaces, ordered by likelihood of blocking:
frame-src, X-Frame-Options, mixed content, and whether the Matomo host is reachable from the admin environment.Pin the exact version in composer.json and commit the lockfile. Do not float on a ^0.5 constraint.
Sequencing.
frame-src allowance and Matomo framing confirmation.Fallback. Size the first-party Nova card against the Matomo Reporting API before committing. If the spike fails, that bounded option is well understood and often cheaper than resurrecting a stale dependency. MIT licensing means fork-on-first-breakage is viable either way.
Maintenance. There is effectively no upstream. Treat the team as the maintainer from day one. Budget roughly half a day per Nova/Laravel/PHP upgrade cycle to re-validate rendering, metric definitions, and config compatibility — and assign that owner by name before the pilot, not after. Pin versions, and expect to fork rather than wait for a fix.
Support. No SLA, single maintainer, negligible adoption, no community to lean on. Internal support is a documentation and ownership problem: someone must own "this number looks wrong," and the answer must be "ask Matomo," because the package renders Matomo's views and does not compose new ones. Publish that in the card's internal readme to preempt the ticket queue.
Scaling. App-side load is trivial for a handfu of cards on one dashboard; the cost model depends on which implementation it turns out to be. If it is a Reporting API client, each card view is a live API call to Matomo — multiplied by card count, site count, and every dashboard refresh, with no guarantee of caching. That is Matomo load and rate-limit exposure, not Laravel load. If it is an iframe, rendering cost sits in the browser and the Matomo instance. Either way, multi-site duplication multiplies queries linearly; there is no consolidated cross-site view and none should be promised.
Failure modes.
Ramp-up. Low for the integration itself — hours for a Laravel developer. The real ramp is the perimeter: security review of token placement and scope, CSP and framing changes, authorization validation with a low-privilege account, owner assignment, and pre-agreed pilot metrics. Plan for the governance cost to exceed the engineering cost, and say so to stakeholders up front.
Pilot metrics and kill triggers. Track weekly active viewers of the card, reduction in Matomo logins and tab-switching, time-to-answer for routine traffic questions, and ticket volume for "this number looks wrong." Pre-agree kill triggers — Nova incompatibility, unresolved token-exposure concern, or recurring maintenance exceeding a first-party rebuild — and commit to acting on them at the review date.
How can I help you explore Laravel packages today?