nsd7/laravel-activitylog-ui
nsd7/laravel-activitylog-ui adds a clean, ready-to-use web interface for viewing Laravel activity logs. Browse, search, filter, and inspect logged events and changes without building your own admin screens. Ideal for Spatie laravel-activitylog users.
Framing. This is a presentation layer, not a system of record. It ships a service provider, publishable Blade views, a published config, precompiled Tailwind assets, and a configurable route group that reads spatie/laravel-activitylog's activity_log table. The contract you adopt is Spatie's schema; the UI is disposable. Every scope, risk, and exit decision below follows from that: anything that couples the roadmap to this package's code rather than to Spatie's data model is over-commitment.
Architecture fit. Good for Laravel monoliths and internal admin/back-office services that already render Blade and can tolerate Tailwind. The decisive property is zero build step — precompiled assets mean it deploys to Forge, shared hosting, or lean containers with no Node/npm in the pipeline. That widens the eligible surface and lowers the integration estimate, and it is why a "trial this sprint" bet is credible. Poor fit for API-only services, SPA-plus-Laravel-API estates, and teams already standardized on Filament/Nova/Backpack, where a second admin paradigm and a second auth surface are net cost with no offsetting benefit.
Integration feasibility. Mechanically low friction: composer require, package auto-discovery, optional vendor:publish, dashboard at a configured route. It is a two-part decision, not one. Spatie instrumentation must exist first. Without LogsActivity on the relevant models the dashboard renders an empty shell, and the "project" silently becomes an instrumentation project — a materially larger scope that must be estimated and staffed separately, with its own go/no-go.
Technical risk, ranked for a TPM.
dompdf and maatwebsite/excel are suggest, not hard require, so a PDF engine is not silently pulled into production.main; published guidance tracks main, not the tag you install. Pin reading to the release tag.v1.2.1 is documentation-only — no runtime change from v1.2.0. Delivery value is that several unknowns moved from "ask the maintainer" (schedule risk) to "read, then verify against source" (analyst hours). Weak positive on maintenance intent; zero change to supply-chain risk, bus factor, or adoption evidence.
Key questions to close before commitment. (1) Is the route deny-by-default on install, and is the JSON API gated identically? (2) Are export dependencies optional? (3) What is LogsActivity coverage on the models we intend to audit? (4) What is current and projected activity_log row count and index state? (5) Who is the accountable owner of the gate and the retention policy? (6) Which Laravel/PHP versions does the composer constraint actually admit? (7) What is our fork trigger and who holds it?
Stack fit. Laravel + Blade + Tailwind, server-rendered, no JS framework, no asset pipeline. Multi-database support is a genuine differentiator for split-tenant or sharded estates where a single-connection viewer would be a blocker rather than a nice-to-have. Confirm PHP and Laravel version constraints against the host application before quoting a timeline; do not infer them from the docs site.
Migration path. Nothing to migrate. The change is additive: a provider, an optional published config, optional published views, and a route group under existing admin middleware. No schema change to application tables, no data backfill, no change to the Spatie package the app already runs. Reversal is deleting a route or removing the provider — an afternoon, not a project. That reversibility is the core of the business case and should be stated as such in the approval request.
Compatibility. Coexists with existing admin surfaces if scoped to a route prefix and the host's admin middleware. Three concrete verification items: precompiled Tailwind assets scoped so they don't leak into host CSS; translation files under a namespace that doesn't collide; and route/middleware resolution that matches how the host app authenticates admins, not how the package assumes it.
Sequencing (one engineer, roughly one to two sprints including hardening).
LogsActivity coverage on target models; confirm volume and index state. If coverage is thin, stop — rescope as an instrumentation project.composer diff for transitive additions, confirm route registration, confirm export packages were not force-installed, and confirm the dashboard is gated on arrival.viewAuditLog), policy, middleware — applied to the Blade routes and the JSON API as separate assertions in the test plan. This is the item that most often slips and most often matters.Do not combine steps 2 and 5 into one release. The pilot's value is measuring the outcome, and that requires a baseline captured before users have access.
Maintenance. Single maintainer, bus factor 1, no dependents. Pin the version exactly, keep the published config and any view overrides in VCS, and treat the fork as a live option rather than a theoretical one. Realistic maintenance load is low because the code surface is small, but the adapter surface is what you inherit: Laravel major upgrades and Spatie major upgrades both land on you, not on the maintainer's schedule. Budget a review pass per framework upgrade. Docs drift means upgrade decisions are read off the tag changelog, not the site.
Support. Consumers are internal — admins, support, compliance, engineering. Do not expose to end customers. Ramp-up for users is short (filters, diffs, saved views, export), but two expectations must be set explicitly in writing: this is not a SIEM or APM, and it is not tamper-evident. Adopting it must not be used to close the question of a real security logging strategy. Saved views double as documented runbooks and are worth curating deliberately for the support cohort.
Scaling. The dashboard issues read queries against activity_log. Confirm composite indexes on subject (subject_type, subject_id), causer, event, and created_at; pagination defaults will mask missing indexes in dev and expose them in production. Analytics charts are aggregate queries and will be the first thing to degrade at millions of rows. Mitigations, in cost order: retention and archival policy, a read replica or dedicated connection (multi-database support makes this practical), then restricting analytics to a smaller window. Exports are the sharper edge: PDF and Excel rendering are synchronous and memory-bound — cap row counts, prefer CSV for large deliverables, and restrict PDF/Excel to auditors on request.
Failure modes to plan against. Empty dashboard from missing instrumentation (looks like a broken deploy, is actually a scope gap); slow dashboard from unindexed queries; 500 on the export button when optional dependencies are absent; CSS bleed into the host admin; an authorization gap on the JSON API that the Blade routes don't share; unbounded activity_log growth once exports make the data look authoritative; and a Spatie major upgrade that breaks rendering with no upstream patch forthcoming.
Ramp-up and cost. One backend engineer for integration and hardening, roughly 1–2 days of actual wiring plus review time; analyst hours for the verification gates; no frontend toolchain, no design-system dependency, no new infrastructure, no vendor contract. Localization is now documented, so non-English internal audiences can be scoped into the pilot rather than deferred as a known gap. Frame approval as a reversible internal-tooling bet with two measurable outcomes — reduction in time-to-answer for record-change tickets and reduction in audit-evidence turnaround — and a pre-agreed exit: disable the route, remove the provider, keep the data.
How can I help you explore Laravel packages today?