type: decision
status: active
timestamp: 2026-06-20
tags: [subscription, billing, firebase, entitlement]
status: active
timestamp: 2026-06-20
tags: [subscription, billing, firebase, entitlement]
ONE subscription unlocks every site and every extension
Single Razorpay sub in Firestore unlocks all paid features
ONE subscription unlocks every site and every extension
Decision
A single subscription per user — paid through Razorpay, stored at
users/{uid}/subscription in Firestore — unlocks paid features
across every site AND every extension in the family. There are no
per-site or per-extension subscriptions.
Why
Per-product subscriptions multiply checkout friction and confuse users who can’t tell where the family ends. A single subscription amortises the billing infra (one webhook, one entitlement doc, one churn metric) and turns every new site or extension into a free multiplier of the subscription’s perceived value. This applies the package-isolation rule at the entitlement level: every consumer reads the same Firestore doc.
Implications
- Razorpay webhook ?
apps/api/routes/razorpay/webhook.ts? writesusers/{uid}/subscriptionin Firestore (status,tier,current_period_end, etc.). - Each site reads
users/{uid}/subscriptiondirectly via the Firestore client SDK (browser-side) to gate features. - Each extension reads it via
chrome.storage.local-cached ID token + Firestore client (or via@chirag127/api-clientcallingapps/api/routes/firestore/). - Free-tier features remain on every site/extension regardless of subscription — paid features are additive enhancements, not gates on the core.
- Note: this does NOT contradict no-subscriptions-anywhere which is about OUR cost, not the user’s. We never PAY a subscription; we may COLLECT one from users for premium features.
- Switching billing providers (Razorpay ? Stripe / Lemon Squeezy / Paddle) is a webhook handler swap — entitlement schema doesn’t change.
Cross-refs
- Razorpay as primary billing
- Extension auth: Firebase + license-key fallback
- Firebase Spark forever
- No subscriptions anywhere (our cost side)