@php $seoTitle = $profile->user->name . ' β€” ' . config('app.name'); $seoDesc = $profile->about_me ? Str::limit(strip_tags($profile->about_me), 155) : ($profile->city ? __(':name from :city on ND-Link.', ['name' => $profile->user->name, 'city' => $profile->city]) : null); @endphp

{{ $profile->user->name }}

@php $showLikeBanner = $likedMe && !$alreadyLiked && !$isMatch && !$isMatchPending && $viewer && $viewer->id !== $profile->user_id && !$viewer->is_pro; $showMatchPendingBar = $isMatchPending && $viewer && $viewer->id !== $profile->user_id && !$viewer->is_pro; $showOwnHiddenBar = $isOwnProfile && (! $profile->isComplete() || ! $profile->is_visible); @endphp
{{-- Prev/next navigation buttons --}} @if ($prev) {{-- Desktop: vertically centred --}} {{-- Mobile: above bottom bar --}} @endif @if ($next) {{-- Desktop: vertically centred --}} {{-- Mobile: above bottom bar --}} @endif
{{-- Profile card --}} @php $photos = $profile->user->photos; $mainPhoto = $photos->first(); @endphp
{{-- Left column: main photo + gallery --}}
{{-- Main photo: fills remaining height --}}
@if ($mainPhoto) {{ $profile->user->name }} @else
@endif
{{-- Gallery thumbnails: fixed at bottom of left column --}} @if ($photos->count() > 1) @endif
{{-- Right column: profile info, scrollable --}}
@php $profileType = $profile->profile_type ?? 'self'; $isParent = $profileType === 'parent'; $isPartner = $profileType === 'partner'; $labelGender = $isParent ? __("Gender of my child") : ($isPartner ? __("Gender of my partner") : __('Gender')); $labelAge = $isParent ? __("Age of my child") : ($isPartner ? __("Age of my partner") : __('Age')); $labelAbout = $isParent ? __("About my child") : ($isPartner ? __("About my partner") : __('About me')); $labelOccupation = $isParent ? __('Occupation / education of my child') : ($isPartner ? __('Occupation / education of my partner') : __('Occupation / education')); $labelInterests = $isParent ? __("My child's interests") : ($isPartner ? __("My partner's interests") : __("I'm interested in")); $labelDiagnoses = $isParent ? __("My child's diagnoses / traits") : ($isPartner ? __("My partner's diagnoses / traits") : __('My diagnoses / traits')); $labelStrengths = $isParent ? __("My child has strengths in") : ($isPartner ? __("My partner has strengths in") : __('I have strengths in')); $labelChallenges = $isParent ? __("My child experiences challenges related to") : ($isPartner ? __("My partner experiences challenges related to") : __('I experience challenges related to')); $typePill = match($profileType) { 'parent' => ['label' => __('Parent'), 'class' => 'pill-parent'], 'partner' => ['label' => __('Partner'), 'class' => 'pill-partner'], 'pro' => ['label' => 'PRO', 'class' => 'pill-pro'], default => null, }; @endphp

{{ $profile->user->name }} @if ($typePill) {{ $typePill['label'] }} @endif

#{{ $profile->user->id }}

@if ($profile->gender)
{{ $labelGender }}
{{ __($profile->gender) }}
@endif @if ($profile->age !== null)
{{ $labelAge }}
{{ $profile->age }} {{ __('years') }}
@endif
{{ __('Location') }}
@if ($profile->zip_code) {{ $profile->zip_code }} @endif @if ($profile->city) {{ $profile->city }} - @endif @if ($profile->country) {{ __(\App\Helpers\CountryHelper::name($profile->country)) }} @endif
@if ($profile->preferred_language) @php $langLabels = ['nl' => 'πŸ‡³πŸ‡± Nederlands', 'en' => 'πŸ‡¬πŸ‡§ English', 'fr' => 'πŸ‡«πŸ‡· FranΓ§ais', 'de' => 'πŸ‡©πŸ‡ͺ Deutsch', 'es' => 'πŸ‡ͺπŸ‡Έ EspaΓ±ol']; $langs = array_filter([ $profile->preferred_language, $profile->preferred_language_2, $profile->preferred_language_3, ]); @endphp
{{ __('Preferred language') }}
{{ implode(' Β· ', array_map(fn($l) => $langLabels[$l] ?? $l, $langs)) }}
@endif
{{-- About me --}} @if ($profile->about_me)

