MysticX Pricing & Membership Restructure - April 2026
Status: Planning
Date: 2026-04-08
Sources: Boss requirements doc, technical impact analysis, cross-platform operations guidance
Table of Contents
- 1. Executive Summary
- 2. Problems to Solve
- 3. New Pricing Model
- 4. Current vs New Comparison
- 5. Platform Strategy
- 6. Cross-Platform Entitlement Rules
- 7. Apple & Google Store Compliance
- 8. Industry References
- Technical Implementation →
- 15. Open Questions
- Appendix A: Unchanged Areas
1. Executive Summary
This document consolidates the full pricing restructure plan for MysticX across web and mobile platforms.
What's changing
Web: Increase monthly credit grants (Gold 4,000 -> 6,000, Diamond 24,000 -> 30,000). Introduce yearly plans with drastically reduced prices and one-time lump-sum credit grants (Gold $89.99/100K credits, Diamond $299.99/1M credits). Default recommendation shifts to Gold Yearly.
Mobile (iOS & Android): Launch with Gold-only subscriptions (Weekly $7.99/1,500, Monthly $19.99/6,000, Yearly $89.99/100,000). All plans include a 3-day free trial. No credit packs. No Diamond tier. RevenueCat handles Apple IAP and Google Play Billing.
Core principle
"Billing follows the original channel. Entitlements are universal across all platforms. Identity is always premium."
Key risks
- Yearly one-time grant - Current system grants credits per invoice. Yearly plans need a single lump-sum.
Credit reclamation on yearly cancel— Resolved: No reclamation on any cancel type. User keeps credits until period ends.- iOS/Android platform separation - Mobile product catalog differs from web intentionally.
- Weekly subscription - New billing period that does not exist in the current system.
- Mobile IAP integration - Apple IAP + Google Play Billing via RevenueCat is a new engineering workstream, not a config tweak.
- Cross-platform entitlements - Diamond bought on web must be honored on mobile, even though mobile does not sell Diamond.
2. Problems to Solve
2.1 Price inversion on web
The $14.99 credit pack (4,000 credits) is a better deal than the $19.99 Gold membership (4,000 credits/month), creating a "price inversion" that discourages subscription adoption. Although the math works out in favor of the subscriber when daily rewards are included (6,400 total), the perception problem kills conversions - especially with price-savvy North American users.
2.2 Missing weekly and yearly plans for mobile
iOS users expect low-commitment entry points. A weekly plan with a free trial follows industry best practices for converting first-time users.
2.3 Low membership conversion
Purchase data analysis shows credit packs outselling memberships. The current pricing does not give users enough reason to commit to a subscription.
2.4 No yearly plan with strong discount
Industry research recommends at least 50% off for yearly plans. The current 30% yearly discount is insufficient.
3. New Pricing Model
3a. Web Subscriptions
| Plan | Price | Credits | Daily Reward | Unit Price ($/SE) |
|---|---|---|---|---|
| Gold Monthly | $19.99/mo | 6,000/mo | 80/day | $0.0033 |
| Diamond Monthly | $69.99/mo | 30,000/mo | 100/day | $0.0023 |
| Gold Yearly | $89.99/yr | 100,000 (one-time, instant) | 80/day | $0.0009 |
| Diamond Yearly | $299.99/yr | 1,000,000 (one-time, instant) | 100/day | $0.0003 |
- Default recommended plan: Gold Yearly
- Gold yearly displays a "62% off" badge (vs monthly: $89.99 / ($19.99 x 12) = 62% savings)
- Diamond yearly displays a "64% off" badge (vs monthly: $299.99 / ($69.99 x 12) = 64% savings)
Pricing card badges:
| Plan | Badge | Purpose |
|---|---|---|
| Gold Yearly | "Most Popular" badge | Social proof — nudges users past the annual commitment barrier toward highest LTV plan |
| Diamond Yearly | Subtle "Lowest price per credit" text near the price (not a badge) | Rational/economic justification — at $0.0003/SE it is objectively the lowest cost per credit. Display as small muted text beneath or beside the price, e.g. "$299.99/yr · lowest price per credit" |
The "Most Popular" badge provides social proof on the plan most users should pick. The "lowest price per credit" annotation gives power users a quiet, rational reason to upgrade to Diamond without competing visually with the badge.
Instant Credits - Key Selling Point
Yearly subscribers receive their entire credit balance the moment they pay - no drip, no waiting.
- Gold Yearly: 100,000 Energy credited instantly on purchase
- Diamond Yearly: 1,000,000 Energy credited instantly on purchase
This is the single strongest value proposition for yearly plans. Monthly subscribers receive 6,000 or 30,000 per cycle; yearly subscribers get a massive lump sum they can use however they want, immediately. The sheer size of the number (100K / 1M) creates a visceral impact that monthly drip cannot match.
UI treatment: Display the credit amount prominently on the pricing card - large font, highlighted color. Suggested copy:
- Gold Yearly: "Get 100,000 Energy Instantly!"
- Diamond Yearly: "Get 1,000,000 Energy Instantly!"
3b. Web Credit Packs (UNCHANGED)
| Pack | Credits | Price | Unit Price ($/SE) |
|---|---|---|---|
| Taster | 250 | $1.99 | $0.0080 |
| Mini | 600 | $3.99 | $0.0067 |
| Starter | 2,000 | $9.99 | $0.0050 |
| Best Value | 4,000 | $14.99 | $0.0037 |
Credit packs remain unchanged. All packs still receive tier bonuses (Gold +10%, Diamond +15%).
3c. Mobile Subscriptions (iOS & Android - NEW)
| Plan | Price | Credits | Daily Reward | Unit Price ($/SE) |
|---|---|---|---|---|
| Gold Weekly | $7.99/wk | 1,500 | 80/day | $0.0053 |
| Gold Monthly | $19.99/mo | 6,000 | 80/day | $0.0033 |
| Gold Yearly | $89.99/yr | 100,000 (one-time, instant) | 80/day | $0.0009 |
- All plans include a 3-day free trial
- No credit packs on mobile
- No Diamond tier on mobile
- Default recommended plan: Gold Yearly
- Gold Yearly displays the "Most Popular" badge (same as web — social proof for annual commitment)
Instant Credits on Mobile Too: Gold Yearly subscribers on mobile receive 100,000 Energy instantly after the 3-day trial converts to paid. This headline number should be the primary call-to-action on the yearly card: "Get 100,000 Energy Instantly!"
3d. Unit Price Staircase (All Products)
| Product | Price | SE | Unit Price ($/SE) |
|---|---|---|---|
| Taster pack | $1.99 | 250 | $0.00796 |
| Mini pack | $3.99 | 600 | $0.00665 |
| Gold Weekly (mobile only) | $7.99 | 1,500 | $0.00533 |
| Starter pack | $9.99 | 2,000 | $0.00500 |
| Best Value pack | $14.99 | 4,000 | $0.00375 |
| Gold Monthly | $19.99 | 6,000 | $0.00333 |
| Diamond Monthly | $69.99 | 30,000 | $0.00233 |
| Gold Yearly | $89.99 | 100,000 | $0.00090 |
| Diamond Yearly | $299.99 | 1,000,000 | $0.00030 |
The staircase is clean and self-consistent: every higher-commitment product gives a lower unit price. The $7.99 weekly price ($0.0053/SE) falls neatly between the $9.99 pack ($0.0050) and the monthly subscription ($0.0033), naturally nudging users toward the subscription.
Note: The requirements doc says the lowest price is $0.0002/SE, but $299.99 / 1,000,000 = $0.00030. We should display the computed value via
bestPerCredit.toFixed(4)which yields"0.0003".
Scope note: Unit prices use headline credit grants only. Daily rewards, tier bonuses, and other perks are not included.
4. Current vs New Comparison
4a. Web Subscriptions
| Plan | Current Price | NEW Price | Current Credits | NEW Credits |
|---|---|---|---|---|
| Gold Monthly | $19.99/mo | $19.99/mo | 4,000/mo | 6,000/mo |
| Diamond Monthly | $69.99/mo | $69.99/mo | 24,000/mo | 30,000/mo |
| Gold Yearly | $167.92/yr | $89.99/yr | 4,000/mo (recurring) | 100,000 one-time |
| Diamond Yearly | $587.92/yr | $299.99/yr | 24,000/mo (recurring) | 1,000,000 one-time |
Key changes:
- Monthly credit grants increased (Gold +50%, Diamond +25%)
- Yearly prices drastically reduced (Gold: $167.92 -> $89.99 = 46% cheaper; Diamond: $587.92 -> $299.99 = 49% cheaper)
- Yearly credits changed from monthly recurring to one-time lump-sum
- Effective yearly cash discount: ~62% for Gold, ~64% for Diamond (computed vs monthly price x 12)
4b. Current Live System Baseline
| Area | Current Live State |
|---|---|
| Web Gold Monthly | $19.99, 4,000 SE/mo |
| Web Diamond Monthly | $69.99, 24,000 SE/mo |
| Web Gold Yearly | $167.92/yr ($13.99/mo), 4,000 SE/mo recurring |
| Web Diamond Yearly | $587.92/yr ($48.99/mo), 24,000 SE/mo recurring |
| Credit Packs | 250/$1.99, 600/$3.99, 2,000/$9.99, 4,000/$14.99 |
| Daily Card of the Day | Free: 50, Gold: 80, Diamond: 100 |
| Registration Bonus | 300 SE |
| Mobile Commerce | Not implemented (planning docs only) |
5. Platform Strategy
5.1 Web = "Full-Service Store"
Web retains all plan tiers (Free, Gold, Diamond), credit packs, and both monthly and yearly billing periods. It serves as the comprehensive storefront for all user types - from casual $1.99 pack buyers to $299.99 Diamond yearly subscribers. Web payments flow through Stripe (no Apple/Google tax), making it the highest-margin channel.
5.2 Mobile = "Premium Subscription Boutique"
Mobile (iOS & Android) strips down to three Gold subscription tiers only. No credit packs, no Diamond. This follows the industry trend of subscription-only mobile monetization (Netflix, ChatGPT, Hallow, Midjourney). Benefits:
- Simplified decision-making: Three clean options instead of a cluttered pack/plan mix
- Higher-quality user filtering: Subscribers have stronger engagement than one-time pack buyers
- Clean analytics: MRR, churn rate, and trial conversion are easy to track
- Lower IAP management overhead: No fragmented pack SKUs to maintain
5.3 Cross-Platform Revenue Split
Mobile subscriptions are subject to platform fees (Apple/Google take 30%, or 15% under the Small Business Program). Web subscriptions are subject only to Stripe's ~2.9% + $0.30.
| Plan | iOS Net (30% cut) | Web Net (~3% fee) |
|---|---|---|
| Gold Weekly $7.99 | ~$5.59 | N/A (mobile only) |
| Gold Monthly $19.99 | ~$13.99 | ~$19.11 |
| Gold Yearly $89.99 | ~$62.99 | ~$87.08 |
| Diamond Yearly $299.99 | N/A (web only) | ~$290.99 |
Strategic takeaway: Every "whale" user who pays through the web instead of the app contributes roughly $24 more per $89 yearly subscription. Steering heavy spenders toward the web is the highest-margin path - but this must happen organically (account login), never through in-app messaging (Apple compliance violation).
6. Cross-Platform Entitlement Rules
6.1 Core Principle
Subscriptions and credits are tied to the account, not the platform. A user's tier, credit balance, and all entitlements sync across web and mobile via the backend API.
6.2 Account Identity
Users must log in via Email, Google, or Apple ID. The backend database is the single source of truth for:
- Subscription tier (
FREE/GOLD/DIAMOND) - Credit balance
- Subscription provider (
stripe,apple,google) - Billing interval and renewal dates
6.3 Cross-Platform Scenarios
| User State | Web Behavior | Mobile Behavior |
|---|---|---|
| Free (never paid) | Shows all plans + credit packs | Shows Gold Weekly/Monthly/Yearly IAP |
| Gold via web/Stripe | Shows active Gold, manage via Stripe | Shows active Gold status (read-only). Upgrade/subscribe buttons show alert: "Manage your subscription at mysticx.ai" |
| Gold via iOS IAP | Shows active Gold status. Upgrade/downgrade/manage buttons show toast: "Subscription managed on iOS" with App Store instructions | iOS: Shows active Gold, manage via App Store. Android: Alert "Manage your subscription in the App Store on your iOS device" |
| Gold via Google Play | Shows active Gold status. Upgrade/downgrade/manage buttons show toast: "Subscription managed on Android" with Google Play instructions | Android: Shows active Gold, manage via Google Play. iOS: Alert "Manage your subscription in Google Play on your Android device" |
| Diamond via web/Stripe | Shows active Diamond, manage via Stripe | Shows active Diamond status (read-only, honored in full). Upgrade buttons show alert: "Manage your subscription at mysticx.ai" |
| Gold via mobile, visits web | Web honors Gold tier. Pricing page buttons show toast redirecting to App Store / Google Play | N/A |
Implementation status (2026-04-10): All cross-platform guards are implemented. The
subscriptionProviderfield ('stripe' | 'apple' | 'google' | null) on the User model is the single source of truth used by all platforms to determine where the subscription is managed.
6.4 Diamond on Mobile
Although mobile does not sell Diamond, the app must:
- Display the correct "Diamond Member" badge/label with premium visual treatment (purple/black theme)
- Apply Diamond-level daily credits (100/day), tier bonuses, and feature gates
- Show a read-only status like "Diamond Member - Active" with no upgrade prompt
- Never show Gold IAP purchase options to an active Diamond user
- Never downgrade Diamond to Gold in the UI
This "exclusive badge" effect is intentionally beneficial: other iOS users see only Gold available, creating curiosity and driving them to the website organically.
6.5 Credit Pool Sync
Credits are stored server-side and are the same balance regardless of platform. If a user has 1,000,000 credits from a Diamond Yearly web purchase, the mobile app shows 1,000,000. Spending 250 credits on mobile deducts from the same pool.
Concurrency note: With mobile added, a user could initiate a reading on web and mobile simultaneously, creating a race condition on credit deduction. The current system already uses Prisma transactions with
{ credits: { decrement: amount } }and acredits >= 0check for atomicity. This pattern remains correct with mobile — no additional locking is needed as long as all credit mutations go through the same transactional path. Verify during Phase 5 thataddCredits()/deductCredits()are the only credit mutation functions, and that no directuser.update({ credits })calls exist.
6.6 Subscription Management Isolation
All platforms detect the subscription's origin via subscriptionProvider and guard management actions accordingly:
Web app (MembershipPageContent.tsx — pricing page):
- If
subscriptionProvider === 'apple': All upgrade/downgrade/manage buttons show an info toast: "Subscription managed on iOS — Please manage your subscription in the App Store on your iOS device (Settings > Apple ID > Subscriptions)." - If
subscriptionProvider === 'google': Same pattern with Google Play instructions. - If
subscriptionProvider === 'stripe'ornull: Normal Stripe checkout / billing portal flow. - Guard covers:
handleUpgrade(),handleManageBilling(),handleResumeSubscription().
Web app (MembershipContent.tsx — /me/membership status page):
- Mobile subscribers see "Active — via Apple App Store" or "Active — via Google Play" instead of Stripe subscription details.
- An info box explains how to manage via the respective app store.
- The "Manage Plan" link still navigates to the pricing page, where the guard fires.
Mobile app (subscription.tsx — subscription screen):
- If
subscriptionProvider === 'stripe': Alert "Subscription managed on web — Please manage your subscription at mysticx.ai." - If on iOS and
subscriptionProvider === 'google': Alert "Subscription managed on Android — Manage in Google Play." - If on Android and
subscriptionProvider === 'apple': Alert "Subscription managed on iOS — Manage in the App Store." - All guards fire before any IAP purchase flow.
Data flow:
subscriptionProvideris stored on theUsermodel in Prisma.- Set by RevenueCat webhook (
'apple'/'google') and Stripe handlers ('stripe'). - Cleared to
nullon subscription cancellation/expiration/deletion. - Exposed via
GET /api/v1/credits(web credit store) andGET /api/v1/membership(mobile). - Web credit store (
useCreditStore) holdssubscriptionProviderfor client-side guards.
Implementation status (2026-04-10): Fully implemented across web and mobile. All 12 locales supported in guard messages.
7. Apple & Google Store Compliance
7.1 Apple App Store Guidelines (Critical)
Apple's guideline 3.1.1 requires all digital goods and subscriptions sold within iOS apps to use Apple In-App Purchase. MysticX credits are digital goods.
Must NOT do in the iOS app:
- Include any link, button, or text directing users to the website to subscribe or buy credits
- Tell users that a subscription is cheaper or available elsewhere
- Write "Diamond Plan ($299) is only available on our website"
- Show a "Manage on website" button that links to a page with pricing/purchase UI
- Do any price comparison between web and app
Must do:
- Use Apple IAP for all in-app subscription purchases
- Honor web-purchased entitlements silently (just show the tier badge, no purchase prompt)
- Show read-only informational labels for externally managed subscriptions: "Your Diamond subscription is active (managed outside the App Store)" - with no tappable link
The "Reader App" exemption (3.1.3a) does NOT apply to MysticX. That exemption is for apps whose primary function is consuming previously purchased content (e.g., Netflix, Kindle). MysticX is an interactive AI service that generates value on demand.
What "Manage on the web" can and cannot mean:
- Acceptable: Telling an existing paid user where to cancel or view billing history (account management)
- Not acceptable: Showing this to a Free user as a hint to subscribe on web (purchase steering)
7.2 Google Play Policies
Google Play Billing policy enforces the same requirement for Android apps. Google's external-link policies are slightly less restrictive than Apple's, but the safest approach for the first release is to use the same read-only label pattern as iOS. An Android-specific "Manage on website" link can be added later.
7.3 Preventing Double-Charge
If a user already has an active Gold subscription via Stripe (web), the mobile app must not show Gold IAP purchase buttons. The backend membership API is the authoritative source. The mobile app should:
- Query the membership API on launch/login
- If the user has an active subscription from any provider, hide purchase UI and show status
- Only show IAP purchase options to Free users
8. Industry References
8.1 How Top Apps Handle Cross-Platform
| App | Strategy | Mobile Behavior |
|---|---|---|
| Netflix / Spotify | Full-platform sync | No in-app purchase. Login and access content based on web subscription tier (e.g., 4K). |
| YouTube | Price discrimination + tier sync | iOS subscription is $3-5 more expensive than web. Web-purchased Premium shows as "Premium" in-app with full benefits. |
| Canva / Notion | Enterprise/Pro is web-exclusive | Mobile sells personal plans only. Enterprise users log in to the app and get full access to premium features. |
| Midjourney | Credit balance sync | All subscriptions purchased on web. Mobile (Discord) only consumes credits and shows remaining balance. |
| ChatGPT (OpenAI) | Full sync | iOS sells Plus membership at the same price. Web and app purchases are fully interchangeable. |
| Hallow | Minimal subscription | Pure subscription (yearly/monthly), no a la carte purchases. Keeps brand premium and clean. |
8.2 Relevance to MysticX
MysticX's approach most closely mirrors Canva/Midjourney:
- Web is the "full store" with all tiers and credit packs
- Mobile is the "premium experience" with subscription-only access
- Credits (Energy) function like a universal virtual currency synced across platforms
- As a spiritual/mystical product, subscription-only mobile avoids the "cheap game" feeling of multiple small IAP packs, following the Hallow model
8.3 Why Subscription-Only on Mobile Works
- 3-day free trial eliminates friction: "Free trial" feels zero-cost vs. spending $1.99 real money on a credit pack
- Builds recurring revenue: Stable MRR instead of unpredictable one-off purchases
- Filters for engaged users: Subscribers are core seekers; $1.99 pack buyers often churn immediately
- Clean App Store analytics: Subscription metrics (MRR, churn, trial conversion) are directly visible in App Store Connect
- Copy framing matters: Use "Join the Gold Circle" or "Unlock Universal Guidance" instead of "Buy Subscription"
Sections 9-14 (Technical Impact Analysis, File-by-File Change Plan, Architecture Challenges, Migration, Testing, Implementation Phases) and Appendix B have been moved to → Technical Implementation (in Developer Docs)
15. Open Questions
Critical (Must resolve before implementation)
Yearly credit reclamation— Resolved: No reclamation on any cancel type. Cancel at period end: user paid for the year, credits stay. Refund/chargeback: credits still not reclaimed — simplest approach, avoids negative-balance edge cases. NoSUBSCRIPTION_RECLAIMtransaction type needed.Free trial credits— Resolved: No credits during trial. Credits are granted only after the trial converts to a paid subscription (first payment). This prevents trial-churn credit farming.Yearly upgrade differential— Resolved: Upgrade differential rules confirmed:- Same interval, tier upgrade (Gold Monthly -> Diamond Monthly): Grant 24,000 SE differential (30,000 - 6,000).
- Same tier, interval change (Gold Monthly -> Gold Yearly): Cancel + new subscription. Fresh 100,000 SE lump sum, no differential.
- Cross-tier + cross-interval (Gold Monthly -> Diamond Yearly): Clean slate. Full 1,000,000 SE, no differential.
- Gold Yearly -> Diamond Yearly (mid-year): Grant 900,000 SE differential (1,000,000 - 100,000).
- Rationale: Interval changes are "cancel + new" because blending partial-period credits across intervals creates accounting complexity. Stripe handles the money proration; we handle the credit side cleanly.
Existing yearly subscribers— Resolved: (B) Auto-migrate existing yearly subscribers to new prices at next renewal via Stripe subscription update. Old price IDs ($167.92/$587.92) will be deprecated. See technical doc Section 12.2 for implementation details."75% off" for Diamond Yearly— Resolved: Show real computed discounts (Gold 62%, Diamond 64%) instead of inflated marketing copy.Mobile Diamond recognition— Resolved: Yes, mobile honors Diamond purchased on web. Full Diamond benefits (100/day, +15% bonus, Diamond badge) are applied on mobile even though mobile does not sell Diamond.
Nice to Have (Can decide later)
Push notification for daily credits - Mobile team scope. Text: "Your daily 80 energy is ready to align with the stars."
"Get 100,000 Energy Instantly!" copy - Show on pricing card, checkout page, or both?
Credit arrival animation - "Star explosion" effect on yearly purchase. Web and/or mobile?
"Founder's Pass" badge - Apply to Gold Yearly on mobile paywall only, or also web?
Membership upgrade notification - Email, in-app, or both?
Affiliate/referral impact— Resolved: (c) Only credit affiliates for web conversions (current behavior, no code change). Mobile IAP purchases through RevenueCat will not trigger Tapfiliate. This gap is accepted for now; will revisit if mobile becomes a significant acquisition channel.
Appendix A: Unchanged Areas
These areas remain unchanged in this restructure:
- Credit pack prices and amounts (Taster/Mini/Starter/Best Value)
- Daily credit amounts (Free: 50, Gold: 80, Diamond: 100) — tier-based only, same regardless of billing interval
- Registration bonus (300 SE)
- Tier bonuses on credit packs (Gold +10%, Diamond +15%)
- Credit costs (readings: 200, follow-ups: 50/100/200/400, etc.)
- Referral rewards
- Card skin / reader discounts (Gold 40%, Diamond 60%)