Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Saas Bundle Laravel Package

simpleweb/saas-bundle

SimpleWeb SaaS Bundle is a PHP package that bundles common SaaS building blocks such as plans, subscriptions, billing, and account management, helping Laravel/PHP developers add subscription features faster and focus on their core product.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — mismatched framing, low fit. The description calls this a Laravel package; it is a Symfony 2 bundle. Symfony 2's bundle system (kernel registration, DI container compiler passes, Doctrine ORM mappings, event dispatcher) is architecturally disjoint from Laravel's service providers, Eloquent, and queued jobs. There is no drop-in path. The only native host is a Symfony 2.x application, a framework that reached end-of-life in 2018. A TPM's first job here is to correct the record with stakeholders: this is not a component we can install, it is a domain reference artifact.

Integration feasibility — low, and only viable as a design source. Three options exist, all unattractive: (1) bridge it into Laravel via a custom container/ORM/eventing adapter — cost exceeds writing the subscription logic natively; (2) run a Symfony 2 sidecar — pulls an EOL framework and its transitive dependency tree into our production surface for a convenience library; (3) read the source and reimplement idiomatically — the only defensible path, and it means we are not adopting the package. Option 3 is the plan; the deliverable is a domain model and edge-case inventory, not code.

Technical risk — high.

  • Abandonment: 24 stars, 0 dependents, no identified maintainer. No community forks, no security triage, no issue backlog signal.
  • Dependency exposure: Symfony 2 component and Doctrine 2.x pins from the PHP 5.x/7.0 era will conflict with PHP 8.1+ and Laravel 10/11; transitive CVEs have no upstream patch path.
  • Payment-correctness risk: billing is the highest-consequence code we run. A decade-old integration likely targets deprecated gateway API versions with naive idempotency and no structured webhook retry semantics.
  • Low composite score (1.23) with 0.76 opportunity is consistent with a conceptually interesting, operationally dead artifact.

Key questions for the requester:

  • Are we actually a Laravel shop, or is a legacy Symfony 2 service in scope? The package framing contradicts the stated stack, and the answer changes the recommendation from "reference only" to "contain and plan an exit."
  • What capability is actually needed — plan/pricing catalog, subscription lifecycle state, trial handling, invoicing, or gateway webhook ingestion? Each maps to a different maintained alternative (Cashier, Spark, Paddle, or a bespoke module).
  • Which payment gateway does the bundle assume, and does that gateway's current API still resemble the one targeted?
  • Is the license permissive enough to extract and re-express domain logic in our own codebase?
  • What is the real deadline driver — a monetization milestone? If so, the build-vs-buy decision should be made on that timeline, not on this repo.

Integration Approach

Stack fit — conceptual only. The bundle's genuine contributions are a subscription entity with a state machine (trialing → active → past_due → cancelled), plan definitions, team/seat modeling, and billing event hooks. These are patterns to replicate idiomatically in Laravel, not import. Its value to a TPM is as a checklist that prevents an optimistic "billing = a checkout button" estimate.

Migration path — migrate the design, not the code.

  • Audit the source to extract entities, states, transitions, and invariants (plans, subscriptions, trials, invoices, team membership, invitations).
  • Re-express as Eloquent models plus enums/state machines in our application, with a versioned, immutable plan catalog.
  • Replace Symfony's event dispatcher hooks with Laravel events, listeners, and queued jobs.
  • Replace the bundle's gateway adapter with Laravel Cashier (Stripe or Paddle) or an equivalent maintained SDK — buy the payment rails, build only the entitlement logic that differentiates us.
  • If a legacy Symfony 2 service genuinely exists, isolate it behind a service boundary and do not extend it into new code.

Compatibility — blocking. Symfony 2 components, Doctrine 2.x mappings, and PHP 5.x/7.0-era constraints are incompatible with a modern Laravel runtime. Do not attempt in-process coexistence; there is no supported upgrade path.

Sequencing:

  1. Audit (1–2 days): read the bundle; inventory plans, subscription states, billing flows, team/invitation model, and gateway assumptions. Output: a one-page domain model.
  2. Gap analysis (1 day): map each capability to Cashier/Spark or to our own model; flag anything genuinely novel. Output: an explicit edge-case list (mid-cycle upgrades, proration, failed-payment retries, cancellation timing, refunds, tax).
  3. Decision gate: if nothing in the audit is unique, close the evaluation and adopt Cashier/Spark. This is the expected outcome.
  4. Prototype (≈1 week): build the subscription state machine plus webhook ingestion with idempotency keys, retry handling, and replay protection natively.
  5. Cutover: only after webhook idempotency and state reconciliation are proven under test. Feed the edge-case list into PRD acceptance criteria and engineering estimates (which will otherwise be optimistic).

Operational Impact

Maintenance — full ownership from day one. There is no upstream to patch. Any adoption converts this bundle into our permanent codebase, plus a bridging layer we also own. The true lifetime cost is not the package; it is stewardship of an EOL framework dependency and a bespoke billing surface that no vendor supports.

Support — effectively none. With 24 stars and 0 dependents there is no issue triage, no Stack Overflow corpus, and no vendor SLA. Engineers will reverse-engineer intent from source. Assume the agency is not an escalation path and that the README is stale relative to DependencyInjection/Configuration.php.

Scaling — unknown and unverified. Expect synchronous, in-request billing calls, limited idempotency, and undefined webhook retry semantics. Modern equivalents handle this with queued jobs, signed webhooks, and scheduled reconciliation. Billing paths are where an unaudited, abandoned library is least acceptable — the failure blast radius is customer-visible and financially material.

Failure modes to anticipate:

  • Unpatchable security vulnerabilities in transitive Symfony/Doctrine dependencies.
  • PHP major-version upgrades blocked by stale composer constraints.
  • Duplicate or lost webhook events causing double charges or silent subscription state drift.
  • Breakage when the payment gateway deprecates the API version the bundle targets.
  • Inconsistent trial/cancellation behavior if we partially port logic without the accompanying invariants.
  • Historical invoice corruption if plan records are edited in place rather than versioned.

Ramp-up — 1–2 weeks to understand, longer to port safely. No reliable documentation, no examples, non-obvious naming. Budget a senior engineer with both Symfony and billing-domain experience, plus review time for money-handling correctness. The realistic near-term cost is 1–2 engineer-days for the audit and design extraction — that is the entire spend I would authorize.

Recommendation: Do not adopt as a runtime dependency; do not add it to any vendor/dependency approval list. Leverage it strictly as a reading assignment: a compact, opinionated domain checklist that de-risks the billing epic and sharpens the build-vs-buy call. Route the actual requirement to Laravel Cashier, Laravel Spark, or a small bespoke subscription/entitlement module. Revisit only if the requester confirms a live Symfony 2 system in scope — in which case the recommendation shifts from "reference only" to "contain and plan an exit."

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core