{{ __('Subscription Plans') }}

Choose Your Plan

@if (session('info')) @endif @if($plans->isEmpty())

There are currently no subscription plans available. Please check back later.

@else
@foreach ($plans as $plan)

{{ $plan->name }}

${{ number_format($plan->price, 2) }} / {{ $plan->interval_count > 1 ? $plan->interval_count : '' }} {{ Str::plural($plan->interval, $plan->interval_count) }}

{{ $plan->description }}

@if($plan->features && count($plan->features) > 0)
@php $groupedPlanFeatures = []; if (isset($moduleDefinitions) && is_array($moduleDefinitions) && $plan->features && is_array($plan->features)) { // Create a flat map of feature definitions for easier lookup $featureDefMap = []; foreach ($moduleDefinitions as $moduleSystemName => $moduleData) { if (isset($moduleData['features']) && is_array($moduleData['features'])) { foreach ($moduleData['features'] as $featureKeyFromDef => $featureDetail) { // Use the key as defined in module.json (which should match plan feature keys) $featureDefMap[$featureKeyFromDef] = [ 'moduleDisplayName' => $moduleData['displayName'], 'featureName' => $featureDetail['name'] ]; } } } foreach ($plan->features as $planFeatureItem) { $planFeatureKey = $planFeatureItem['key']; $featureLimit = $planFeatureItem['limit'] ?? null; if (isset($featureDefMap[$planFeatureKey])) { $moduleDisplayName = $featureDefMap[$planFeatureKey]['moduleDisplayName']; $featureName = $featureDefMap[$planFeatureKey]['featureName']; if (!isset($groupedPlanFeatures[$moduleDisplayName])) { $groupedPlanFeatures[$moduleDisplayName] = [ 'displayName' => $moduleDisplayName, 'features' => [] ]; } $groupedPlanFeatures[$moduleDisplayName]['features'][] = [ 'name' => $featureName, 'limit' => $featureLimit ]; } else { // Handle features whose definition might be missing if (!isset($groupedPlanFeatures['OrphanedFeatures'])) { $groupedPlanFeatures['OrphanedFeatures'] = ['displayName' => 'Additional Features', 'features' => []]; } $groupedPlanFeatures['OrphanedFeatures']['features'][] = [ 'name' => Str::title(str_replace(['_', '-'], ' ', $planFeatureKey)), // Best guess for name 'limit' => $featureLimit ]; } } } @endphp @foreach ($groupedPlanFeatures as $moduleGroupName => $moduleGroupData)
{{ $moduleGroupData['displayName'] }}
    @foreach ($moduleGroupData['features'] as $feature)
  • {{ $feature['name'] ?? 'Feature details missing' }} @if(isset($feature['limit'])) (Limit: {{ $feature['limit'] === 0 ? 'Unlimited' : $feature['limit'] }}) @endif
  • @endforeach
@endforeach
@endif {{-- TODO: Ensure you have a route named 'subscription.checkout' that accepts the plan --}} @if($currentSubscription && $currentSubscription->subscription_plan_id == $plan->id) @else {{ $currentSubscription ? 'Switch to this Plan' : 'Choose Plan' }} @endif {{-- Show trial period info only if the plan has one AND it's not the currently active plan --}} @if($plan->trial_period_days > 0 && !($currentSubscription && $currentSubscription->subscription_plan_id == $plan->id))

{{ $plan->trial_period_days }}-day free trial

@endif
@endforeach
@endif