@extends('web.signup.layout') @section('title', __('web.demo_attendance.title') . ' — ' . $startup->display_name) @section('page_title', $startup->display_name) @section('page_subtitle', '') @section('body_class', 'has-sticky-logo') @php // Tiny locale-aware label resolver. The label_options carry both // `name_ar` and `name_en`; pick the one that matches the page locale // and fall back to whichever is non-empty. $optLabel = function ($opt) { if (! $opt) return null; $ar = (string) ($opt->name_ar ?? ''); $en = (string) ($opt->name_en ?? ''); return app()->getLocale() === 'ar' ? ($ar !== '' ? $ar : ($en !== '' ? $en : null)) : ($en !== '' ? $en : ($ar !== '' ? $ar : null)); }; // Format numbers Saudi-style with thousand separators. Returns null // for empty/zero so the section can skip. The currency suffix is // pulled from the active locale so the EN render reads "12,500,000 SAR". $sar = function ($v) { if ($v === null || $v === '' || (float) $v <= 0) return null; return number_format((float) $v) . ' ' . __('web.demo_attendance.startup_detail.funding.currency'); }; $pct = function ($v) { if ($v === null || $v === '') return null; $f = (float) $v; if ($f <= 0) return null; return rtrim(rtrim(number_format($f, 2), '0'), '.') . '%'; }; $initial = mb_strtoupper(mb_substr(trim($startup->display_name ?? '?'), 0, 1)); $logoFile = $startup->files->firstWhere('slot', 'logo'); // File::url() returns a host-agnostic /storage/... path (public disk) or // the disk's configured URL — robust vs a hardcoded asset('storage/..'). $logoUrl = $logoFile ? $logoFile->url() : null; $pitch = $application->files->firstWhere('slot', 'pitch_deck'); // Demo attendance only ever exposes logo + pitch deck. The // previous `$otherFiles` collection (CV, signed docs, initial DD // attachments, etc.) is deliberately not derived anymore — the // file section below renders ONLY the pitch deck, gated solely on // `$pitch`. // Section visibility flags — used to decide whether to render an // empty wrapper or skip it entirely. Keeps the page short on a // half-completed startup record. $hasMarket = filled($startup->market_size_tam) || filled($startup->market_size_sam) || filled($startup->market_size_som); $hasFunding = $startup->asking_fund_sar || $startup->min_ticket_size_sar || $startup->offered_equity_pct || $startup->runway_months || $startup->total_raised_sar || $startup->previous_funding_amount_sar || $startup->valuation || $startup->cap_and_floor; $hasBusinessMeta = $startup->sector || $startup->traction || $startup->customerFocus || $startup->revenueModel || $startup->productStage || $startup->investmentStage || $startup->roundType || $startup->noteType || $startup->previouslyReceivedFunding; $hasGeo = $startup->geographicFocuses->isNotEmpty(); // `$hasContact` removed 2026-06-14 — per ops spec the demo // attendance page must not surface startup-level email or phone. // No render path currently references this derived flag; the // rendering it once gated was deleted earlier. Member-level // contacts in the team cards stay (those belong to individuals, // not the company). @endphp @push('styles') @endpush @section('content')
{{ __('web.demo_attendance.startup_detail.back') }}
@csrf
{{-- ─── Identity ─── --}}
{{-- 2026-06-17: locale-aware. display_name picks the locale primary; the OTHER locale's name surfaces as a subtitle only when different. --}} @php $secondaryName = app()->getLocale() === 'ar' ? $startup->name_en : $startup->name; @endphp

{{ $startup->display_name }}

@if ($secondaryName && $secondaryName !== $startup->display_name)

{{ $secondaryName }}

@endif @if ($startup->country || $startup->city)

📍 @if ($startup->city){{ $optLabel($startup->city) }}@endif @if ($startup->city && $startup->country) · @endif @if ($startup->country){{ $optLabel($startup->country) }}@endif

@endif
{{-- "About the company" runs BEFORE the funding strip so a reader's first scroll is context, not numbers — the funding asks make more sense after the value proposition lands. --}} @if (filled($startup->startup_brief))

{{ __('web.demo_attendance.startup_detail.sections.brief') }}

{{ $startup->startup_brief }}

@endif {{-- ─── Hero stats strip ─── --}} @if ($hasFunding)
@if ($asking = $sar($startup->asking_fund_sar))
{{ __('web.demo_attendance.startup_detail.funding.asking') }}
{{ $asking }}
@endif @if ($equity = $pct($startup->offered_equity_pct))
{{ __('web.demo_attendance.startup_detail.funding.offered_eq') }}
{{ $equity }}
@endif @if ($startup->runway_months)
{{ __('web.demo_attendance.startup_detail.funding.runway') }}
{{ __('web.demo_attendance.startup_detail.funding.months', ['count' => (int) $startup->runway_months]) }}
@endif @if ($valLabel = $optLabel($startup->investmentStage))
{{ __('web.demo_attendance.startup_detail.business_meta.investment_stage') }}
{{ $valLabel }}
@endif
@endif @if (filled($startup->problem))

{{ __('web.demo_attendance.startup_detail.sections.problem') }}

{{ $startup->problem }}

@endif @if (filled($startup->solution))

{{ __('web.demo_attendance.startup_detail.sections.solution') }}

{{ $startup->solution }}

@endif @if (filled($startup->investment_opportunity))

{{ __('web.demo_attendance.startup_detail.sections.opportunity') }}

{{ $startup->investment_opportunity }}

@endif @if (filled($startup->business_model))

{{ __('web.demo_attendance.startup_detail.sections.business_model') }}

{{ $startup->business_model }}

@endif @if (filled($startup->kpi_targets))

{{ __('web.demo_attendance.startup_detail.sections.kpi_targets') }}

{{ $startup->kpi_targets }}

@endif {{-- ─── Business meta — sector / traction / customer / revenue ─── --}} @if ($hasBusinessMeta)

{{ __('web.demo_attendance.startup_detail.sections.business_meta') }}

@php $pair = function ($label, $value) { return $value === null ? null : ['label' => $label, 'value' => $value]; }; @endphp @foreach (array_filter([ $pair(__('web.demo_attendance.startup_detail.business_meta.sector'), $optLabel($startup->sector)), $pair(__('web.demo_attendance.startup_detail.business_meta.product_stage'), $optLabel($startup->productStage)), $pair(__('web.demo_attendance.startup_detail.business_meta.investment_stage'), $optLabel($startup->investmentStage)), $pair(__('web.demo_attendance.startup_detail.business_meta.round_type'), $optLabel($startup->roundType)), // note_type row removed 2026-06-11 — the demo // attendance portal must not surface any notes- // or source-flavored row. Re-adding requires an // ops decision. $pair(__('web.demo_attendance.startup_detail.business_meta.traction'), $optLabel($startup->traction)), $pair(__('web.demo_attendance.startup_detail.business_meta.customer_focus'), $optLabel($startup->customerFocus)), $pair(__('web.demo_attendance.startup_detail.business_meta.revenue_model'), $optLabel($startup->revenueModel)), $pair(__('web.demo_attendance.startup_detail.business_meta.previous_funding'), $optLabel($startup->previouslyReceivedFunding)), ]) as $row) {{ $row['label'] }} {{ $row['value'] }} @endforeach
@endif {{-- ─── Geographic focuses ─── --}} @if ($hasGeo)

{{ __('web.demo_attendance.startup_detail.sections.geographic_focus') }}

@foreach ($startup->geographicFocuses as $loc) @if ($geoLabel = $optLabel($loc->option)) 📍 {{ $geoLabel }} @endif @endforeach
@endif {{-- ─── Market size ─── --}} @if ($hasMarket)

{{ __('web.demo_attendance.startup_detail.sections.market_size') }}

@if (filled($startup->market_size_tam))
{{ __('web.demo_attendance.startup_detail.market.tam') }}
{{ $startup->market_size_tam }}
@endif @if (filled($startup->market_size_sam))
{{ __('web.demo_attendance.startup_detail.market.sam') }}
{{ $startup->market_size_sam }}
@endif @if (filled($startup->market_size_som))
{{ __('web.demo_attendance.startup_detail.market.som') }}
{{ $startup->market_size_som }}
@endif
@endif {{-- ─── Funding details (full breakdown beyond the hero strip) ─── --}} @if ($hasFunding)

{{ __('web.demo_attendance.startup_detail.sections.funding') }}

@if ($v = $sar($startup->asking_fund_sar))
{{ __('web.demo_attendance.startup_detail.funding.asking') }}
{{ $v }}
@endif @if ($v = $sar($startup->min_ticket_size_sar))
{{ __('web.demo_attendance.startup_detail.funding.min_ticket') }}
{{ $v }}
@endif @if ($v = $pct($startup->offered_equity_pct))
{{ __('web.demo_attendance.startup_detail.funding.offered_eq') }}
{{ $v }}
@endif @if (filled($startup->valuation))
{{ __('web.demo_attendance.startup_detail.funding.valuation') }}
{{ $startup->valuation }}
@endif @if ($startup->runway_months)
{{ __('web.demo_attendance.startup_detail.funding.runway') }}
{{ __('web.demo_attendance.startup_detail.funding.months', ['count' => (int) $startup->runway_months]) }}
@endif @if ($v = $sar($startup->total_raised_sar))
{{ __('web.demo_attendance.startup_detail.funding.total_raised') }}
{{ $v }}
@endif @if ($v = $sar($startup->previous_funding_amount_sar))
{{ __('web.demo_attendance.startup_detail.funding.previous_funding') }}
{{ $v }}
@endif @if (filled($startup->cap_and_floor))
{{ __('web.demo_attendance.startup_detail.funding.cap_floor') }}
{{ $startup->cap_and_floor }}
@endif
@endif {{-- ─── Use of funds (breakdown) ─── --}} @php $fundUses = array_filter([ __('web.demo_attendance.startup_detail.fund_use.operations') => $sar($startup->fund_use_operation_sar ?? null), __('web.demo_attendance.startup_detail.fund_use.marketing') => $sar($startup->fund_use_marketing_sar ?? null), __('web.demo_attendance.startup_detail.fund_use.development') => $sar($startup->fund_use_development_sar ?? null), __('web.demo_attendance.startup_detail.fund_use.salaries') => $sar($startup->fund_use_salaries_sar ?? null), ]); @endphp @if (! empty($fundUses))

{{ __('web.demo_attendance.startup_detail.sections.fund_use') }}

@foreach ($fundUses as $label => $value)
{{ $label }}
{{ $value }}
@endforeach
@endif {{-- ─── Team — full data per member ─── --}} @if ($startup->members->isNotEmpty())

{{ __('web.demo_attendance.startup_detail.sections.team') }} ({{ $startup->members->count() }})

@foreach ($startup->members as $member) @php $mInit = mb_strtoupper(mb_substr(trim((string) $member->name), 0, 1)) ?: '?'; $jobName = $optLabel($member->jobType); $country = $optLabel($member->country); $positions = $member->positions ->map(fn ($p) => $optLabel($p->option)) ->filter() ->values(); $roleLine = trim(implode(' · ', array_filter([$jobName, $country]))); @endphp
{{-- ── Header: avatar + identity + badges ── --}}
{{ $mInit }}

{{ $member->name }}

@if ($jobName || $country)

@if ($jobName){{ $jobName }}@endif @if ($jobName && $country)@endif @if ($country){{ $country }}@endif

@endif @if ($member->is_founder || $positions->isNotEmpty())
@if ($member->is_founder) {{ __('web.demo_attendance.startup_detail.team.founder') }} @endif @foreach ($positions as $pos) {{ $pos }} @endforeach
@endif
{{-- ── Optional brief paragraph ── --}} @if (filled($member->short_brief))

{{ $member->short_brief }}

@endif {{-- ── Footer: phone left, socials right (or just socials) ── --}} @if (filled($member->phone_number) || filled($member->linkedin_url) || filled($member->twitter_url))
@if (filled($member->phone_number)) {{ $member->phone_number }} @else — @endif @if (filled($member->linkedin_url) || filled($member->twitter_url))
@if (filled($member->linkedin_url)) @endif @if (filled($member->twitter_url)) @endif
@endif
@endif
@endforeach
@endif {{-- ─── Pitch deck (ONLY) ─── --}} {{-- All other attachments (CV, financials, initial DD, etc.) are deliberately hidden on the demo attendance public page. The section renders strictly when a pitch deck is present. --}} @if ($pitch && ($pitch->isAvailable() || $pitch->monday_asset_id))

{{ __('web.demo_attendance.startup_detail.sections.pitch_deck') }}

{{-- Stream through the app (symlink-independent, disk-agnostic, scoped to this demo) — never a raw /storage link. --}} {{ $pitch->file_name }} {{ __('web.demo_attendance.startup_detail.pitch_deck_meta') }}
@endif
@include('web.demo-attendance.partials.sticky-bar', [ 'investor' => $investor, 'demo' => $demo, 'attendance' => $attendance, ]) @endsection