Skip to content
Run the businessCommercial platform

Flexible billing

Subscriptions, usage, one-time access, and credits from one catalog.

Choose Stripe, Lemon Squeezy, Polar, or Mollie for hosted checkout and verified webhook fulfillment. Provider-specific portal and metering capabilities change the product surface automatically.

1
catalog shared by pricing and checkout
4
hosted billing provider adapters
1
time each provider event applies

Product example

See it working

This is the same visual component used by the authenticated app, rendered with deterministic sample data.

Scenario
viewport
surface theme
mode

Free workspace

See the no-subscription state and the implemented upgrade choices.

Inert sample data · no network access

Current plan

What this workspace pays for now, and when the next charge lands.

Free

No recurring subscription

Free

Current usage

How much of the current plan this workspace has consumed in the open billing windows.

Credit balance

Prepaid credits available to this organization

0

Active projects

1 / 1

x
Server enforcedWindow ends Sep 1, 2026

0 remaining

1 Included in your plan

AI generations

34 / 50

x
Server enforcedWindow ends Sep 1, 2026

16 remaining

50 Included in your plan

Authenticated API requests (all organizations)

42 / 120

x
Enforced on integrated API routesWindow ends 9:31 AM

78 remaining

Available plans

Choose a billing cycle before starting secure hosted checkout.

Free

Get started at no cost.

Your current plan

Free

  • Up to 1 project
  • Community support

Pro

A predictable subscription for teams moving faster.

Most popular

$29.00 /mo

  • Unlimited projects
  • Priority email support
  • Advanced analytics

Scale

A base subscription plus metered usage overage.

Usage-based

$99.00 /mo

1,000 included · $0.01 per extra generation

  • Everything in Pro
  • 7-year organization audit history
  • 1,000 AI generations included
  • Usage-based overage, no surprise caps

Pro Lifetime

One payment for permanent Pro access.

One-time purchase

$499.00 one-time

  • Permanent Pro access
  • No recurring charge
  • All Pro updates

100 credits

Prepay a balance and spend it when your product chooses.

Credit pack

$19.00 one-time

100 credits added after payment

  • 100 durable credits
  • Retry-safe fulfillment
  • No expiration

Enterprise

Custom contracts, dedicated support, and invoice billing.

Contact

Custom

  • Everything in Scale
  • Dedicated CSM and onboarding
  • Custom identity integration support
  • Custom SLA and security review
Contact sales

Preview ready

The problem this solves

Without a shared foundation, every team rebuilds these edge cases — differently.

The double-charge email

A provider resends a webhook, which is normal. Your code applies it twice. Now a customer's access or credit balance is wrong. Here, a repeated event changes nothing.

The zombie subscription

A customer cancels. A slow update message arrives late and flips them back to active. They get billed for a plan they ended. This kit checks event timestamps and throws the stale message away.

Three copies of your pricing

The pricing page says one thing. Checkout charges another. The server enforces a third. They drift apart slowly, and a customer notices before you do. Here it's all one file.

Highlights

Why it matters

One product catalog

Pricing, checkout, provider IDs, access, credits, and usage all read the same typed definition.

Repeats change nothing

Providers resend events by design. Each one applies exactly once, so a repeat settles to the same result.

Old news gets ignored

If a late message arrives after a newer one, the server skips it. A cancellation can't get undone by a stale update.

How it works

The mechanism end to end, as implemented in the repository.

  1. 1

    One product catalog

    You define modes, offers, provider IDs, and fulfillment once. Pricing, checkout, and server-side access read from that same definition.

  2. 2

    The server opens checkout

    Only an organization admin can start hosted checkout. Stable idempotency keys prevent retried clicks from creating duplicate sessions.

  3. 3

    Every provider message is checked

    The active webhook route verifies a provider signature or, for Mollie classic payment webhooks, retrieves the referenced entity with the server API key. Fake, malformed, or tenant-unbound messages cannot fulfill anything.

  4. 4

    State moves forward, once

    Each event applies inside a locked database transaction, exactly one time. Older events are skipped, so your billing state only ever moves forward.

Engineering guarantees

What this does and does not promise

Safety boundary

The public demo reads the real catalog but never calls a provider. Live checkout, portals, usage reporting, and webhook sync stay behind authenticated server boundaries.

Implementation evidence

The boundary above is code, not a claim. These files carry the contract:

  • src/features/billing/server.ts
  • src/features/billing/providers
  • src/features/billing/jobs.ts
  • config/billing.ts
Questions

Frequently asked questions

Build on the flexible billing foundation

The docs describe the same contracts this page demonstrates.