Skip to content

Work / Scrvio / Wiki / Surfaces

billing

Surfacecanonicalverified 2026-10-04

SURFACE.WEB.BILLING

Summary

The billing page of a workspace that has never paid: three plan cards and two upgrade buttons.

Raw wireframe

  • .context/designs/web/store/billing.html

Why it is drawn this way

No status card, and no plan is marked. Creating a workspace creates no licence row, so getOrganizationLicense returns null until a checkout completes. The Current Subscription card needs a licence, and the Free card is tinted only when license.plan is FREE. So neither shows.

Both upgrade buttons buy Team. Upgrade to Pro and Upgrade to Team call the same handleUpgradePlan, which always requests PlanTier.Team. Pro cannot be bought from this page.

Upgrade leaves the site. The handler sets window.location.href to a Stripe checkout URL, so the buttons are buttons. Stripe returns with ?success=true or ?canceled=true, and the page toasts.

The prices are typed into the page. $0, $14/mo, $29/mo per seat and every feature line are literals in page.tsx, not read from config.

No way back to the workspace. View Invoices is the only link in the page body.

Related

Sources

  • apps/website/src/app/workspace/[id]/billing/page.tsx
  • apps/server/src/api/04-billing/license/billing.service.ts