{{ $labelAbout }}

{!! str_contains($profile->about_me, '<') ? $profile->about_me : nl2br(e($profile->about_me)) !!}
@endif {{-- Occupation / Education --}} @if ($profile->occupation)

{{ $labelOccupation }}

{{ $profile->occupation }}

@endif
{{-- #nd-basic-info --}}
{{-- Video introduction @if ($profile->user->video) @include('profile.partials.video-player', [ 'video' => $profile->user->video, 'isOwnProfile' => $isOwnProfile, ]) @endif --}} @php $lookingForLabels = ['man' => __('Man'), 'woman' => __('Woman'), 'other' => __('Other')]; $purposeLabels = [ 'activities' => __('Doing activities together'), 'online_contact' => __('Online contact / pen pal'), 'friendship' => __('Friendship'), 'romance' => __('Romantic relationship'), 'professional' => __('Professional / networking'), 'nd_parents' => __('Meeting parents of neurodivergent children'), 'neurodiverse_partner' => __('Meeting partners in a neurodiverse relationship'), 'mentor' => __('Becoming a mentor'), 'find_mentor' => __('Finding a mentor'), ]; $diagnosisLabels = [ 'autism' => __('Autism'), 'adhd' => __('AD(H)D'), 'giftedness' => __('Giftedness'), 'intellectual_disability' => __('Intellectual disability'), 'dyslexia' => __('Dyslexia'), 'dyscalculia' => __('Dyscalculia'), 'dyspraxia' => __('Dyspraxia'), 'tourette' => __('Tourette syndrome'), 'ocd' => __('OCD'), 'sensory_processing' => __('Sensory processing'), 'synesthesia' => __('Synesthesia'), 'anxiety_disorder' => __('Anxiety disorder'), 'ptsd' => __('PTSD'), 'abi' => __('Acquired brain injury (ABI)'), ]; $strengthLabels = [ 'cognitive' => __('Cognitive skills'), 'creative' => __('Creative skills'), 'social' => __('Social skills'), 'self_management' => __('Organisation & self-management'), 'adaptability' => __('Adaptability & resilience'), 'tech' => __('IT & programming'), 'analytical' => __('Mathematics & analytical thinking'), 'science' => __('Science & research'), 'music' => __('Music'), 'technical' => __('Technical & craftsmanship'), 'nature' => __('Nature & animals'), 'writing' => __('Writing & storytelling'), 'languages' => __('Languages'), ]; $challengeLabels = [ 'attention_concentration' => __('Attention & concentration'), 'sensory_sensitivity' => __('Sensory sensitivity'), 'information_processing' => __('Processing information'), 'emotion_regulation' => __('Emotion regulation'), 'energy_pacing' => __('Energy & pacing'), 'social_attunement' => __('Reading social situations'), 'structure_predictability' => __('Need for structure or predictability'), ]; @endphp {{-- Structured interest tags β€” visible to everyone --}} @if (!empty($profile->interestTagLabels))

{{ $labelInterests }}

@foreach ($profile->interestTagLabels as $label) {{ $label }} @endforeach
@endif {{-- Free-form extra interests β€” visible to everyone --}} @if ($profile->interests)

{{ __('Extra interests') }}

{{ $profile->interests }}

@endif @if ($canSeeAll)
{{-- Looking for (gender + age range) --}} @if (!empty($profile->looking_for) || $profile->looking_for_age_min || $profile->looking_for_age_max)

{{ __("I'm looking for") }}

@foreach (($profile->looking_for ?? []) as $key) @if (isset($lookingForLabels[$key])) {{ $lookingForLabels[$key] }} @endif @endforeach @if ($profile->looking_for_age_min || $profile->looking_for_age_max) {{ $profile->looking_for_age_min ?? '?' }} – {{ $profile->looking_for_age_max ?? '?' }} {{ __('years') }} @endif
@endif {{-- Connection purpose --}} @if (!empty($profile->connection_purpose))

{{ __("I'm looking to connect for the purpose of") }}

@foreach ($profile->connection_purpose as $key) @if (isset($purposeLabels[$key])) {{ $purposeLabels[$key] }} @endif @endforeach
@endif {{-- Diagnoses --}} @if (!empty($profile->diagnoses))

{{ $labelDiagnoses }}

@foreach ($profile->diagnoses as $key) @if (isset($diagnosisLabels[$key])) {{ $diagnosisLabels[$key] }} @endif @endforeach
@endif {{-- Strengths --}} @if (!empty($profile->strengths))

{{ $labelStrengths }}

@foreach ($profile->strengths as $key) @if (isset($strengthLabels[$key])) {{ $strengthLabels[$key] }} @endif @endforeach
@endif {{-- Challenges --}} @if (!empty($profile->challenges))

{{ $labelChallenges }}

@foreach ($profile->challenges as $key) @if (isset($challengeLabels[$key])) {{ $challengeLabels[$key] }} @endif @endforeach
@endif {{-- Social energy --}} @if ($profile->social_energy !== null) @php $energy = $profile->social_energy; [$energyLabel, $energyDesc] = match(true) { $energy <= 2 => [__('Rarely'), __('Prefers little social contact β€” values space and quiet.')], $energy <= 4 => [__('Sometimes'), __('Enjoys contact now and then, but needs plenty of time alone.')], $energy <= 6 => [__('Regularly'), __('Likes a healthy mix of contact and personal time.')], $energy <= 8 => [__('Often'), __('Enjoys frequent contact and staying connected.')], default => [__('Daily'), __('Thrives on daily interaction and social connection.')], }; @endphp

{{ __('Social energy') }}

{{-- Scale bar: anchor labels + filled track --}}
{{ __('Rarely') }}
{{ __('Daily') }}

{{ $energyLabel }} ({{ $energy }}/10)

{{ $energyDesc }}

@endif {{-- Communication style --}} @if (!empty($profile->communication_style)) @php $commOptions = [ 'direct' => ['label' => __('Direct'), 'desc' => __('Straightforward, no beating around the bush')], 'careful' => ['label' => __('Careful'), 'desc' => __('Considerate, gentle, not too blunt')], 'elaborate' => ['label' => __('Elaborate'), 'desc' => __('In-depth, long messages, lots of detail')], 'brief' => ['label' => __('Brief'), 'desc' => __('Short messages, to the point')], 'frequent' => ['label' => __('Frequent'), 'desc' => __('Many messages throughout the day')], 'minimal' => ['label' => __('Minimal'), 'desc' => __('Few messages, only when needed')], ]; @endphp

{{ __('Communication style') }}

@foreach ($profile->communication_style as $key) @if (isset($commOptions[$key]))
{{ $commOptions[$key]['label'] }} {{ $commOptions[$key]['desc'] }}
@endif @endforeach
@endif {{-- MBTI personality type (owner opted in) --}} @if ($profile->mbti_type && $profile->user->mbti_visible)
@php $mbtiTypeChars = str_split($profile->mbti_type); $mbtiTypeCfg = config('mbti.types.' . $profile->mbti_type); $mbtDimCfg = config('mbti.dimensions'); @endphp
{{-- Section header --}}

{{ __('Personality type') }}

@if ($mbtiTypeCfg) @endif
{{-- Type letters + name --}}
@foreach ($mbtiTypeChars as $char) {{ $char }} @endforeach
@if ($mbtiTypeCfg)
{{ __($mbtiTypeCfg['name']) }}

{{ __($mbtiTypeCfg['description']) }}

@endif
{{-- Dimension score bars --}} @if ($profile->mbti_scores && $mbtDimCfg)
@foreach ($mbtDimCfg as $dimKey => $dimCfg) @php $pct = $profile->mbti_scores[$dimKey] ?? null; @endphp @if ($pct !== null)
{{ __($dimCfg['label_first']) }}
{{ __($dimCfg['label_second']) }}
@endif @endforeach
@endif {{-- Type info modal --}} @if ($mbtiTypeCfg)
{{-- Modal header --}}
@foreach ($mbtiTypeChars as $char) {{ $char }} @endforeach

{{ __($mbtiTypeCfg['name']) }}

{{ __($mbtiTypeCfg['group'] . ' Types') }}

{{ __($mbtiTypeCfg['description']) }}

@if (!empty($mbtiTypeCfg['detail']))

{{ __($mbtiTypeCfg['detail']) }}

@endif @if (!empty($mbtiTypeCfg['traits']))

{{ __('Traits') }}

@foreach ($mbtiTypeCfg['traits'] as $trait) {{ __($trait) }} @endforeach
@endif @if (!empty($mbtiTypeCfg['challenges']))

{{ __('Challenges') }}

@foreach ($mbtiTypeCfg['challenges'] as $challenge) {{ __($challenge) }} @endforeach
@endif @if (!empty($mbtiTypeCfg['feels_good_with']))

{{ __('Feels good with') }}

@foreach ($mbtiTypeCfg['feels_good_with'] as $item) {{ __($item) }} @endforeach
@endif
@endif
@endif {{-- Sensory profile (owner opted in) --}} @if (!empty($sensoryProfile['scores']))
@php $domainOrder = ['auditory','visual','tactile','olfactory','vestibular','proprioceptive','interoceptive']; $domainBgHex = [ 'auditory' => '#10b981', 'visual' => '#3b82f6', 'tactile' => '#f59e0b', 'olfactory' => '#f43f5e', 'vestibular' => '#7c3aed', 'proprioceptive' => '#f97316', 'interoceptive' => '#14b8a6', ]; $radarFullLabels = [ 'auditory' => __('Auditory'), 'visual' => __('Visual'), 'tactile' => __('Tactile'), 'olfactory' => __('Olfactory'), 'vestibular' => __('Vestibular'), 'proprioceptive' => __('Proprioceptive'), 'interoceptive' => __('Interoceptive'), ]; $domainIcons = [ 'auditory' => '', 'visual' => '', 'tactile' => '', 'olfactory' => '', 'vestibular' => '', 'proprioceptive' => '', 'interoceptive' => '', ]; // high=85 (outer ring), medium=42.5 (ring 2), low=21.25 (ring 1) $levR = ['high' => 85.0, 'medium' => 42.5, 'low' => 21.25]; $cx = 195; $cy = 143; $maxR = 85; $labelR = 132; $S = 16; $gap = 4; $N = count($domainOrder); $rSensPts = []; $rSeekPts = []; $rAxes = []; $rBadges = []; $rLabels = []; for ($i = 0; $i < $N; $i++) { $domain = $domainOrder[$i]; $angle = deg2rad(-90 + $i * 360 / $N); $cosA = cos($angle); $sinA = sin($angle); $ds = $sensoryProfile['scores'][$domain] ?? []; $sR = $levR[$ds['sensitivity']['level'] ?? ''] ?? 0; $skR = $levR[$ds['seeking']['level'] ?? ''] ?? 0; $rSensPts[] = round($cx + $sR * $cosA, 1) . ',' . round($cy + $sR * $sinA, 1); $rSeekPts[] = round($cx + $skR * $cosA, 1) . ',' . round($cy + $skR * $sinA, 1); $rAxes[] = ['x1' => $cx, 'y1' => $cy, 'x2' => round($cx + $maxR * $cosA, 1), 'y2' => round($cy + $maxR * $sinA, 1)]; // Badge + label positions (mirrors JS svgAxisLabels) $lxN = $cx + $labelR * $cosA; $lyN = $cy + $labelR * $sinA; $ta = $cosA > 0.2 ? 'start' : ($cosA < -0.2 ? 'end' : 'middle'); $db = $sinA > 0.2 ? 'hanging' : ($sinA < -0.2 ? 'auto' : 'middle'); $textCY = $db === 'middle' ? $lyN : ($db === 'auto' ? $lyN - 5.5 : $lyN + 5.5); $by = round($textCY - $S / 2, 1); if ($ta === 'start') { $bx = round($lxN, 1); $tx = round($lxN + $S + $gap, 1); $tTa = 'start'; } elseif ($ta === 'end') { $bx = round($lxN + $gap, 1); $tx = round($lxN, 1); $tTa = 'end'; } else { $bx = round($lxN + 30, 1); $tx = round($lxN, 1); $tTa = 'middle'; } $rBadges[] = ['bx' => $bx, 'by' => $by, 'color' => $domainBgHex[$domain], 'icon' => $domainIcons[$domain]]; $rLabels[] = ['tx' => $tx, 'ty' => round($lyN, 1), 'text' => $radarFullLabels[$domain], 'ta' => $tTa, 'db' => $db]; } @endphp
{{-- Section header --}}

{{ __('Sensory profile') }}

{{-- Info panel --}} {{-- Radar (always shown, matching sensory profile page) --}}
{{-- Footer notes --}} @if (!empty($sensoryProfile['context']['variability']) && $sensoryProfile['context']['variability'] === 'high')

{{ __('Sensory needs vary strongly depending on context') }}

@endif

{{ __('Not a diagnostic profile β€” shared for awareness.') }}

@endif {{-- Social media --}} @php // Each entry: [url, label, brand color, SVG path(s)] $socialPlatforms = [ 'facebook' => [$profile->social_facebook, 'Facebook', '#1877F2', ''], 'instagram' => [$profile->social_instagram, 'Instagram', '#E1306C', ''], 'pinterest' => [$profile->social_pinterest, 'Pinterest', '#E60023', ''], 'tiktok' => [$profile->social_tiktok, 'TikTok', '#010101', ''], 'tumblr' => [$profile->social_tumblr, 'Tumblr', '#35465C', ''], 'vimeo' => [$profile->social_vimeo, 'Vimeo', '#1AB7EA', ''], 'x' => [$profile->social_x, 'X', '#000000', ''], 'youtube' => [$profile->social_youtube, 'YouTube', '#FF0000', ''], ]; $socialLinks = array_filter($socialPlatforms, fn($p) => !empty($p[0])); @endphp @if (!empty($socialLinks))

{{ __('My social media') }}

@foreach ($socialLinks as [$url, $label, $color, $svgPaths]) @endforeach
@endif @endif {{-- PRO section β€” publicly visible whenever the profile owner has an active PRO profile --}} @php $proProfile = $profile->user->proProfile; $showPro = $profile->user->is_pro && $proProfile && $proProfile->is_visible; @endphp @if ($showPro)
{{-- PRO header with optional logo --}}
@if ($proProfile->logoUrl()) {{ __('Logo') }} @endif
πŸ… {{ __('PRO') }} @if ($proProfile->organization_name)

{{ $proProfile->organization_name }}

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

{{ collect([$proProfile->city, $proProfile->country])->filter()->implode(', ') }}

@endif
{{-- About me (professional) --}} @if ($proProfile->about_me)

{{ __('About me') }}

{!! str_contains($proProfile->about_me, '<') ? $proProfile->about_me : nl2br(e($proProfile->about_me)) !!}
@endif {{-- Education --}} @if ($proProfile->education)

{{ __('Education & training') }}

{{ $proProfile->education }}

@endif {{-- Support types --}} @if (!empty($proProfile->support_types))

{{ __('Types of support I offer') }}

@foreach ($proProfile->support_types as $key) @if ($label = \App\Models\ProProfile::supportTypeOptions()[$key] ?? null) {{ __($label) }} @endif @endforeach
@endif {{-- Support for --}} @if (!empty($proProfile->support_for))

{{ __('I support people with') }}

@foreach ($proProfile->support_for as $key) @if ($label = \App\Models\ProProfile::supportForOptions()[$key] ?? null) {{ __($label) }} @endif @endforeach
@endif {{-- Age groups --}} @if (!empty($proProfile->age_groups))

{{ __('Age groups I work with') }}

@foreach ($proProfile->age_groups as $key) @if ($label = \App\Models\ProProfile::ageGroupOptions()[$key] ?? null) {{ __($label) }} @endif @endforeach
@endif {{-- Contact & links --}} @php $proLinks = array_filter([ 'website' => $proProfile->website, 'linkedin' => $proProfile->social_linkedin, 'reddit' => $proProfile->social_reddit, 'email' => $proProfile->contact_email, 'mobile' => $proProfile->mobile, 'phone' => $proProfile->phone, ]); @endphp @if (!empty($proLinks))
@if ($proProfile->website) {{ preg_replace('#^https?://#', '', rtrim($proProfile->website, '/')) }} @endif @if ($proProfile->social_linkedin) {{ $proProfile->social_linkedin }} @endif @if ($proProfile->social_reddit) {{ $proProfile->social_reddit }} @endif @if ($proProfile->contact_email) {{ $proProfile->contact_email }} @endif @if ($proProfile->mobile) {{ $proProfile->mobile }} @endif @if ($proProfile->phone) {{ $proProfile->phone }} @endif
@endif
@endif @if (!$canSeeAll && !$isOwnProfile) {{-- Premium upgrade prompt for guests and free users --}}

πŸ’Ž {{ __('Upgrade to Premium to see the full profile') }}

{{ __('Premium members can see all profile details, make matches, send messages, and more.') }}

{{ __('See Premium plans') }} β†’
@endif
{{-- Lightbox --}}
@if ($likedMe && !$alreadyLiked && !$isMatch && !$isMatchPending && $viewer && $viewer->id !== $profile->user_id && !$viewer->is_pro) @push('above-bottom-bar')
{{ __(':name liked you. Do you want to like :name back so you can chat?', ['name' => $profile->user->name]) }}
@endpush @endif @if ($showMatchPendingBar) @push('above-bottom-bar')
@if (! $viewer->is_premium) ⏳ {{ __('You\'ve matched! Your free plan limit has been reached β€” upgrade to Premium to start chatting.') }} @else ⏳ {{ __(':name\'s free plan limit has been reached. They need to upgrade to Premium to chat.', ['name' => $profile->user->name]) }} @endif @if (! $viewer->is_premium) {{ __('Upgrade') }} @endif
@endpush @endif @if ($showOwnHiddenBar) @push('above-bottom-bar')
@if (! $profile->isComplete()) {{ __('Your profile is not yet complete. Finish it to become visible to other members.') }} @else {{ __('Your profile is currently hidden from other members.') }} @endif {{ __('Edit profile') }}
@endpush @endif @push('bottom-bar-buttons') {{-- Single w-full wrapper takes over the bottom bar's flex container. Mobile : flex-1 on each item β†’ equal width β†’ evenly spread. Desktop : hidden spacer after Back pushes action buttons to the right. --}}
{{-- Back button β€” always visible --}} {{ __('Back') }} @if ($viewer && $viewer->id !== $profile->user_id) {{-- Desktop-only spacer: pushes action buttons to the right --}} {{-- Hide β€” premium only --}} @if ($viewer->is_premium)
@csrf
@endif {{-- Follow button β€” all authenticated non-owners --}} {{-- Like / match button β€” regular users only (PRO users follow instead) --}} @if (! $viewer->is_pro) @if ($isMatch) @elseif ($isMatchPending) @elseif ($alreadyLiked) @elseif ($likedMe) @else @endif @endif {{-- /! $viewer->is_pro --}} {{-- Message β€” confirmed matches only --}} @if ($isMatch)
@csrf
@endif @endif
{{-- /w-full wrapper --}} @endpush @push('scripts') @endpush