Files
chat_web_app/llm-fe/MONETIZATION.md
T
westfarn 75a0d7f637
Unit Tests / test (pull_request) Failing after 11s
Add RevenueCat Capacitor IAP; keep Stripe for web billing.
Native builds purchase/restore via RevenueCat; browser keeps Stripe
checkout/portal. Billing history shows store ledger rows from backend
webhooks. Closes #100.
2026-08-04 03:32:25 -07:00

1.5 KiB

Monetization (web Stripe + native RevenueCat)

Channels

Runtime Checkout / manage Ledger
Web (!isNativePlatform) Stripe Checkout + Customer Portal via /finance/... Stripe webhooks
Native Capacitor RevenueCat IAP (@revenuecat/purchases-capacitor) RevenueCat webhooks → same invoice/payment tables

FE displays whatever /finance/invoices/ (and subscription) returns after refresh. Provider badge uses provider + revenuecat_store.

App user id

RevenueCat appUserID = Django user pk as string.

  1. Prefer id from /user/get/ (serializer returns all model fields).
  2. Else JWT user_id claim (SIMPLE_JWT.USER_ID_CLAIM).

Backend webhook resolver accepts numeric pk (or email fallback).

Mobile env keys

In .env.mobile:

  • REACT_APP_REVENUECAT_APPLE_API_KEY
  • REACT_APP_REVENUECAT_GOOGLE_API_KEY
  • REACT_APP_REVENUECAT_OFFERING_ID (optional)

Package identifiers in the RC dashboard should include plan slugs (e.g. founders) so purchasePlan(planSlug) can match packages/products. Optional backend REVENUECAT_PRODUCT_PLAN_MAP maps product id → plan slug.

Auth hooks

  • Purchases.configure once on native (first purchase / logIn).
  • logIn(appUserID) after SignIn / SignUp / AuthCallback / AccountContext load.
  • logOut on Header2 sign-out and Delete account.
  • Issue #100 (FE) + companion backend RevenueCat webhook PR
  • ANDROID.md / IOS.md for store builds