Skip to main content

Manage Your Plans

You define the plans your organizations subscribe to. Names, prices, quotas, and feature toggles all live in your kuploy-cloud admin — kuploy.app doesn't push a catalog down to you.

This page covers the day-to-day: where to edit, what the Internal tier is for, and how to recover if you delete too much.

Where you edit them

Go to /admin/plans in your kuploy-cloud admin. Each plan card shows:

  • Name + slug + price/cycle
  • Quotas (projects, apps, databases, domains, team members, build minutes, storage, mailboxes)
  • Feature toggles (white label, custom domains, AI assistant, payment gateway, …)
  • Default / Active / Hidden / Platform-managed badges

Edit opens the form for that plan. New plan at the top right opens the same form with empty defaults. Saving a paid plan auto-creates the matching Stripe Product and Price on your own Stripe account — you never have to paste Stripe IDs by hand.

Quotas

-1 means unlimited (treated as infinity by all quota checks). 0 means the feature is unavailable on this tier. Any positive number is the cap.

Currency

A plan's billing currency must be one your Payment Gateway can actually settle. The currency field offers the currencies your gateway's enabled providers accept (e.g. GNF, XOF for mobile money). If you run Stripe, you can enter any valid ISO currency — Stripe accepts its full supported list and rejects anything it can't process at checkout.

  • This only constrains paid plans (price > 0). A free / $0 plan has nothing to charge, so its currency is unrestricted and you can edit it before configuring a gateway.
  • If you haven't set up the Payment Gateway yet, the currency field is disabled and paid plans can't be saved — configure it first at Admin → Payment Gateway. The rest of the plan form stays editable.
  • Prices display in their own currency everywhere customers see them (the public /pricing page, the org billing page) — a 290,000 GNF plan shows as GNF 290,000, not a dollar amount.

Default plan

Exactly one plan is the default — newly-created organizations land there until you (or they) change it. The form auto-unsets the previous default when you mark a different plan as default.

Active vs Public

  • Active off: hidden from new signups, but existing subscribers keep running.
  • Public off: hidden from /pricing and the org-facing upgrade picker. Customers can't self-subscribe, but you can still assign orgs to it from /admin/orgs. Useful for grandfathered legacy tiers.

Plan delete vs deactivate

You can't hard-delete a plan that has active subscriptions referencing it — the system refuses and asks you to deactivate instead. Deactivating keeps existing subs working but hides the plan from new signups. Once no subscription points at it, hard-delete is allowed.

You also can't deactivate the default plan — mark another plan as default first.

The Internal tier

There's a special plan called Internal seeded on first install. It bypasses billing entirely and grants every feature your platform tier on kuploy.app permits, with unlimited quotas. You use it for:

  • Dogfood orgs you operate yourself
  • Comp'd accounts (employees, partners, beta testers)
  • Support recovery — temporarily lift caps on an org mid-incident without bumping them to a real paid tier

Assigning an org to Internal

Go to /admin/orgs, find the org, click Change plan, pick Internal from the dropdown. The org's subscription flips immediately — no payment gateway interaction, no Stripe charge. An "Internal" badge appears next to the org name in the list so it's obvious which orgs bypass billing.

Reverting from Internal

Same dialog — pick a normal plan. The next renewal goes through your gateway normally.

What you can't do

The Internal tier is platform-managed; the Edit and Delete buttons don't appear on it. Its slug (internal) is reserved — you can't create another plan with the same slug. This is intentional so support patches and operator-side scripts can rely on its shape.

"Reset to seeded defaults"

If you delete too many plans or want to start fresh, click Reset to seeded defaults at the top of /admin/plans. It re-inserts the bundled defaults (free + internal) using ON CONFLICT DO NOTHING semantics:

  • Plans that already exist with those slugs are not touched.
  • Plans you've added with different slugs are not touched.

So Reset is safe even on a heavily-customized catalog — it only fills in missing seeded rows. If you actually edited the free row and want the bundled values back, deactivate-and-recreate that one row by hand.

"Suggest paid plans"

A fresh install seeds only free + internal — no paid tiers. Rather than hand-build each one, click Suggest paid plans at the top of /admin/plans to seed a Starter / Growth / Business ladder to start from. The suggested plans:

  • are created as hidden drafts (Public off) at price 0, in your gateway's currency — review the quotas, set a real price, then turn Public on to publish each one;
  • have quotas clamped to your platform plan's caps, so every suggestion is valid against your kuploy.app tier out of the box;
  • are idempotent — running it again skips any of those slugs you already have, and never touches your other plans or the default.

The button is available once your Payment Gateway is configured (that's where the currency comes from). It's a starting point, not a recommendation — tune everything to your market.

What kuploy.app charges you

Two distinct billing layers worth keeping separate:

What it isWhere it's set
What kuploy.app charges youYour platform plan (Hobby / Starter / Growth / Business / Enterprise) and its aggregate caps across your whole instance.kuploy.app/pricing; managed there, not here.
What you charge your orgsThe plans on this page (/admin/plans).Here.

Your platform plan from kuploy.app caps what you can offer your orgs on two axes:

  • Quotas — if your Growth tier permits 20 projects in aggregate, you can't offer your customers a plan with "unlimited projects" each. The form refuses limits that exceed your platform cap and points you at the upgrade.
  • Features — boolean capabilities (white-label, custom domains, payment gateway, mailboxes, AI assistant, …) only flip on for an org if BOTH your platform tier AND the org's plan grant them. An org assigned to Internal still respects this ceiling: Internal grants everything, but only up to what your platform tier allows. (Pre-kuploy-hub#129, Internal short-circuited the cap — fixed.)

See Cloud Billing Setup for connecting Stripe to your kuploy-cloud instance, and Licensing for the platform-plan side.