Blog
Feature
February 10, 20268 min

RevenueCat Subscriptions: 16 Edge Cases and Sleepless Nights

When I decided to monetize TAMSIV, I knew I needed a solid subscription system. Three tiers: Free, Pro, and Team. RevenueCat was the obvious choice — they handle the complexity of the stores for you. In theory, anyway.

Tier Architecture

The Free plan provides access to basic features with daily limits. Pro unlocks everything: AI image generation, Deepgram cloud STT, unlimited memos. Team adds the collaborative layer: hierarchical groups on 6 levels, assignments, checklists.

On the code side, a config/planLimits.ts file centralizes all feature gates. Each feature checks the active plan before executing.

The 16 Edge Cases of Plan Changes

A user can upgrade, downgrade, change period (monthly → annual), or combine both. Each combination has a different behavior. An upgrade takes effect immediately with prorata. A downgrade is deferred until the end of the period.

I counted 16 distinct cases. For each: activation time, eventual prorata, real-time feature gate updates, correct display. Three days of testing to cover everything.

VAT, Excl. VAT, and French Legal Obligations

In France, prices are displayed inclusive of VAT for consumers. Stores provide localized prices, but you must ensure that the display complies with legislation. Mention "Prix TTC" (Price incl. VAT), link to T&Cs, information on the right of withdrawal.

The PurchaseService

Everything goes through a PurchaseService singleton that initializes RevenueCat, listens for state changes, and exposes the active plan via a hook. The service manages purchase restoration and synchronization with Supabase. When a user upgrades, new features unlock instantly.