elcodi/referral-program-bundle
Elcodi bundle that adds a referral program to your e-commerce store: generate invite codes and links, track which customer referred each signup or order, and credit rewards to advocates. Integrates with Elcodi's user and order components.
Architecture fit. This is the first and most important finding: elcodi/referral-program-bundle is a Symfony bundle, not a Laravel package. It ships as part of the Elcodi e-commerce component suite and assumes Symfony's Kernel, DI container, bundle registration, event dispatcher, and its own elcodi/* sibling components (Cart, Product, User, Currency, Rule). There is no service provider, no facade, no Laravel conventions. Dropping it into a Laravel application is not a "configure and go" integration — it is a framework port. For a Laravel codebase, architectural fit is effectively near zero.
Integration feasibility. Low. Three hard blockers:
Technical risk. High and largely unmitigable:
Key questions for the team.
TPM recommendation. Do not adopt as a dependency. Treat it as an architectural reference — the bundle's entity model (referral code, referral link, invited user, reward rule, conversion tracking) is a useful domain sketch, and its MIT license permits reimplementation. Budget a discovery spike to read the domain model and then spec a Laravel-native referral module.
Stack fit. Poor by construction. The package targets Symfony 2.x with Elcodi component siblings; the target is Laravel with Eloquent, its own container, and its own event system. The impedance mismatch spans container, ORM, events, and domain model simultaneously — this is not a single adapter, it is four.
Migration path. There is no supported migration path, so the realistic options are:
ReferralService, queued jobs, and Laravel events. Estimated effort: small (days, not weeks) for a focused referral feature; the Elcodi code gives you a free head start on the state machine and edge cases.Compatibility. No compatibility with current Laravel or PHP 8.x without work under Option C. Even under Option B, you would be pinning an EOL Symfony version, which is its own risk.
Sequencing. If any form of adoption is pursued, sequence it as:
Sequencing anti-pattern to avoid. Do not start by "just installing the bundle and seeing what happens." With an archived Symfony 2.x package, the install itself will fail or drag in conflicting constraints, and the team will burn time on dependency archaeology rather than product value.
Maintenance. Under any adoption path, maintenance becomes ours. The upstream is archived — no issues triaged, no PRs merged, no releases. Every PHP minor upgrade, every security advisory touching the transitive dependency tree, and every Laravel upgrade becomes a manual patch we own. For a referral feature — typically a low-differentiation, moderate-complexity capability — that is a poor maintenance-to-value ratio.
Support. Zero vendor support, zero community momentum (0 dependents), and documentation frozen at 2016. On-call engineers debugging a referral failure at 2 a.m. will have no upstream to escalate to and no recent Stack Overflow corpus. Internal runbooks would have to be written from scratch against unfamiliar Symfony 2-era idioms.
Scaling. The referral logic itself is not the scale concern; the surrounding architecture is. Under Option B, you add a second runtime and a network boundary for a feature that is bursty but low-volume (signups, conversions) — the operational overhead of a separate service outweighs any scaling benefit. Under native implementation, the referral workload rides on existing Laravel queues and database, which is almost always the right scaling profile for this feature.
Failure modes. Key risks to design against regardless of path:
Ramp-up. Counterintuitively high. The team would need to context-switch into Symfony 2 bundle conventions, Elcodi's component graph, and Doctrine mappings — knowledge that has no reuse in a Laravel codebase and is increasingly rare in the hiring pool. Native Laravel implementation, by contrast, ramps up on skills the team already has.
Bottom line for the TPM. The package scores 2.34 with 0.27 opportunity for good reason: it is a well-intentioned, competently built, abandoned Symfony component in a Laravel/Elcodi-adjacent world with zero downstream traction. Its value to us is as a domain reference under MIT, not as a dependency. Plan a short discovery spike, harvest the referral lifecycle design, and build natively. Budget: small. Risk if adopted as-is: high and permanent.
How can I help you explore Laravel packages today?