@php use App\Models\User; $initials = fn (?string $name) => strtoupper(collect(explode(' ', trim((string) $name))) ->filter()->map(fn ($p) => mb_substr($p, 0, 1))->take(2)->implode('')) ?: '?'; // Combined status pill from progress (same vocabulary as the list cards). [$statusLabel, $statusVariant, $statusIcon] = match (true) { $pct >= 100 => ['Over target', 'success', 'fa-light fa-trophy'], $pct >= 90 => ['Almost there', 'sky', null], $pct < 50 => ['Behind', 'amber', 'fa-light fa-gauge-simple-low'], default => ['On track', 'neutral', null], }; $captain = $group->captain; @endphp Groups {{-- Header --}}

{{ $group->name }}

/group/{{ $group->slug }} · {{ $memberCount }} {{ \Illuminate\Support\Str::plural('member', $memberCount) }} @if ($group->created_at) · created {{ $group->created_at->format('d M Y') }}@endif  {{ $statusLabel }}

Edit group View public page
{{-- Left column --}}
{{-- Combined progress --}} Combined progress
€{{ number_format($raised, 0) }} of €{{ number_format($goal, 0) }} group goal · {{ $donations }} {{ \Illuminate\Support\Str::plural('donation', $donations) }}
{{ $pct }}% {{ $memberCount }} €{{ number_format($avgPerMember, 0) }}
{{-- Member leaderboard --}} {{ $memberCount }} {{ \Illuminate\Support\Str::plural('member', $memberCount) }}
@forelse ($rows as $i => $row) @php $m = $row['model']; @endphp @empty @endforelse
#FundraiserRoleRaisedProgressStatusVoucher
{{ $i + 1 }}
{{ $m->full_name ?: $m->username }}
{{ '@'.$m->username }} · {{ $m->county ?: '—' }}
@if ($row['is_captain']) Captain @else Member @endif €{{ number_format($row['raised'], 0) }} {{ $row['status'][0] }} @if ($row['voucher_met']) Earned @else Below @endif {{-- The captain already has the invite link in their own portal. --}} @unless ($row['is_captain'])
@csrf Resend link
@endunless
No members yet
Add fundraisers via Edit group.
{{-- Right column --}}
{{-- Group details --}} Group details
@if ($captain) {{ $initials($captain->full_name ?: $captain->username) }} {{ $captain->full_name ?: $captain->username }} @else No captain set @endif {{ $memberCount }} €{{ number_format($goal, 0) }} €{{ number_format($raised, 0) }} · {{ $pct }}%{{ $pct }}% €{{ number_format($threshold, 0) }} internal minimumΣ members €{{ number_format($group->shareGoal(), 0) }}goal ÷ members {{ $group->created_at?->format('d M Y') ?: '—' }} /group/{{ $group->slug }}
{{-- Needs attention --}} @if ($needs->isNotEmpty()) Needs attention
@foreach ($needs as $row) @php $m = $row['model']; $pending = $row['status'][0] !== 'Active'; @endphp
{{ $m->full_name ?: $m->username }} {{ $pending ? $row['status'][0] : 'No donations yet' }}
@endforeach
@endif {{-- Captain & membership (editing lives in the form) --}} Captain & membership

A fundraiser can belong to one group only. Reassigning the captain or adding/removing a member updates their individual goal split and public group page.

Manage members & captain