DocHub
Apple IAP integration for courses, AI credits, and the subscription system with StoreKit 2 and server-side verification

iOS In-App Purchases & Subscriptions

HypnoELP monetizes through Apple In-App Purchases. Users buy individual courses, AI credit packs, or subscriptions. All purchases are consumable (can be bought multiple times) except subscriptions.

Product Catalog

Courses (Consumable)

Product ID Course Price
C99ENB Intro to Hypnosis Free
H01ENB Moderation or Abstinence $20
H02ENB Quit Smoking and Vaping $20
P01ENB Stop Doom Scrolling $20
S01ENB Healthy Food Relationship $20
S02ENB Restorative Sleep $20
E01ENB Shadow Work $20
X99ENB Custom Audio $20

Courses are consumable — users can repurchase the same course with a different voice (male/female).

AI Credits (Consumable)

Product ID Credits Price
ai_credits_2500 2,500 TBD
ai_credits_5000 5,000 TBD
ai_credits_10000 10,000 TBD

Credit Types

  • weekly_limit_credits — Free weekly allowance, resets automatically
  • bank_limit_credits — Purchased credits, persist until used

Key Files

iOS-side code changes are managed by Sean (not sent to Jaz). Our changes ride on top of Jaz’s codebase.

File Purpose
subscription_service.dart StoreKit 2 integration, purchase flow, receipt handling
subscription_plans_dialog.dart UI for displaying plans and triggering purchases
App Store Connect Product configuration, pricing, availability

Purchase Flow

  1. User selects course or credit pack in app
  2. subscription_service.dart initiates StoreKit 2 purchase
  3. Apple processes payment
  4. App receives transaction receipt
  5. Receipt verified server-side via Supabase edge function
  6. Course unlocked or credits added to user’s account
  7. Handshake sync confirms purchase state between app and server

Server-Side Verification

Purchase receipts are verified through Supabase edge functions (part of the main HypnoELP backend). The server validates the receipt with Apple, then updates the user’s entitlements in the database.

Key tables involved:

  • User purchase records
  • Credit balances (weekly_limit_credits, bank_limit_credits)
  • Course unlock status

iOS Code Ownership

All iOS-side code changes are managed by Sean’s team. Changes ride on top of Jaz’s Flutter codebase. Key modified files are tracked in hypnoelp-ios-changes.md.

App Store Configuration

  • Bundle ID: me.hypnoelp.app
  • Team: OmelasAI LLC (33JFY5GB65)
  • App Store Connect: Managed by Chas
  • Pricing: Set in App Store Connect, matches course prices above

Status

Working in production. Course purchases and AI credits functional. Subscription model details managed through App Store Connect.