@php $publishedBandImages = $band->publishedImages(); $bandFirstImage = $band->firstImage(); $heroImages = $publishedBandImages->isNotEmpty() ? $publishedBandImages : collect(array_filter([$bandFirstImage])); $ogImage = $bandFirstImage ? $bandFirstImage->thumbnail(1200, 630) : asset('images/hero.png'); $cleanDesc = trim(strip_tags($band->description ?? '')); if (!empty($cleanDesc)) { preg_match('/^([^.!?]+[.!?]+(?:\s+[^.!?]+[.!?]+)?)/u', $cleanDesc, $sentenceMatches); $seoDescription = !empty($sentenceMatches[1]) && mb_strlen($sentenceMatches[1]) <= 160 ? $sentenceMatches[1] : \Illuminate\Support\Str::limit($cleanDesc, 155); } else { $gigCount = $band->events->count(); $photoCount = $band->publishedImages()->count(); $seoDescription = "Explore {$band->name}'s live performance history at Fibbers, York (1992–2022). Archive featuring {$gigCount} " . \Illuminate\Support\Str::plural('gig', $gigCount) . " and {$photoCount} " . \Illuminate\Support\Str::plural('photo', $photoCount) . "."; } $bandSchema = [ '@context' => 'https://schema.org', '@type' => 'MusicGroup', 'name' => $band->name, 'url' => route('bands.show', $band), 'description' => $seoDescription, ]; if ($bandFirstImage) { $bandSchema['image'] = $ogImage; } @endphp
@if ($heroImages->isEmpty())
@endif

{{ $band->name }}

@if ($band->featured || $band->supergroup)
@if ($band->featured) Featured Artist @endif @if ($band->supergroup) Supergroup @endif
@endif @if (!empty(trim($band->description ?? ''))) @php $cleanDesc = trim(strip_tags($band->description)); preg_match('/^([^.!?]+[.!?]+(?:\s+[^.!?]+[.!?]+)?)/u', $cleanDesc, $sentenceMatches); $excerpt = !empty($sentenceMatches[1]) && mb_strlen($sentenceMatches[1]) <= 220 ? $sentenceMatches[1] : \Illuminate\Support\Str::words($cleanDesc, 28, '...'); @endphp

{{ $excerpt }}

@endif
@guest Were you in this band? Click here. @else @if($band->isMember(auth()->user()))
You're in this band
@csrf @method('DELETE')
@elseif($band->isPendingMember(auth()->user()))
I was in this band (Pending Approval)
@csrf @method('DELETE')
@else
@csrf
@endif @endguest
@if (!empty(trim($band->description ?? '')))

The Bio

{!! nl2br(e($band->description)) !!}
@endif @php $visibleMembers = $band->visibleMembers(auth()->user()); $memberShapes = [ [ 'rot' => '-rotate-2', 'polygon' => '1,2 99,0 98,39 2,40', ], [ 'rot' => 'rotate-1 sm:rotate-2', 'polygon' => '2,0 99,3 97,40 2,37', ], ]; @endphp @if($visibleMembers->isNotEmpty())

Band Members

