{{ __('Admin') }} {{ __('Packages') }}
{{ __('Admin · Billing & plans · Packages') }}

{{ __('Subscription') }} {{ __('packages') }}

{{ __('Define every plan offered to workspaces — pricing, message caps, feature flags, and add-ons.') }}

@if (session('success'))
{{ session('success') }}
@endif @if (session('error'))
{{ session('error') }}
@endif
{{ __('Active packages') }}
{{ number_format($stats['active']) }}
{{ $stats['trial'] }} trial · {{ $stats['archived'] }} {{ __('archived') }}
{{ __('Workspaces subscribed') }}
{{ number_format($stats['subscribed']) }}
{{ __('across all plans') }}
{{ __('MRR (active subs)') }}
{!! \App\Support\FormatSettings::currency($stats['mrr']) !!}
{{ __('plan_amount × subscriptions') }}
{{ __('Total packages') }}
{{ number_format($packages->count()) }}
{{ __('in catalog') }}
{{-- Plan cards — generated from real Package rows. --}}
@forelse ($packages as $p) @php $count = (int) ($wsCounts[$p->id] ?? 0); $bullets = []; if ($p->monthly_messages_limit) { $bullets[] = number_format($p->monthly_messages_limit) . ' messages'; } if ($p->device_limit) { $bullets[] = $p->device_limit . ' devices · ' . ($p->user_seat_limit ?? '∞') . ' users'; } if ($p->autoreply) { $bullets[] = 'Auto-reply'; } if ($p->autoflow) { $bullets[] = 'Flow builder'; } if ($p->access_analytics) { $bullets[] = 'Analytics'; } if ($p->remove_branding) { $bullets[] = 'Custom branding'; } @endphp
@if ($p->is_highlighted) {{ __('Most popular') }} @endif
#{{ $p->id }} @if ($p->free) {{ __('Free') }} @elseif ($p->is_custom_quote) {{ __('Custom') }} @else {{ ucfirst($p->plan_unit ?? 'month') }} @endif

{{ $p->pname }}

@if ($p->is_custom_quote) {{ __('Custom') }} @elseif ($p->free) {{ __('Free') }} @if ($p->plan_duration > 0) / {{ $p->plan_duration }} {{ $p->plan_unit }} @endif @else {!! \App\Support\FormatSettings::formatIn((float) $p->plan_amount, $p->currency ?? 'USD') !!} / {{ $p->plan_unit ?? 'month' }} @endif
    @foreach (array_slice($bullets, 0, 4) as $b)
  • {{ $b }}
  • @endforeach @if (empty($bullets))
  • {{ __('No limits configured yet') }}
  • @endif
{{ $count }} workspace{{ $count === 1 ? '' : 's' }} Edit →
@empty
No packages defined yet. {{ __('Create the first one →') }}
@endforelse
{{-- Plan table — full detailed list. --}}
{{ __('All packages') }}

{{ __('Detailed list') }}

@forelse ($packages as $p) @php $count = (int) ($wsCounts[$p->id] ?? 0); $mrrRow = $p->free ? 0 : (float) $p->plan_amount * $count; $initials = mb_strtoupper(mb_substr($p->pname, 0, 2)); @endphp @empty @endforelse
# {{ __('Package') }} {{ __('Price') }} {{ __('Duration') }} {{ __('Subscribers') }} {{ __('MRR') }} {{ __('Status') }}
{{ $p->id }}
{{ $initials }}
{{ $p->pname }} @if ($p->is_highlighted) {{ __('popular') }} @endif @if ($p->is_default) {{ __('default') }} @endif
{{ $p->subtitle ?: 'no subtitle' }}
@if ($p->is_custom_quote) {{ __('Custom') }} @elseif ($p->free) {{ __('Free') }} @else {!! \App\Support\FormatSettings::formatIn((float) $p->plan_amount, $p->currency ?? 'USD') !!} @endif {{ $p->plan_duration }} {{ ucfirst($p->plan_unit ?? 'month') }} {{ $count }} {!! $mrrRow > 0 ? \App\Support\FormatSettings::formatIn($mrrRow, $p->currency ?? 'USD') : '—' !!}
@csrf
{{ __('No packages defined.') }}