digit7s/filament-audit-toolkit
A Filament audit toolkit for Laravel apps that captures model and user activity, displays changes and history in a clean panel UI, and helps teams quickly review who changed what, when, and from where. Includes configurable audit trails, filters, and a searchable timeline for fast investigation.
Architecture fit. The package is a Laravel-native audit/activity explorer that overlays a query and presentation layer on an audit record store, exposing Event and Category filters plus a chronological "Audit Explorer" view. This is a read-mostly, cross-cutting concern: it sits above the application's persistence layer, depends on the host app's auth (policies/gates/middleware) for row-level visibility, and is expected to be DB-agnostic within Laravel's supported drivers. The v0.1.1 fixes confirm the architecture is a thin query-builder + UI package rather than a full audit writer — it reads records produced elsewhere. That is a favorable fit for teams that already have an audit table (e.g. via an activity-log package) but no analyst-facing UI.
Integration feasibility. Low-to-moderate. Standard Laravel package mechanics (Composer install, service provider auto-discovery, publishable config/migrations/views) are implied. The main effort is not installation but data contract alignment: the package's assumptions about occurred_at, event/category columns, and tenancy/ownership columns must match the host schema. The regression coverage added in 0.1.1 is a positive signal — the maintainer is testing duplicate values, empty tables, and authorization boundaries, which are exactly the three highest-risk behaviors for an audit viewer.
Technical risk. Several concrete risks:
0.x bump.DISTINCT queries inheriting occurred_at ordering) is a classic SQL portability trap. It was fixed for MySQL, tested on SQLite/MySQL — PostgreSQL and MariaDB are not mentioned. If your estate is Postgres, treat filter correctness as unverified.Key questions for the maintainer/vendor.
occurred_at, id) for stable pagination?0.x, and what is the anticipated 1.0 timeline?Stack fit. Requires a Laravel application (roughly Laravel 10+) on PHP 8.1+. It is a natural fit for an existing internal admin/back-office surface — the Audit Explorer is an analyst/compliance tool, not a customer-facing feature — so it should be mounted behind staff authentication and a dedicated authorization gate rather than inside a customer tenant route group.
Migration path. There is no migration from a prior version of this package (0.1.1 is effectively greenfield). The real migration is from the current state — ad-hoc SQL reports, log grep, or a hand-rolled Blade table — to the package's filter/explorer contract:
occurred_at, event, category, actor, and tenant keys.occurred_at, event, category, and tenant columns before enabling the explorer against production-sized tables.Version and compatibility posture. Pin exactly (0.1.1) rather than floating ^0.1. Verify the host app's Laravel and PHP versions against the package's composer.json constraints before committing. Confirm the package's frontend stack (Blade vs. Livewire vs. Inertia/Vue) matches what your app already ships — a mismatched stack adds a second build pipeline for one screen.
Sequencing.
DISTINCT filter paths; treat them as unsupported until proven.Maintenance. This is a single-maintainer 0.x package. Expect frequent patch releases with terse notes — 0.1.1 is itself a pure bugfix with no feature or deprecation signal. Budget roughly a few hours per upgrade to re-run the filter and pagination regression checks; more if view/config contracts shift. Pin the version and upgrade deliberately, not on composer update.
Support. No LTS, no formal support channel implied. Internal ownership must be assigned — typically the platform/data team that owns the audit table — with a documented fallback (direct SQL queries) for when the explorer is broken.
Scaling. The dominant cost is the DISTINCT filter query over an append-only audit table. Audit tables grow monotonically and are rarely pruned, so filter performance degrades predictably. Required: composite indexes covering (tenant, occurred_at), (event, occurred_at), (category, occurred_at). Watch for full-table scans on the "distinct categories/events" dropdown queries — those are the ones that silently get expensive at 10M+ rows. Consider a materialized summary table or a capped lookback window in the UI config. Read replicas are the natural mitigation for analyst load.
Failure modes.
occurred_at.Ramp-up. Low for a Laravel-competent engineer: a day to install, map schema, and wire auth; a week to build confidence in filter correctness and pagination stability. The real ramp-up cost is domain-side — briefing compliance users on what the explorer does and does not guarantee (read-only, no retention controls, no redaction). Document the supported database drivers and the known-untested ones so future maintainers do not over-trust the tool.
How can I help you explore Laravel packages today?