elcodi/referral-program
Referral program add-on for Elcodi e-commerce that helps you create and manage referral codes, track invites and conversions, and reward customers for bringing in new buyers.
Verdict: Do not adopt. This is an archived (EOL) Symfony 2.x component set with a 2016 freeze date, zero dependent packages, and a low opportunity score (0.27). The referral-program module is not a standalone library — it is one leaf in the Elcodi e-commerce component graph, and its value is inseparable from that graph.
Architecture fit — poor. The package targets Symfony, not Laravel. Elcodi components assume Symfony's full-stack conventions: Doctrine ORM entity mapping (annotation/XML drivers), the Symfony EventDispatcher for referral lifecycle hooks, Symfony Form/Validator types, and Elcodi's own factory + repository provider patterns. Laravel's service container, Eloquent, and event model are structurally different, so nothing here is drop-in. At best you would be porting domain logic, not integrating a package.
Integration feasibility — low. The referral component only makes sense coupled to Elcodi siblings: elcodi/cart-coupon (referral rewards are typically issued as coupons), elcodi/user / elcodi/customer, and elcodi/core. Pulling those in to satisfy the dependency tree drags an entire legacy e-commerce framework into a Laravel application. Even in a Symfony codebase, the constraint surface (Symfony ~2.x, Doctrine ORM 2.x, PHP 5.x-era syntax) conflicts with any maintained Symfony 5/6/7 install.
Technical risk — critical, and largely unavoidable:
| Risk | Impact |
|---|---|
| PHP 8 incompatibility | Syntax and deprecated-API breakage (pre-7.2 idioms); will not boot on modern runtimes |
| No security patching | Archived repo; any CVE in the transitive Doctrine/Symfony 2.x tree is permanently unpatched |
| Composer resolution failure | Hard version conflicts against Laravel 9+ / Symfony 5+ constraints |
| Abandoned transitive deps | Elcodi core and its sub-dependencies are themselves unmaintained |
| No ecosystem signal | 0 dependents, 420 stars, no recent issues activity — no community to absorb risk |
Key questions to resolve before any further effort:
Stack fit — none. There is no supported path from elcodi/referral-program into a modern Laravel application. Laravel 10/11/12 require PHP 8.1+ and Symfony 6/7 components; Elcodi requires the Symfony 2.x line and a PHP 5.x/7.0-era runtime. These constraints are mutually exclusive at the Composer level, so "integration" would mean forking and rewriting, at which point the package is a reference document rather than a dependency.
Recommended approach — reimplement the domain, do not port the code. A referral program is a small, well-understood domain. The defensible scope in a Laravel application:
referrals table: referrer user, invitee, code, channel, state machine (invited → signed_up → qualified → rewarded → expired/void), timestamps.This is typically 3–8 engineering days including tests — comparable to or less than the effort of diagnosing a legacy dependency tree, and it produces code that matches your conventions.
Migration path if you already run Elcodi. Treat it as a strangler-fig extraction, not an upgrade. Stand up the new referral service alongside the legacy one, dual-write referral records, and backfill historical codes into the new schema with a read-only legacy lookup for old codes during a defined grace window. Decommission the Elcodi referral module only after the grace window closes and all outstanding codes have expired or been migrated.
Sequencing if the requirement is confirmed:
Compatibility note: if some stakeholder insists on reuse, restrict it to reading the Elcodi referral entity definitions and service configuration to enumerate the original rule set. That is a documentation exercise, not an integration.
Maintenance — unsustainable. Archived status means zero upstream fixes. Adopting it transfers 100% of maintenance burden to your team on day one, including ownership of a Symfony 2.x / Doctrine 2.x transitive tree that no one else is patching. There is no vendor, no maintainer, and no upgrade path. For a referral program touching money or credits, this is a standing audit and compliance finding.
Support — none. No maintainer response, no security advisories, no issue triage. Internal engineers unfamiliar with Elcodi's factory/provider conventions will spend disproportionate time on orientation; the framework's idioms were already dated in 2016 and will be unfamiliar to most current Laravel developers.
Scaling — indeterminate and untested. The component was written for mid-2010s Symfony monolith request patterns with synchronous Doctrine writes. Referral attribution is bursty (campaign launches, influencer drops), and there is no evidence of load testing, queue integration, or idempotency handling appropriate to modern reward issuance. You would be discovering its concurrency behavior in production.
Failure modes to expect:
| Failure mode | Consequence |
|---|---|
| Runtime upgrade (PHP 8.x) | Fatal errors; blocks all framework upgrades |
| Composer update in a shared app | Unresolvable conflicts force pinning of unrelated packages |
| Security advisory in a transitive dependency | No patch available; manual fork required |
| Duplicate reward issuance | Financial loss and reconciliation burden; no idempotency guarantee |
| Orphaned schema | Referral data trapped in an unsupported mapping layer, complicating reporting and migration |
| Bus-factor collapse | Original author knowledge unavailable; documentation is thin and framework-specific |
Ramp-up — high cost, low return. Onboarding a new engineer requires teaching them a deprecated framework's conventions (entity factories, repository providers, event subscriber wiring) to maintain roughly a few hundred lines of referral logic. That is an inverted cost curve: maximum learning investment for minimum delivered capability.
Bottom line for the roadmap: the domain value is real — referral programs drive acquisition — but this artifact delivers none of it. Recommend closing the evaluation, allocating the 3–8 engineering days to a native implementation, and revisiting third-party referral options only among packages with active maintenance, PHP 8.1+ support, and a demonstrable dependent base.
How can I help you explore Laravel packages today?