mydnic/laravel-kustomer
A Laravel wrapper for the Kustomer CRM API that makes it easy to manage customers, conversations, and messages from your application. Configure your API credentials, then use a clean, fluent client to query and update Kustomer data without writing raw HTTP requests.
Architecture fit. mydnic/laravel-kustomer is a Laravel-native package: auto-discovered service provider, publishable config and migrations, and a Blade-rendered feedback widget. It fits cleanly into a monolithic or modular-monolith Laravel application where the feedback surface lives inside the same deployable as the product. It is a poor fit for a headless/decoupled architecture unless the package exposes JSON endpoints or a standalone JS bundle that can be mounted on a non-Laravel frontend — this is the single most important thing to verify before committing. It is also not a CRM integration despite the name; the "Kustomer" spelling collides with the commercial Kustomer CRM platform and should be called out early to avoid procurement and security-review confusion.
Integration feasibility. For a standard Laravel 10/11/12 app the happy path is short: composer require, publish config and migrations, run migrations, add the widget component to a layout, configure routing/auth/notification channels. Expect 1–3 developer-days for a technical spike that proves the widget renders, persists feedback, and fires notifications. Budget 1–2 weeks end-to-end including visual design, privacy review, multi-tenant scoping (if applicable), and QA. The realistic friction points are not PHP-side; they are the frontend asset pipeline and the auth/anonymity model.
Technical risk.
composer.json constraints and the CI matrix must be read, not assumed.Key questions.
Stack fit. Target: Laravel 10–12, PHP 8.1+, MySQL or Postgres, standard session auth guard. Confirm the asset pipeline before anything else — Vite version, Tailwind major, and whether the package's compiled CSS is scoped or global (global styles leaking into the host app is a common and annoying regression). If the product frontend is Vue/React/Inertia, verify whether the widget can be mounted as a component or standalone script; if not, the package only serves the marketing site or an internal admin surface.
Migration path. This is additive — there is no data migration, only a schema addition. If it is replacing an incumbent (Typeform, Google Forms, Intercom surveys, a bespoke table), assume no historical data import unless an export/import path is explicitly built; plan to keep the old tool read-only for a retention window rather than decommissioning it immediately. If the incumbent is a paid SaaS, model the cost saving against the internal maintenance line item — a free MIT package is not free.
Compatibility. Build and pin an explicit matrix before approval:
| Dimension | Verify |
|---|---|
| Laravel / PHP | composer.json constraints, CI matrix |
| DB driver | MySQL 8, Postgres 15+, SQLite (tests) |
| Frontend | Vite 5/6, Tailwind 3/4, CSP compatibility |
| Auth | Guard assumptions, anonymous submissions |
| Tenancy | Stancl Tenancy or equivalent, if SaaS |
| Queues | Notification dispatch path |
Pin an exact version in composer.json — no floating constraints on a low-velocity package.
Sequencing.
Maintenance. Steady state is light — roughly 2–4 engineer-hours per month to track upstream releases and refresh the pinned version, plus a spike at each Laravel major (annual). The real cost is contingency planning: assume a fork may be required at some point and keep the integration surface small so a fork stays cheap. Do not spread widget customizations across the host codebase.
Support. Community-only. No vendor SLA, no paid support tier, GitHub issues as the escalation path. That means an internal named owner (DRI) must be assigned, and the runbook must document what to do when the widget breaks in production. This is acceptable for a feedback widget; it would not be acceptable for a revenue-path component.
Scaling. Feedback volume is inherently low relative to product traffic — write load is negligible. The scaling risks are concentrated elsewhere: synchronous mail/Slack notification on submit (blocks the request, couples feedback UX to a third-party API), unbounded attachment storage if screenshots are captured, and N+1 queries in any bundled admin listing. Queue the notifications, cap attachment size, and put a lifecycle policy on the storage bucket. If submissions are accepted anonymously, rate limiting is mandatory.
Failure modes.
Ramp-up. A Laravel-fluent engineer is productive in under a day — the package follows conventional service-provider patterns. Engineers without Blade/package-convention experience should budget 2–3 days. The onboarding artifact that matters most is not documentation of the package but an internal runbook covering: where the tables live, where attachments are stored, how to disable the widget via config/feature flag, and who owns the fork.
How can I help you explore Laravel packages today?