NewWe open-sourced 50+ Laravel packages
Custom AI apps, agents and automation — Roundly ConsultingRoundly
All packages

Each write dispatches an event so your app can react — send a verification email, sync a CRM, update a search index — without forking the package:

EventPayloadFired when
ContactAddedContact $contactA contact was added (before any primary promotion).
ContactUpdatedContact $contactA contact was updated.
ContactDeletedContact $contactA contact was soft-deleted (deleting an already trashed one is ignored).
ContactVerifiedContact $contactA contact became verified — via verification()->markVerified() or a confirmed token.
ContactVerificationRequestedContact $contact, string $plainTokenA token was issued; carries the plaintext for delivery.
PrimaryContactChangedContact $contact, ?Contact $previousA contact became primary — set explicitly or promoted after the primary left its kind; previous is the demoted one or null.
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Contacts\Events\ContactAdded;
use RoundlyConsulting\Contacts\Events\PrimaryContactChanged;

Event::listen(function (ContactAdded $event): void {
    // $event->contact — push to your CRM, search index or audit log
});

Event::listen(function (PrimaryContactChanged $event): void {
    // $event->contact is the new primary, $event->previous the demoted one (or null)
});

Adding a contact that becomes primary fires ContactAdded first, then PrimaryContactChanged. Deleting, syncing away or moving the primary fires PrimaryContactChanged for the contact promoted in its place. Events fire only through the action, facade and trait path — raw contacts()->create() calls stay silent.

Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

More ways to support, including crypto

By donating, you agree to our donation terms.

Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.