{{-- Overview del Factory — tabla plana con todas las columnas operativas. SoT: FactoryController::buildOverviewData() (queries optimizadas, sin N+1). Es el punto de entrada por default — reemplaza al kanban/grid como primera vista. Las 7 vistas legacy (tiers/launch/focus/board/matrix/list/demos) siguen disponibles desde el toolbar arriba para casos especializados. --}} @php $rows = $overview['rows'] ?? []; $industries = $overview['industries'] ?? []; $stats = $overview['stats'] ?? []; $f = $overviewFilters ?? []; @endphp {{-- ────── Stats cards arriba ────── --}}
{{ $stats['active_count'] ?? 0 }}
Productos activos
{{ $stats['inactive_count'] ?? 0 }}
Inactivos (variantes shop, parked)
{{ $stats['with_stripe'] ?? 0 }}
Linked a Stripe
@if(($stats['without_stripe'] ?? 0) > 0)
{{ $stats['without_stripe'] }} sin Stripe
@endif
{{ $stats['tenants_live'] ?? 0 }}
Tenants vivos en total
{{-- ────── Filtros + búsqueda + nuevo ────── --}}

Catálogo de productos {{ count($rows) }} productos

Limpiar Nuevo
@forelse($rows as $r) {{-- Producto: thumb + nombre + slug --}} {{-- Categoría --}} {{-- Status --}} {{-- Demo --}} {{-- Módulos count (con tooltip de la lista) --}} {{-- Tenants vivos --}} {{-- Demand --}} {{-- Health % --}} {{-- Stripe linked --}} {{-- Precio + ciclo --}} {{-- Lanzamiento --}} {{-- Modificado: del activity_log --}} {{-- Acciones --}} @empty @endforelse
Producto Categoría Status Demo Mods Tenants Demand Health Stripe Precio Lanzado Modificado Acciones
@if($r['thumb'])
{{ $r['name'] }}
@else
{{ strtoupper(substr($r['name'], 0, 1)) }}
@endif
{{ $r['name'] }} {{ $r['slug'] }}
@if($r['category']) {{ $r['category'] }} @else @endif {{ $r['status_label'] }} @if($r['demo']) {{ \Illuminate\Support\Str::after($r['demo'], 'demo-') }} @else @endif @if($r['modules_count'] > 0) 🧩 {{ $r['modules_count'] }} @else @endif @if($r['tenants_live'] > 0) {{ $r['tenants_live'] }} @else @endif @if($r['demand_count'] > 0) 🔥 {{ $r['demand_count'] }} @else @endif @if(is_numeric($r['health_pct'])) @php $hp = (int) $r['health_pct']; $hc = $hp >= 80 ? 'success' : ($hp >= 50 ? 'warning' : 'danger'); @endphp {{ $hp }}% @else @endif @if($r['stripe_linked']) @else @endif ${{ number_format($r['price'], 0) }} /{{ $r['cycle'] }} @if($r['compare_price'] && $r['compare_price'] > $r['price'])
${{ number_format($r['compare_price'], 0) }}
@endif
@if($r['promoted_at']) {{ $r['promoted_at']->format('M Y') }} @else @endif @if($r['last_event_at']) {{ $r['last_event_at']->diffForHumans() }} @if($r['last_editor'])
por {{ $r['last_editor'] }}
@endif @else {{ $r['updated_at']?->diffForHumans() ?? '—' }}
sin auditar
@endif
Sin productos con esos filtros.
@if(($f['search'] ?? '') || ($f['status'] ?? '') !== 'active' || ($f['industry'] ?? '')) Limpiar filtros @endif