@php $variant = $product->variants->first(); $media = ($product->media ?? collect())->sortBy('position')->values(); $thumbnail = $media->firstWhere('role', 'thumbnail') ?? $media->first(); $gallery = $media->where('role', '!=', 'thumbnail')->values(); if ($gallery->isEmpty() && $thumbnail) { $gallery = $media->values(); } $primaryImage = $thumbnail?->publicUrl() ?: ($thumbnail?->path ? asset('storage/'.$thumbnail->path) : asset('images/home/feature.jpg')); $collection = $product->collections->first(); $quotePrimary = $product->custom_branding && $product->quote_primary_cta; @endphp
{{-- Gallery --}} @php $galleryImages = collect([$thumbnail])->filter()->merge($gallery)->unique('id')->values() ->map(fn ($m, $i) => [ 'src' => $m->publicUrl() ?: ($m->path ? asset('storage/'.$m->path) : $primaryImage), 'alt' => $m->alt ?: $product->title.' — image '.($i + 1), ]); if ($galleryImages->isEmpty()) { $galleryImages = collect([['src' => $primaryImage, 'alt' => $product->title]]); } $imageCount = $galleryImages->count(); @endphp {{-- Buy box --}}

The Ring Authority

{{ $product->title }}

{{ $variant?->priceLabel() }}

@if($variant?->compare_at_cents) {{ $variant->currency }} {{ number_format($variant->compare_at_cents/100, 2) }} @endif

@if($variant && $variant->available && ($variant->inventory_qty ?? 0) > 0) In stock · ships after production @else Made to order @endif

@if($product->lead_days)

Lead time about {{ $product->lead_days }} days

@endif
@csrf @if($sizes->isNotEmpty())
Size {{ $variant?->option1 }}
@foreach($sizes as $size) @endforeach
@endif @if($colours->isNotEmpty())
Colour {{ $variant?->option2 }}
@foreach($colours as $colour) @endforeach
@endif @if($sizes->isEmpty() && $colours->isEmpty() && $product->variants->count() > 1) @endif
@if($quotePrimary) {{ $product->quoteCtaLabel() }} @else @endif
@csrf
@if($product->custom_branding) {{ $product->quoteCtaLabel() }} @else Request quote @endif
  • Production-ready specs
  • AU & export freight
  • Custom branding available
{{-- Product details --}} @php $specIcons = ['surface' => 'layers', 'use' => 'target', 'material' => 'swatch-book', 'weight' => 'weight', 'finish' => 'sparkles', 'fastening' => 'link']; $specRows = collect(is_array($product->material_specs) ? $product->material_specs : []) ->map(fn ($value, $key) => [ 'label' => is_string($key) ? Str::headline($key) : 'Spec', 'value' => is_array($value) ? implode(', ', array_map('strval', $value)) : (string) $value, 'icon' => $specIcons[is_string($key) ? Str::lower($key) : ''] ?? 'list-checks', ])->values(); if ($product->grade) { $specRows->prepend(['label' => 'Grade', 'value' => $product->grade, 'icon' => 'award']); } if ($product->product_type) { $specRows->push(['label' => 'Type', 'value' => $product->product_type, 'icon' => 'box']); } if ($product->vendor) { $specRows->push(['label' => 'Made by', 'value' => $product->vendor, 'icon' => 'badge-check']); } if ($product->lead_days) { $specRows->push(['label' => 'Lead time', 'value' => 'About '.$product->lead_days.' days', 'icon' => 'timer']); } $variantCount = $product->variants->count(); $highlights = collect([ $product->grade ? ['icon' => 'award', 'value' => $product->grade, 'label' => 'Grade'] : null, $product->lead_days ? ['icon' => 'timer', 'value' => $product->lead_days.' days', 'label' => 'Lead time'] : null, $sizes->isNotEmpty() ? ['icon' => 'ruler', 'value' => $sizes->count(), 'label' => Str::plural('Size', $sizes->count())] : null, $colours->isNotEmpty() ? ['icon' => 'palette', 'value' => $colours->count(), 'label' => Str::plural('Colour', $colours->count())] : null, $variantCount > 1 ? ['icon' => 'layers-3', 'value' => $variantCount, 'label' => 'Options'] : null, $product->custom_branding ? ['icon' => 'pen-tool', 'value' => 'Yes', 'label' => 'Custom branding'] : null, ])->filter()->take(4)->values(); $tabs = [ ['id' => 'specs', 'label' => 'Specifications', 'icon' => 'clipboard-list', 'meta' => $specRows->count().' details'], ['id' => 'description', 'label' => 'Description', 'icon' => 'file-text', 'meta' => $description['minutes'] ? $description['minutes'].' min read' : 'Overview'], ['id' => 'faqs', 'label' => 'FAQs', 'icon' => 'message-circle-question', 'meta' => count($faqs).' answers'], ['id' => 'shipping', 'label' => 'Shipping & returns', 'icon' => 'truck', 'meta' => 'AU & worldwide'], ]; @endphp

Product details

Built to spec. Explained in full.

@foreach($tabs as $i => $tab) @endforeach
{{-- Specifications --}}
@if($highlights->isNotEmpty())
@foreach($highlights as $highlight)
{{ $highlight['value'] }} {{ $highlight['label'] }}
@endforeach
@endif
Spec sheet @if($variant?->sku)SKU {{ Str::beforeLast($variant->sku, '-') ?: $variant->sku }}@endif
@if($specRows->isNotEmpty())
@foreach($specRows as $row)
{{ $row['label'] }}
{{ $row['value'] }}
@endforeach
@endif @if($sizes->isNotEmpty() || $colours->isNotEmpty())
@if($sizes->isNotEmpty())
Available sizes
@foreach($sizes as $size){{ $size }}@endforeach
@endif @if($colours->isNotEmpty())
Colourways
@foreach($colours as $colour){{ $colour }}@endforeach
@endif
@endif
{{-- Description --}} {{-- FAQs --}} {{-- Shipping & returns --}}
@if($related->isNotEmpty())

Complete the system

You may also like

View all
@foreach($related as $item) @endforeach
@endif @if($product->custom_branding)

Custom branding

{{ $product->quoteCtaLabel() }}

{{ $product->quote_intro ?: 'Share ring size, grade and artwork direction. We return pricing, lead time and a clear production path.' }}

  1. 1 Send size, grade and brand files
  2. 2 {{ $product->mockup_required ? 'Approve required mockup' : 'Review mockup / confirmation' }}
  3. 3 Approve production
  4. 4 We print, pack and ship
@if($product->lead_days) Typical branded lead time about {{ $product->lead_days }} days — confirmed before we start. @else Custom artwork typically adds lead time. Exact timing is confirmed before we start. @endif
@if($rfqForm) @else @endif
@endif @push('scripts') @endpush