Plans
The Plans panel (/plans in super-admin) defines what ecommus sells. Per ADR-030, the catalog is structured in 4 categories:
- Website packages — primary sale, tier matrix per niche
- Plugin add-ons — à-la-carte, post-vânzare
- Theme add-ons — post-vânzare, niche-restricted
- Support plans — only recurring revenue line
The model is one-time per-domain perpetual with free perpetual updates within the same major version. Operator can edit prices in the DB without redeploy. The catalog is structured so the same SKUs work in SaaS mode (Stripe Subscription) when SaaS launches post-customer-#50.
1. Website packages (primary sale)
Section titled “1. Website packages (primary sale)”Tier matrix per niche × 4 niches (ecommerce / services / real-estate / travel). Each niche has 4 tiers — Starter / Pro / Growth / Enterprise — with the same axis structure.
| Axis | Starter | Pro | Growth | Enterprise |
|---|---|---|---|---|
| Domains | 1 | 1 | 3 | unlimited |
| Niche packages | 1 | 1 | 2 | up to 4 |
| Default theme | demo standard | choice from 3 demos | all demos | + 8 h/year custom dev |
| Plugins bundled | core (~5) | core + popular (~10) | + advanced (~18) | all available |
| Mobile storefront | ✓ | ✓ | ✓ | ✓ + branded build |
| Mobile admin | — | — | ✓ | ✓ + POS |
| Marketplace publisher | — | — | — | ✓ |
| Multi-store within install | — | — | ✓ (2) | unlimited |
| B2B features | — | — | basic | full |
| White-label | — | — | optional | ✓ |
| Multi-warehouse | — | — | — | ✓ |
| Free support | 30 d | 90 d | 6 mo | 12 mo |
| Updates perpetually | ✓ | ✓ | ✓ | ✓ |
| Custom dev hours | — | — | — | 8 h/year |
| Dedicated SM + SLA | — | — | — | ✓ |
| Early access major versions | — | — | — | ✓ |
Starter must be complete for a small RO business — ANAF e-Factura, Stripe/Netopia, Sameday, VAT 21%, EAA accessibility are all included regardless of tier (legal mandates can’t be paywalled).
NOT in matrix (intentional):
- Number of products / orders / customers — no quantity caps; customer’s hosting handles their growth.
- AI features — plugin-separate (BYOK Anthropic / OpenAI / DeepL); not bundled in tier.
- Storage / bandwidth — customer’s hosting, not relevant to us.
Pricing
Section titled “Pricing”Pricing is operator-discretion and editable from /plans UI. Base SKU per niche × tier yields 16 starter SKUs. Add-on bundles (POD, marketplace publisher, etc.) are separate (Category 2 below).
Multi-domain stacking discount applies on the website-package price when a customer buys a 2nd / 3rd / 4th+ separate site (-30% / -40% / -50%). Same-brand-translation TLD pairs (acme.ro + acme.de redirect-translated) count as one license.
2. Plugin add-ons (post-sale, à-la-carte)
Section titled “2. Plugin add-ons (post-sale, à-la-carte)”Plugins are only available to customers who already hold a website-package license for the relevant niche. Plugins are NOT sold standalone — the framework is closed-source, and standalone plugin sales would imply OSS.
Per-domain pricing, one-time perpetual, free updates within same major. Examples (full catalog in super-admin/plugins):
- Marketplace integrations:
marketplace-emag,marketplace-amazon,marketplace-channelengine - Payment drivers:
payment-paypal,payment-euplatesc,payment-revolut-business - Accounting sync:
accounting-smartbill,accounting-quickbooks,accounting-xero - POD:
pod-printful,pod-printify - Subscriptions:
niche-ecommerce-subscriptions - SEO:
seo-autopilotsuite - AI:
ai-catalog-pilot,ai-photographer,ai-customer-service(BYOK)
Some plugins are bundled in higher tiers (e.g. Growth+ ships marketplace-emag by default for ecommerce niche). The bundle relationships are configured in the /permissions panel.
3. Theme add-ons (post-sale, niche-restricted)
Section titled “3. Theme add-ons (post-sale, niche-restricted)”When an existing customer wants to swap to a different theme from our catalog (still within their niche), this is a paid event — a separate license attached to the same domain that authorises the new theme.
Themes are NOT sold standalone, and they are NOT a way to acquire the framework cheaply. The customer always has a website-package license first. Themes are demos that sit on top of the framework; the real value is in the framework + plugins.
Customisation requested by the customer (color, logo, copy, layout overlay, custom sections) is a separate theme customization service — see License for the cosmetic / overlay / per-customer-plugin scope ladder. NO FORK — the canonical theme stays canonical so updates flow.
4. Support plans (only recurring revenue line)
Section titled “4. Support plans (only recurring revenue line)”Every website-package purchase ships with 30 days free support (basic email). After that:
| Tier | Periods | Includes |
|---|---|---|
| Free 30d | included with purchase | basic email support |
| Basic | 3 / 6 / 9 / 12 months | email + ticket, 24-72 h response |
| Priority | 3 / 6 / 9 / 12 months | + chat, 4-8 h SLA, dedicated channel |
| Enterprise | 12 months | + dedicated success manager, 1 h SLA, monthly review |
Pricing per tier is operator-discretion (/plans UI). Renewal triggers a Stripe charge + license-server re-issues the JWT with extended support_until — pushed to the install at the next heartbeat (no restart).
Support plans are the only thing that times out periodically. Everything else (license, updates, plugin downloads) is perpetual.
What customer loses when support window ends
Section titled “What customer loses when support window ends”- Helpdesk SLA → best-effort only
- Cloud-tied features (AI orchestration, ANAF SPV proxy, hosted email) → cease
- Premium plugin downloads on
npm.ecommus.cloud→ continue (perpetual ownership) - Framework runtime → unchanged
The framework does not phone home and disable, ever.
How a plan record looks (post-ADR-030)
Section titled “How a plan record looks (post-ADR-030)”{ "id": "<uuid>", "slug": "ecommerce-pro", "name": "Ecommerce — Pro", "category": "website-package", // website-package | plugin | theme | support "tier": "pro", // for website-package category "kind": "perpetual", // perpetual | trial | saas-monthly "niche_packages": ["ecommerce"], "features": ["multi_tenant", "audit_log"], "default_licensed_plugins": [ "niche-ecommerce", "efactura-ro", "shipping-sameday" ], "default_licensed_themes": ["theme-fashion"], "free_support_days": 90, "max_domains": 1, "white_label": false, "marketplace_publisher": false, "price_eur": 999, // operator-discretion "stripe_price_id": "price_...", "active": true}When operator issues a license against this plan, the JWT inherits tier + kind + niche_packages + features + default_licensed_plugins + default_licensed_themes. Per-license overrides are possible for one-off Enterprise deals (audit-logged).
Edits + roll-out
Section titled “Edits + roll-out”Editing a plan does not automatically re-license existing customers. Their JWT keeps the snapshot at issue time. To roll the change out:
- Click Re-issue licenses on this plan → server re-renders + re-signs every license tied to the plan with the new defaults; pushes via heartbeat
- Customer install picks it up at the next heartbeat (no restart)
Stripe price changes go through Stripe (you can’t edit a Stripe price object — create new + archive old). The panel walks the operator through this dual mutation.
What this enables for SaaS launch (post-customer-#50)
Section titled “What this enables for SaaS launch (post-customer-#50)”The kind discriminator is the seam. When SaaS launches:
- Same SKUs work
kind: "saas-monthly"flips Stripe billing from one-time to recurringexpires_atbecomes monthly rolling (re-set oninvoice.paidwebhook)- Everything else (features, niches, plugins, themes, domain binding) identical
No catalog rewrite required. Just billing-side wiring on the license-server.
See also
Section titled “See also”- ADR-030 — License model & catalog structure
- Overview — full panel inventory
- Tenants — tenant lifecycle
- Licenses — JWT issuance, transfer, revocation
- Plugins — plugin catalog + per-tenant gating
- License (customer-facing) — JWT shape + tier matrix + grace state