@extends('admin.layouts.app') @section('title', __('admin.docker_apps.title')) @section('content')

{{ __('admin.docker_apps.intro') }}

{{-- Where this list comes from, said plainly: the panel decides what exists and what is switched on, this page decides what is sold. --}}
{{ __('admin.docker_apps.source_note') }}
{{-- Most apps have no usable image, so doing them one by one is not a realistic starting point; this takes every link the panel still has and reports what could not be fetched. --}}
@csrf
@csrf
@if($error)
{{ $error }}
@endif
@foreach($templates as $t) @php $hue = crc32($t['slug']) % 360; $initial = mb_strtoupper(mb_substr(trim($t['name']) ?: $t['slug'], 0, 1)); $url = $logos[$t['slug']] ?? null; @endphp
@if($url) @else {{-- What the customer sees today when there is no image. --}}
{{ $initial }}
@endif
{{ $t['name'] }} @if($t['is_featured'])★@endif @if(($rows[$t['slug']] ?? null) && ! $rows[$t['slug']]->is_sellable){{ __('admin.docker_apps.not_sold') }}@endif
{{ $t['slug'] }}
@csrf
@csrf
@if($url)
@csrf
@endif {{-- Commercial side: whether we offer this app at all, whether it leads the grid, and the one line it says on the card. --}} @php $row = $rows[$t['slug']] ?? null; @endphp
@csrf
@endforeach
@if(empty($templates) && ! $error)
{{ __('admin.docker_apps.none_match') }}
@endif @endsection