TurboJet
Payments

Plans

STARTER subscription plans and per-provider lookup keys.

SaaS membership plans live in packages/payments/src/subscription-plans.ts (exported as @repo/payments/plans). There is no packages/payments/config.ts.

Marketing Solo/Pro one-time products are not defined here — see Storefront checkout.

STARTER plan

The kit ships one subscription plan: SubscriptionPlanName.STARTER.

FieldValue
NameSTARTER
Slugstarter
Display price (monthly)200000 (IDR units in config)
Display price (yearly)150000 (IDR units in config)

Display amounts are for UI; the provider dashboard owns the real charge amount.

Lookup keys

Each plan carries provider-specific IDs under lookupKeys. NODE_ENV === "development" selects sandbox placeholders; production builds use production placeholders — replace them with real IDs from your dashboards.

packages/payments/src/subscription-plans.ts
lookupKeys: {
	mayar: {
		productId: /* … */,
		tierIds: { monthly: /* … */, yearly: /* … */ },
	},
	polar: {
		productIds: { monthly: /* … */, yearly: /* … */ },
	},
	midtrans: {
		planIds: { monthly: /* … */, yearly: /* … */ },
	},
	doku: {
		flexibillPlanIds: { monthly: /* … */, yearly: /* … */ },
	},
}

Helpers such as getLookupKey, getMayarProductId, and getSubscriptionPlanFromLookupKey resolve these keys in billing adapters and admin stats.

After creating products

  1. Create the product/plan in the active provider’s dashboard (Mayar, Polar, Midtrans, or DOKU).
  2. Paste IDs into the matching lookupKeys branch for sandbox and production.
  3. Set features.paymentsProvider and that provider’s env vars.
  4. Exercise checkout from the SaaS host (full TurboJet monorepo) — this marketing host does not ship the membership billing UI.

On this page