@foreach($visibleMembers as $index => $mem) @php $shape = $memberShapes[$index % count($memberShapes)]; @endphp @if($mem->pivot->approved) {{ $mem->first_name }} {{ $mem->last_name }} @else {{ $mem->first_name }} {{ $mem->last_name }} (Pending Approval) @endif @endforeach
@endif
@php $publishedVideos = $band->videos->where('publish', true); @endphp @if ($band->events->count() > 0) @php $rawEvents = $band->events->sortByDesc('event_date')->values(); $distinctYearsCount = $rawEvents->map(fn($e) => $e->event_date?->format('Y'))->filter()->unique()->count(); $shouldScroll = $rawEvents->count() >= 5 && $distinctYearsCount > 1; $attendedEventIds = auth()->check() ? auth()->user()->attendedEvents()->pluck('events.id')->flip()->all() : []; $eventsData = $rawEvents->map(function ($event) use ($band, $attendedEventIds) { $firstBand = $event->bands->first(); $isHeadliner = $firstBand && $firstBand->id === $band->id; // Other bands on the bill excluding this band $otherBands = $event->bands->reject(fn($b) => $b->id === $band->id)->values(); $otherBandNames = $otherBands->pluck('name')->all(); if ($isHeadliner) { $billTitle = $band->name; if (count($otherBandNames) > 0) { $supportText = 'Support from ' . implode(', ', array_map('e', $otherBandNames)); $subtitleHtml = ($event->name && strcasecmp($event->name, $band->name) !== 0) ? $supportText . ' • ' . e($event->name) : $supportText; } else { $subtitleHtml = ($event->name && strcasecmp($event->name, $band->name) !== 0) ? e($event->name) : null; } } else { $billTitle = $firstBand?->name ?? 'Headliner'; $remainingBands = $otherBands->reject(fn($b) => $b->id === $firstBand?->id)->pluck('name')->all(); $supportListHtml = '' . e($band->name) . ''; if (count($remainingBands) > 0) { $supportListHtml .= ', ' . implode(', ', array_map('e', $remainingBands)); } $subtitleHtml = 'Support from ' . $supportListHtml; if ($event->name && strcasecmp($event->name, $billTitle) !== 0) { $subtitleHtml .= ' • ' . e($event->name); } } return [ 'id' => $event->id, 'url' => route('gigs.show', $event), 'timestamp' => $event->event_date ? $event->event_date->timestamp : 0, 'year' => $event->event_date ? $event->event_date->format('Y') : 'Unknown', 'dayOfWeek' => $event->event_date ? $event->event_date->format('D') : '', 'day' => $event->event_date ? $event->event_date->format('d') : '', 'month' => $event->event_date ? $event->event_date->format('M') : '', 'venue' => $event->venue->name ?? 'Fibbers, York', 'isHeadliner' => $isHeadliner, 'role' => $isHeadliner ? 'headline' : 'support', 'billTitle' => $billTitle, 'subtitleHtml' => $subtitleHtml, 'userAttended' => isset($attendedEventIds[$event->id]), ]; })->values(); @endphp

Gig History

{{ $rawEvents->count() }}

No gigs found for {{ $band->name }}

@if($shouldScroll)
@endif
@endif @if(isset($relatedGalleryItems) && $relatedGalleryItems->isNotEmpty()) @php $hasMoreThan4 = $relatedGalleryItems->count() > 4; $cardWidthClass = $hasMoreThan4 ? 'w-[calc(82%-8px)] sm:w-[calc((100%-2*1.5rem)/2.4)] lg:w-[calc((100%-4*1.5rem)/4.35)]' : 'w-[calc(82%-8px)] sm:w-[calc((100%-1.5rem)/2)] lg:w-[calc((100%-3*1.5rem)/4)]'; @endphp

Posters & Memorabilia

{{ $relatedGalleryItems->count() }}
@if($hasMoreThan4) @endif View In Gallery
@php $rotations = ['-rotate-1', 'rotate-1', '-rotate-[1.5deg]', 'rotate-[1.5deg]']; @endphp @foreach($relatedGalleryItems as $index => $item) @php $rot = $rotations[$index % count($rotations)]; @endphp
{{ $item->altText($band->name, $index + 1) }}

{{ $item->caption ?: 'Untitled Artifact' }}

@endforeach
@if($hasMoreThan4) @endif
@endif @if(isset($moreBands) && $moreBands->isNotEmpty())
Fibbers Vault Archive

More Featured Bands

Explore more legendary artists and performers that graced the Fibbers stages.

View More Featured Bands
@include('partials.random-band-cards', ['randomBands' => $moreBands, 'startIndex' => 0])
@endif