Dashboard self-serve-ui USER SURFACE
Internal API product-teams INTERNAL CALLERS
Stripe payment-intents webhooks subscriptions PAYMENT PROCESSOR
Billing Platform subscriptions payments dunning invoicing entitlements THE ENGINE
CF Queues async-events EVENT BUS
subscription changes product mutations payment execution webhooks domain events

Stripe is an excellent payment processor. But stripe.Subscription owns the billing clock — when periods start, when invoices generate, when charges fire — and that coupling ripples through everything.

228 subscription-lifecycle tickets

12 weeks of Jira data. The changes_calculator mutation path generates steady ticket volume — 100% blocked on engineering changes.

73,517 flagged accounts

Accounts flagged as bad debt. Multiple dunning code paths race each other. 529 have contradictory state across stores.

90 invoice-remediation tickets

The invoice shows $25.47. The real debt is $19.66, hidden in metadata. Two buttons, one confusing. Steady volume, 100% blocked on engineering.

53 entitlement-drift tickets

Entitlements and billing state disagree. ~9,000 accounts in drift at any time. 73% of tickets blocked on engineering.

Full scoreboard — 18 tracked metrics, 12 weeks of ticket evidence, and an honest assessment of what's grounded versus what's asserted.

Three quarters of sustained execution. Each built on the last. The metrics prove the approach works.

Twelve weeks of ticket data across 19 tracked patterns. Quarterly metric trajectories with before-and-after numbers. What's improving, what's flat, what needs attention.

~360 tickets. Two workstreams. Zero by end of quarter. Plus one parallel track.

~360 engineering-attributable tickets per month. Two workstreams, zero by end of quarter. The pitch, the schedule, the burndown.

Credit notes + brain. Invoice = truth.

Credit notes replace metadata. The brain replaces racing handlers. Users pay what they see — one button, the invoice they recognize.

Confirm before commit. Rollbacks → 0.

Confirm before commit on all 5 payment paths. Remove the payment method gate. One checkout surface for everything.

3 bespoke flows → 1 platform.

Domain purchases, renewals, and transfers flow through Unified Checkout. 3DS on purchases. Seeds the billing lifecycle domain.

Seven domains, clean boundaries. The vision isn't a rewrite — it's what the platform naturally becomes once Q2's foundations are in place.

Billing Lifecycle owns WHEN. Collection owns HOW. Dunning owns FAILURE. Credits own TRUTH. Customer owns WHO. Usage owns CONSUMPTION. Entitlements own ACCESS. Each Q2 workstream seeds one or more of these domains.

Three services, clear boundaries. The billing intelligence concentrates in the engine. The pipe feeds it events. The facade displays the result.

subscriptions-api

Mutations, payment orchestration, dunning decisions, entitlement control, consequence orchestration.

billing-webhooks

50K–100K Stripe events daily. Sub-1s median latency. 27 handlers. No decisions. No side effects.

accounts

Identity, payment method view, account status. Reads from the engine. No billing logic.

stratus

Three checkout systems, two HTTP clients, one API gateway. The implementation layer where billing meets the customer.