vouchedfor/audit-ui-bundle
A Symfony bundle from VouchedFor that adds a UI for browsing and reviewing audit trail entries. It provides the interface layer over your recorded audit data, helping teams inspect activity logs in the browser. Minimal adoption so far; check the docs for setup and compatibility.
Architecture fit — poor, and likely a category error. Despite being evaluated against a Laravel/PHP stack, the package name and namespace (vouchedfor/AuditUiBundle) indicate a Symfony bundle, not a Laravel package. A Symfony bundle is not a library you composer require into a Laravel app; it expects to be registered in a Symfony Kernel, wired through Symfony's DependencyInjection container, and typically ships routing (YAML/XML/PHP), Twig templates, Doctrine ORM entities/repositories, and event subscribers. Laravel uses the Illuminate container, Blade, and Eloquent. The overlap is only at the component level (Laravel consumes symfony/http-foundation, symfony/console, etc.), not at the application-framework level. Making this bundle boot inside Laravel would mean standing up a parallel Symfony kernel or hand-porting its service definitions — an integration project, not an installation.
Integration feasibility — effectively zero as a drop-in. Even setting framework mismatch aside, the signal set is disqualifying:
The realistic integration path is source-mining, not adoption: read the bundle to understand its audit-log viewer UX (diff rendering, filter model, pagination) and reimplement that surface on top of a maintained Laravel auditing package.
Technical risk — high, concentrated in three places.
--ignore-platform-reqs, aliasing) produces a runtime minefield.auditable_type/auditable_id conventions, diff serialization format). Laravel's ecosystem — owen-it/laravel-auditing or spatie/laravel-activitylog — uses different conventions. A UI port implies a schema migration or a compatibility view.Key questions for the spike:
spatie/laravel-activitylog + a Blade table would not? Is there a genuinely novel diff-viewer or filtering model worth copying?composer.json require/require-dev set?Stack fit — do not integrate; port the concept. The target stack is Laravel + Eloquent + Blade (optionally Livewire or Inertia/Vue for the diff viewer). The correct move is to adopt a maintained auditing backend — owen-it/laravel-auditing if you need per-model field-level diffs and restore, spatie/laravel-activitylog if you need a general activity feed — and build the presentation layer in Blade against that package's schema. Treat AuditUiBundle as a design reference, consumed by reading the repository, not by adding it to composer.json.
Migration path (if the bundle is currently in production elsewhere in the org):
composer why-not against the current app, inventory routes/templates/entities, and screenshot the UX you would want to preserve.audits/activity_log table. Prefer a read-only legacy view over a mutated import — audit logs are evidence, and rewriting them is usually a compliance problem.Compatibility: assume the bundle's PHP ceiling is below your runtime and its Symfony constraints conflict with Laravel's. Do not attempt to satisfy both in one Composer graph. If a hard requirement exists to run the original, isolate it as a separate Symfony service behind an HTTP boundary — that is a multi-week effort and almost certainly not worth it for an audit table.
Sequencing: backend auditing package first (it defines the schema and is the durable asset), viewer second, legacy data handling third, decommission last. Do not start with the UI — starting there inverts the dependency and locks you into a schema you did not choose.
Maintenance — total ownership transfer. Archived means you are the maintainer from day one. There is no upstream to rebase against, no release notes to read, and no one to ask. Every PHP minor bump, every Laravel major, and every security advisory in a transitive dependency becomes your ticket. Budget this explicitly; "we forked it" is a standing ~2–5% of an engineer per year even when nothing breaks, and considerably more in the year you migrate off a deprecated PHP version.
Support — none. No vendor, no community, no dependents to corroborate fixes. Debugging is source-reading. For a compliance-adjacent surface like an audit log, the absence of a support path is a governance finding, not just an inconvenience — auditors will ask who maintains the tool that produces your evidence trail.
Scaling — the audit table is the bottleneck, not the UI. Audit logs are append-only and grow superlinearly with write traffic. Expect to need: composite indexes on (auditable_type, auditable_id, created_at), partitioning or time-based archival, and a retention policy negotiated with legal/compliance before the table crosses ~10⁷ rows. The viewer itself must paginate server-side and avoid rendering full diffs in list views; a naive port that hydrates every row's JSON diff will produce N+1 queries and large payloads. Diff rendering is also CPU-bound on wide models — cap the fields shown.
Failure modes to design against:
DB::table() bulk writes — the log looks complete but isn't. Add a periodic reconciliation check on high-value entities.composer update can break the app.Ramp-up — asymmetric. The replacement path (Laravel auditing package + Blade viewer) is a 1–2 day ramp for any Laravel developer; both packages are well documented and widely used. The porting path is a 1–2 week ramp for a senior engineer who must learn the bundle's internals, its schema, and its implicit assumptions, with no documentation to lean on. That asymmetry is the core of the recommendation.
Recommendation: Do not adopt. Approve a short, time-boxed spike to mine the UI concepts and confirm there is no hidden business logic worth preserving, then build on a maintained Laravel auditing package. The 0.08 score, zero dependents, and archived status are not marginal signals — for a system-of-record-adjacent surface, they are disqualifying.
How can I help you explore Laravel packages today?