- Homepage, course browser, and public pages
- Topic previews and mock set previews
- No premium-only answer bank sync
One entitlement model for Android and web.
The browser and app should read the same account record, not different stories. Free browse stays visible, and premium sync sits on the same entitlement fields the app already uses.
What stays open and what reads entitlement
The goal is clarity first: users should see which routes are public, mixed, or premium before they waste clicks.
Premium boundaries now match the app model
These gates stay visible on the web, but the actual unlock still comes from the shared Firestore entitlement record.
Browsing should stay visible
Home, category hubs, public support pages, and the visible topic/set launch tree should stay understandable before payment.
Membership belongs to the account record
The Android app and this web package both read the user document for premium status, plan type, and expiry.
Free browse, one-time pack, or premium sync
This keeps the public web package honest about what is included now and what belongs to the shared entitlement model later.
- Selected subject families and mock lanes
- Shared login on web + Android
- Membership expiry tied to the same account
- Full topic and mock sync across devices
- Shared entitlement restore and session claim
- Priority support and future feature access
Current implementation status
The web package now reads the same entitlement fields the Android membership resolver uses. Device-session claim and conflict handling are surfaced on the Account page, while this page acts as the user-facing rule summary for free browse, mixed preview, and premium sync.
