siterig/sendinblue
siterig/sendinblue provides a Laravel integration for the Sendinblue (now Brevo) API, simplifying configuration and common tasks such as sending transactional emails and managing contacts from your PHP application.
Architecture fit. siterig/sendinblue is a Statamic v5 addon — a Composer-installed Laravel package that almost certainly registers a service provider, publishes a config file, and hooks Statamic's form Submission event to POST a contact into Brevo (formerly Sendinblue) via API v3. That's the correct shape for this problem: single-purpose, no database tables, no Control Panel UI, no persistent state. The surface area is small (realistically 3–6 classes and a config array), which caps the blast radius of adoption. The honest counterargument is that this functionality is ~80–120 lines of listener code plus an env var; the package's value is configuration convenience and field mapping, not capability. Treat it as a shortcut, not a dependency.
Integration feasibility. Requirements are modest: Statamic 5.x on Laravel 10/11, PHP 8.2+, a Brevo account with an API v3 key, at least one list ID, and a form whose field handles map cleanly to Brevo contact attributes. Typical friction is not code but Brevo-side semantics — attributes must pre-exist or payloads get rejected/dropped, double opt-in is a Brevo template concern rather than a package concern, and GDPR/consent capture has to be modeled explicitly. A competent Laravel engineer can spike this end-to-end in under a day.
Technical risk. High relative to the value delivered:
Key questions.
statamic/cms, laravel/framework, PHP) actually tested?Stack fit. Assumes a Statamic 5 site where contact capture flows through Statamic's native form pipeline ({{ form:contact }}). That's the happy path — drop-in install, publish config, map fields. If the front end is headless and posts to a bespoke controller, the addon's coupling to Statamic's form events may not apply, and you're better served by a thin in-house adapter calling Brevo directly.
Migration path. Greenfield: install, publish config, set API key and list ID in env/secrets, map handles, ship. Brownfield: if a Mailchimp or legacy Sendinblue listener exists, run both behind a config flag for one release cycle, reconcile contact counts between providers, then decommission the old path. Never cut over blind on a lead-capture flow.
Compatibility. Verify the Composer constraints explicitly rather than trusting the README: statamic/cms ^5.0, laravel/framework ^10|^11, PHP ^8.2. Confirm it targets Brevo API v3 and isn't pinned to a deprecated v2 endpoint. Check event-listener ordering if another addon (CRM, analytics, autoresponder) also subscribes to form submissions.
Sequencing.
Decision rule: adopt as-is if the spike passes and source review is clean. Fork-and-vendor into a private repo — or just reimplement in-house — if the listener is synchronous, untyped, or swallows errors. At this code volume, ownership is cheap and the supply-chain risk is not.
Maintenance. Low code volume, but non-zero ownership. With 0 stars and 0 dependents you should assume you are the de facto maintainer: Brevo API drift, PHP/Laravel bumps, and Statamic 6 compatibility will land on your desk. Budget a few hours per quarter, plus a forced migration at the next Statamic major. Pin the version in composer.json and vendor the source if the repository goes quiet.
Support. No community, no issue history, no documentation beyond the README. An internal runbook is mandatory: where the API key lives, rotation procedure, which Brevo list and attributes each form maps to, and an escalation owner for "leads stopped appearing."
Scaling. Contact-form volume is typically tens to low thousands per day, so throughput is not the constraint. The real constraints are: (a) synchronous HTTP inside the user request, adding 100–500 ms and coupling form success to Brevo uptime; (b) Brevo per-second/per-minute rate limits under spam bursts; (c) no batching. Mitigate with a queue driver (Redis or database), ShouldQueue on the listener, exponential backoff, and a dead-letter store.
Failure modes.
updateEnabled misconfigured.Mitigations: structured logging of every attempt keyed by submission ID, an alert on failed-subscribe rate, a try/catch that never blocks the user's success page, a replayable dead-letter table, and a weekly reconciliation of form submission count versus Brevo contact count.
Ramp-up. Half a day for a Laravel-fluent engineer to read the source and wire it up; a full day including Brevo account setup, DOI template configuration, attribute creation, consent copy, and QA. Add a day if queuing and observability must be retrofitted. After handover, marketing ops can own list and attribute management inside Brevo; they should not own the API key or the deployment.
How can I help you explore Laravel packages today?