# Paywall and Subscription System
## Overview
Complete subscription and paywall system for monetizing features and managing user access based on subscription plans.
## Architecture
### 1. Subscription Types (`types/subscription.ts`)
**Subscription Plans**:
- `free` - Free tier with basic features
- `basic` - Basic paid plan
- `professional` - Professional plan (most popular)
- `enterprise` - Enterprise plan with all features
**Subscription Status**:
- `active` - Active subscription
- `canceled` - Canceled but still active until period end
- `past_due` - Payment failed, needs attention
- `trialing` - In trial period
- `expired` - Subscription expired
- `none` - No subscription
**Features**:
- Unlimited organizations
- Advanced analytics
- API access
- Custom domain
- SSO
- Priority/Dedicated support
- Team collaboration
- White label
**Limits**:
- Organizations count
- Users/team members
- Storage (MB)
- API calls per month
- Custom domains
### 2. Subscription Context (`SubscriptionContext`)
**Location**: `contexts/SubscriptionContext.tsx`
**Features**:
- Subscription state management
- Feature checking
- Limit checking
- Auto-refresh subscription data
- Defaults to free plan if no subscription
**Usage**:
```tsx
import { useSubscription } from '@/contexts/SubscriptionContext';
const {
subscription,
isLoading,
refreshSubscription,
hasFeature,
hasActiveSubscription,
canAccessFeature,
isWithinLimits,
getRemainingLimit,
} = useSubscription();
```
### 3. Paywall Components
#### `Paywall`
**Location**: `components/paywall/Paywall.tsx`
**Features**:
- Blocks access to premium features
- Shows upgrade dialog
- Displays plan comparison
- Customizable messaging
**Usage**:
```tsx
```
#### `FeatureGate`
**Location**: `components/paywall/FeatureGate.tsx`
**Features**:
- Conditionally renders based on subscription
- Can show paywall or fallback
- Lighter weight than Paywall
**Usage**:
```tsx
```
#### `LimitWarning`
**Location**: `components/paywall/LimitWarning.tsx`
**Features**:
- Warns when approaching limits
- Shows remaining quota
- Upgrade button
- Different alerts for warning vs. limit reached
**Usage**:
```tsx
```
### 4. Subscription Hooks
#### `useSubscription()`
**Location**: `hooks/useSubscription.ts`
**Features**:
- Enhanced subscription hook
- Convenience methods for plan checks
- Quick feature checks
**Usage**:
```tsx
import { useSubscription } from '@/hooks/useSubscription';
const {
isFreePlan,
isProfessionalPlan,
hasUnlimitedOrgs,
hasAdvancedAnalytics,
hasApiAccess,
canAccessFeature,
} = useSubscription();
```
## Integration with Permissions
The subscription system works alongside the permissions system:
- **Permissions** = What you CAN do (role-based)
- **Subscriptions** = What features you HAVE ACCESS TO (plan-based)
Example:
```tsx
// User has permission to update organizations (admin role)
// But subscription limits how many organizations they can have
```
## Usage Examples
### Example 1: Feature Paywall
```tsx
import { Paywall } from '@/components/paywall';
const AnalyticsPage = () => {
return (
);
};
```
### Example 2: Conditional Feature Rendering
```tsx
import { FeatureGate } from '@/components/paywall';
const OrganizationPage = () => {
return (