jeroennoten/laravel-contact
A Laravel package that adds contact form functionality to your application, letting visitors send messages to site administrators. Includes configurable routes, validation, and views so you can drop a working contact form into any Laravel project quickly.
Architecture fit. The package is architecturally conventional for its era: a Composer dependency, a service provider, publishable config, publishable migration, a Contact Eloquent model, a controller with validation, a Blade view, and a mail send to configured recipients. That is exactly the shape a Laravel TPM wants to see — it composes via public framework surfaces (service provider, config, events-free but overridable views/routes) rather than patching internals. The shape is right; the vintage is the problem.
Integration feasibility. Low on any modern Laravel. Last release is 2017-02-21, which places it in the Laravel 5.3/5.4 window. Consequences:
composer.json constraint is almost certainly pinned to illuminate/* 5.3–5.4 and a PHP floor of 5.6/7.0. On a Laravel 9/10/11/12 application, composer require will fail resolution outright — this is not a "works with deprecation notices" situation, it's a hard install blocker.$request->validate() vs. manual validators, route middleware registration, and the removal of several 5.x helpers.Technical risk. High, and concentrated in places a TPM owns rather than engineering:
Key questions for the evaluation owner:
Stack fit. Effectively zero on supported Laravel. This package does not fit a modern stack as a dependency; it fits only as documentation of a pattern. The prior assessment's "adopt when it is actively maintained" gate fails on every count: no commits or releases in ~9 years, no declared illuminate/* range matching a supported version, no CI, no test coverage, and a community signal (4 stars) far below the threshold where third-party usage de-risks adoption.
Recommended path: do not adopt as a dependency. Reimplement in-house, using the package as a spec.
The honest scoping observation is that this package's entire surface is small — a route, a FormRequest with 4–6 rules, one table and model, one Mailable, one Blade view, one config file. That is a 1–3 day build for a Laravel developer, and it produces code your team owns, versions against your actual framework, and can extend without forking. Adopting an unmaintained 2017 package to save those 1–3 days and then spending 2–5 days fighting Composer resolution, mail APIs, and middleware registration is negative return on the same capacity.
If a dependency is mandated by policy, the migration path is a fork: vendor the code, rewrite the composer.json constraint to your current Laravel line, replace the mail call with a Mailable, convert the controller to a FormRequest, re-register routes through the current Route:: API, add tests, and re-publish. At that point you own a fork of an abandoned package — which is strictly worse than owning a clean in-house implementation with no inherited provenance, license, or upgrade ambiguity.
Compatibility and sequencing.
FormRequest + migration/model + queued Mailable + Blade view + notification to the team. Add throttling middleware and a honeypot on day one rather than as a follow-up.Sequencing note for the roadmap: re-baseline. The prior assessment anticipated a package adoption freeing multi-sprint capacity; this package frees nothing. If the roadmap assumed a dependency here, that assumption needs correcting now, not at integration time.
Maintenance. As a dependency: unacceptable. You would be the largest consumer of an abandoned package, funding all bug-finding with no upstream to receive fixes. As in-house code: trivial — one controller, one model, one Mailable, under 300 lines, fully within your own upgrade cadence.
Support. No maintainer response channel of any practical value. No security advisory process. No deprecation policy. Under the risk-register framing, this is a line item with an owner but no mitigation other than replacement — which argues for skipping the dependency entirely rather than recording a risk you already know you cannot accept.
Scaling. The workflow itself scales fine — a contact form is not a throughput problem. The two real scaling levers are ones the package does not address: mail delivery (send synchronously and a slow SMTP handoff becomes your request latency; queue it) and inbound volume (unthrottled public POST endpoints attract bots; without rate limiting, storage and mailbox grow unbounded). Both must be added regardless, which further erodes the "ready-to-use" value proposition.
Failure modes.
Ramp-up. Low either way — the domain is a contact form. The asymmetry is in who ramps: with the dependency, every future engineer ramps on an unfamiliar, undocumented, nine-year-old package; with in-house code, they ramp on code that matches every other controller in the application.
Recommendation. Decline as a dependency; adopt as a specification and reference scaffold. Record the decision as: package evaluated, rejected on maintenance and compatibility grounds (last release 2017, no supported illuminate/* range, no CI or test coverage); pattern accepted; implement in-house within the current sprint at ~2 days; review not required. This is a case where the cheapest dependency is the one you don't add — and where the prior assessment's own gates, applied to the actual metadata rather than the marketing description, produce a clear no.
How can I help you explore Laravel packages today?