@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')
{{-- ─── Identity ─── --}}
@if ($logoUrl)
@else{{ $initial ?: '?' }}@endif
{{-- 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))
@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') }}
@endif