Dashboard no longer sells Polar plans. Money path is landing + apps/cloud-hooks.
- Removed
/billingpage, sidebar Billing item, plan badges, Polar checkout CTAs, paywall host/modal. - Removed dashboard APIs:
checkout,license-checkout,portal,subscription,can-downgrade. - Kept
GET /api/v1/billing/usage(guest + signed-in AI quota chip) and guest-ai / entitlements (fail-open). - Removed
CHM_POLAR_*from dashboard.env.production/.env.example/.env.preview. - Moved Polar license product IDs to
apps/cloud-hooks/.env.production. polar-setup.tswrites hooks env, not dashboard env.- Docs/skills: billing-checkout-flow, cloud-saas-mode, commercial-license, cloud-hooks-worker, cloud-signup, feature-permissions, CLAUDE.md.
- Dashboard
/api/v1/webhooks/polarstill exists as a thin adapter until Polar endpoint cutover to hooks (plans/103). No product UUIDs in dashboard env; secrets only. lib/billing/*Polar client + subscription store still used by webhook + fail-open plan resolution.use-billing.tsstartCheckout/openPortal are unused leftovers.
bun test src/lib/billing/guest-ai.test.ts+ first-run-decision: pass.bun test scripts/deploy-worker.test.ts: pass (hooks overlay finds Polar IDs).- Some dashboard tests need
apps/dashboard/node_modules(@tanstack/react-router); not run as full monorepo build.
- Set Polar product IDs and
POLAR_*secrets on cloud-hooks, not dashboard. - Landing Buy already points at
hooks.chmonitor.dev/checkout/license.
