Subscriptions & Plans
Configure subscription tiers, manage user subscriptions, and customize feature limits for each plan.
CoinTrail includes a complete subscription management system with three default tiers. Access subscription settings at Admin Panel > Subscriptions > Subscription Plans.
The Subscription Plans list view showing Free, Premium, and Pro tiers with their status and pricing
Subscription Plans Overview
CoinTrail comes with three pre-configured subscription tiers designed to monetize your cryptocurrency tracking platform:
Free Tier
Basic access with limited features for new users to explore the platform.
Premium Tier
Enhanced features including portfolio tracking and ad-free experience.
Pro Tier
Full access with API integration, webhooks, and priority support.
Managing subscription plans with quick actions for editing and configuration
Plan Features Comparison
The following table shows the default feature limits and capabilities for each subscription tier:
| Feature | Free | Premium | Pro |
|---|---|---|---|
| Price Alerts | 5 | 50 | Unlimited |
| Watchlist Items | 20 | 100 | 500 |
| Portfolio Tracking | No | Yes | Yes |
| Number of Portfolios | 0 | 3 | 10 |
| Portfolio Holdings | 0 | Unlimited | 5,000 |
| API Access | No | No | Yes (10,000 calls/mo) |
| Webhooks | No | No | Yes (10 webhooks) |
| Ad-Free Experience | No | Yes | Yes |
| Data Export | No | Yes | Yes |
| Priority Support | No | No | Yes |
Configuring feature limits and toggles for each subscription tier
Creating a Subscription Plan
Follow these steps to create a new subscription plan or modify existing ones:
Modifying plan features affects existing subscribers. Consider creating a new plan instead of modifying active ones.
Step 1: Navigate to Subscription Plans
Go to Admin Panel > Subscriptions > Subscription Plans and click the "Create Plan" button.
Step 2: Basic Information
Fill in the plan details:
| Field | Type | Description |
|---|---|---|
name |
String | Display name (e.g., "Premium", "Pro", "Enterprise") |
slug |
String | URL-friendly identifier (e.g., "premium", "pro") |
description |
Text | Marketing description shown on pricing page |
badge_color |
Color | Hex color code for plan badges (e.g., #f59e0b) |
icon |
String | Icon identifier for the plan |
Step 3: Configure Pricing
Set the pricing for different billing cycles:
| Field | Description | Example |
|---|---|---|
price_monthly |
Monthly subscription price | 9.99 |
price_yearly |
Yearly subscription price (typically discounted) | 99.99 |
currency |
Currency code for pricing | USD, EUR, GBP |
trial_days |
Free trial period in days (0 = no trial) | 14 |
Setting up pricing options with monthly, yearly rates, and free trial configuration
Step 4: Set Feature Limits
Configure the limits for each feature. Use -1 for unlimited:
// Feature limit configuration
max_price_alerts: 50 // Maximum price alerts (-1 for unlimited)
max_watchlist_items: 100 // Maximum watchlist coins
max_portfolios: 3 // Number of portfolios (0 = disabled)
max_portfolio_holdings: -1 // Holdings per portfolio (-1 = unlimited)
api_calls_per_month: 0 // API quota (0 = no API access)
max_webhooks: 0 // Webhook configurations
Step 5: Enable Feature Toggles
Toggle features on or off for the plan:
| Toggle | Description |
|---|---|
has_portfolio |
Enable portfolio tracking feature |
has_api_access |
Enable API access for developers |
has_webhooks |
Enable webhook configurations |
ad_free |
Remove advertisements |
can_export |
Enable data export (CSV, PDF) |
priority_support |
Priority support queue access |
Managing User Subscriptions
Access user subscriptions at Admin Panel > Subscriptions > User Subscriptions.
Subscription Statuses
User subscriptions can have the following statuses:
| Status | Description | User Access |
|---|---|---|
| Active | Subscription is valid and paid | Full plan features |
| Trial | User is in free trial period | Full plan features |
| Grace Period | Payment failed, awaiting retry | Full plan features (limited time) |
| Cancelled | User cancelled subscription | Access until period ends |
| Expired | Subscription has ended | Reverted to Free tier |
User subscriptions management view with status filters and quick actions
Manual Subscription Assignment
Administrators can manually assign subscriptions to users for various reasons:
- Comp'd accounts for partners or influencers
- Resolving payment issues
- Customer service gestures
- Testing and development purposes
To manually assign a subscription:
- Navigate to Admin Panel > Users
- Find and select the user
- Click "Assign Subscription" from the actions menu
- Select the plan and set the expiration date
- Save changes - the user will receive a notification email
Manually assigning or editing a user subscription with plan and expiration settings
Subscription Lifecycle
Understanding how subscriptions flow through different states:
New User Registration
|
v
[FREE TIER] -----> [TRIAL] (if trial enabled)
| |
| Purchase | Trial ends / Purchase
v v
[ACTIVE] <----------[ACTIVE]
|
| Payment fails
v
[GRACE PERIOD] (3-7 days)
|
| Payment fixed User cancels
v v
[ACTIVE] <------------ [CANCELLED]
|
| Period ends
v
[EXPIRED] --> [FREE TIER]
Automatic Actions
- Payment Success: Subscription activated, confirmation email sent
- Payment Failed: Grace period starts (default: 3 days), notification sent
- Subscription Expires: User reverted to Free tier, expiration email sent
- User Cancels: Access continues until period end, cancellation confirmed
- Upgrade: Immediate access to new tier, prorated charge
- Downgrade: Takes effect at next billing cycle
SubscriptionService API
Use the SubscriptionService class to programmatically check user subscription status:
use App\Services\SubscriptionService;
class PriceAlertController extends Controller
{
public function __construct(
protected SubscriptionService $subscriptions
) {}
public function store(Request $request)
{
$user = auth()->user();
$currentCount = $user->priceAlerts()->count();
// Check if user can create more alerts
if (!$this->subscriptions->isWithinLimit($user, 'price_alerts', $currentCount)) {
return back()->with('error', 'You have reached your price alert limit. Upgrade to add more.');
}
// Create the alert...
}
}
Blade Directives
Use custom Blade directives for feature gating in views:
{{-- Check subscription tier --}}
@subscription('premium')
<!-- Only visible to Premium and Pro users -->
<div class="portfolio-widget">...</div>
@endsubscription
{{-- Check specific feature --}}
@feature('portfolio')
<a href="/portfolio">My Portfolio</a>
@else
<a href="/pricing" class="upgrade-prompt">
Upgrade to unlock Portfolio
</a>
@endfeature
{{-- Show ads only for free users --}}
@unless(auth()->user()->hasActiveSubscription())
<div class="advertisement">...</div>
@endunless
Payment Gateway Configuration | Portfolio Feature (Premium+) | Price Alerts Feature