RevenueCat's entitlement identifier contains U+2024 (ONE DOT LEADER),
not a plain period — "Menul.io Pro" never matched the real
"Menul⁚io Pro" key, so isProActive() stayed false even after a real
purchase (confirmed via a genuine sandbox trial that RevenueCat
recorded as active while the app kept showing "Ücretsiz plan").
RevenueCat's API doesn't allow renaming an entitlement's lookup_key
after creation (405), so fixed on our side instead: this app only
ever grants one entitlement, so "any active entitlement" == Pro,
no identifier string needed.
- Purchases.configure() runs with appUserID = restaurantId at every
point the id becomes known (login resolve, cold-start rehydration,
onboarding restaurant creation) — this must match what the backend
webhook expects (see apps/api/src/routes/subscription.ts).
- New account/subscription.tsx paywall: current entitlement status,
offering packages with real store prices, purchase, restore.
- Linked from the account screen.
Native module — requires an EAS/dev-client build, not plain Expo Go.