bnnvara/event-like
A Laravel package from BNNVARA that adds like functionality to events, providing traits, migrations, and Eloquent relationships so users can like or unlike events with simple methods for toggling and counting likes.
Architecture fit. The central finding is a stack mismatch: this is packaged as a Symfony bundle, not a Laravel package. Laravel does not load Symfony bundles — it has no bundle registration, no Extension/CompilerPass lifecycle, and no bundle config tree. Laravel sits on top of individual Symfony components (HttpFoundation, Console, VarDumper, etc.), but a bundle is a framework-level packaging construct that has no equivalent in Laravel's service-provider model. Any reuse therefore requires either (a) consuming only the underlying domain classes if they are framework-agnostic, or (b) porting the bundle's wiring into an Illuminate\Support\ServiceProvider. Neither is a drop-in path. Additionally, the name "event-like" and the description "like events" are ambiguous — it is unclear whether this emits domain events for like/unlike actions, provides a persistence model for likes, or both. That ambiguity must be resolved before any fit assessment is credible.
Integration feasibility. Low as-is, moderate as a concept source. A Symfony bundle typically assumes symfony/event-dispatcher contracts, a DI container with tagged services, and often Doctrine for persistence. Laravel's dispatcher implements Illuminate\Contracts\Events\Dispatcher (and PSR-14 in recent versions), but the contracts and the tagging/auto-configuration mechanisms differ. If the package's core logic is thin — an event class plus a listener — the port is a day of work. If it carries Doctrine entities, repositories, and a bundle Extension class, the port is a genuine refactor with schema and transaction-semantics implications. Without the source audited, treat feasibility as unknown-leaning-negative.
Technical risk. High, driven by supply-chain signals rather than code: zero stars, zero dependents, a Bitbucket-hosted repo (no Packagist visibility, no public issue surface), and no evidence of CI, tests, or release cadence. Effectively a bus factor of one with no downstream validation — nobody else has shipped this. Licensing and PHP/Symfony version constraints are unverified. Adopting it directly into a Laravel service would introduce a dependency we cannot support, patch, or reason about under incident pressure.
Key questions.
Stack fit. Poor by default. Laravel's idiomatic equivalent — Event::dispatch(), ShouldQueue listeners, model observers, and a likes polymorphic pivot — is well-trodden and requires no third-party bundle. Before sponsoring a port, the TPM question is: what does this package give us that 150 lines of first-party code would not? If the answer is "nothing structural," build in-house.
Migration path. If we proceed, the only defensible route is extract-and-adopt, not install-and-use: vendor the source into an internal namespace, strip the bundle Extension/Configuration classes, and re-expose the services through a Laravel service provider with explicit bindings. Do not attempt to run Symfony's DI compilation inside Laravel. If persistence is Doctrine-based, replace with Eloquent models and our own migrations rather than bridging ORMs.
Compatibility. Verify PHP constraint against our runtime, confirm no symfony/framework-bundle requirement leaks into production autoload, and confirm PSR-14 compatibility if we intend to keep the event classes unmodified. Treat any Doctrine dependency as a blocker requiring a rewrite, not a bridge.
Sequencing.
Maintenance. Effectively unmaintained from our perspective. Zero dependents means no community pressure to fix breakage; a Bitbucket repo means we cannot rely on Packagist versioning, security advisories, or Dependabot visibility. Any fork we create becomes permanently ours to own — budget ongoing ownership, not a one-time integration.
Support. No documentation surface, no issue tracker we can file against, no upstream SLA. Internal support means reverse-engineering the source, which raises the cost of every future incident and every new engineer's onboarding.
Scaling. If the package dispatches synchronously inside the request cycle, each like becomes an in-line write plus listener execution — acceptable at low volume, a contention point under viral or bot-driven traffic. Verify whether listeners are queued; if not, wrap dispatch in a job. Watch for missing uniqueness constraints on the like pivot, which is the classic duplicate-row failure at scale.
Failure modes.
Ramp-up. Two to three days for a competent Laravel engineer to audit and either port or replace, assuming the source is accessible. The real ramp-up cost is organizational: establishing that this package is a reference implementation, not a dependency, and ensuring no engineer later runs composer require against it. Codify that decision in an ADR so it survives team turnover.
How can I help you explore Laravel packages today?