{!! favicon_html() !!} @vite(['resources/css/app.css', 'resources/js/app.js'])
@php // Highlighted headline fragment (rendered inside a coloured span). $headline = (string) ($cms['hero.headline'] ?? 'Nurturing Knowledge. Empowering Schools. Cultivating Futures.'); $highlight = (string) ($cms['hero.highlight'] ?? ''); $escapedHeadline = e($headline); if ($highlight !== '' && str_contains($headline, $highlight)) { $escapedHeadline = str_replace(e($highlight), ''.e($highlight).'', e($headline)); } // ----- Orbit layout ---------------------------------------------------- // Distribute orbit features across three concentric rings. $ringCapacity = [4, 8, 10]; $rings = []; $remaining = $orbitFeatures; $ringIndex = 0; foreach ($ringCapacity as $capacity) { $take = min($capacity, $remaining->count()); if ($take === 0) { continue; } $rings[] = [ 'n' => $ringIndex, 'count' => $take, 'items' => $remaining->take($take)->values(), ]; $remaining = $remaining->slice($take); $ringIndex++; if ($remaining->isEmpty()) { break; } } // Fall back to a single ring of the text-based CMS features when no // LandingFeature records exist (e.g. very early deployments). if ($rings === [] && isset($cms['features.list']) && count($cms['features.list']) > 0) { $slots = collect($cms['features.list'])->take(10)->map(fn ($f) => (object) [ 'title' => $f[0], 'description' => $f[1] ?? '', 'icon' => null, 'link' => null, ]); $rings = [[ 'n' => 0, 'count' => $slots->count(), 'items' => $slots, ]]; } $baseSpeed = max(30, (int) ($cms['hero.animation_speed'] ?? 70)); $ringDurations = [1.0, 1.35, 1.7]; $heroEnabled = ($cms['hero.enabled'] ?? '1') === '1'; $orbitEnabled = ($cms['hero.orbit_enabled'] ?? '1') === '1'; $animationEnabled = ($cms['hero.animation_enabled'] ?? '1') === '1'; $whatsappEnabled = ($cms['whatsapp.enabled'] ?? '0') === '1' && $whatsappUrl !== ''; $whatsappPosition = ($cms['whatsapp.position'] ?? 'bottom-right') === 'bottom-left' ? 'bottom-left' : 'bottom-right'; $whatsappShowLabel = ($cms['whatsapp.show_label'] ?? '1') === '1'; $statsEnabled = ($cms['stats.enabled'] ?? '0') === '1'; $statsItems = $cms['stats.items'] ?? []; $bannerEnabled = ($cms['banner.enabled'] ?? '0') === '1' && trim((string) ($cms['banner.text'] ?? '')) !== ''; $pricingEnabled = ($cms['pricing.enabled'] ?? '1') === '1'; $featureGridEnabled = ($cms['features.grid_enabled'] ?? '1') === '1'; $featuresSectionItems = $features->isNotEmpty() ? $features : collect($cms['features.list'] ?? []); // ----- Feature-section brand colours (admin-controlled, Pishon defaults) -- $featureDefaults = \App\Services\Platform\PlatformSettings::featureColorDefaults(); $featureVarMap = [ 'features.section_bg' => 'bg', 'features.heading_color' => 'heading', 'features.eyebrow_color' => 'eyebrow', 'features.subtitle_color' => 'subtitle', 'features.card_bg' => 'card-bg', 'features.card_title_color' => 'card-title', 'features.card_text_color' => 'card-text', 'features.icon_bg' => 'icon-bg', 'features.icon_color' => 'icon-color', 'features.border_color' => 'border', ]; $featureVars = []; foreach ($featureVarMap as $colorKey => $cssVar) { $featureVars['--fb-' . $cssVar] = \App\Services\Platform\PlatformSettings::hexColor( $cms[$colorKey] ?? null, $featureDefaults[$colorKey] ?? '#000000' ); } $featureStyle = implode('; ', array_map( fn ($name, $value) => $name . ': ' . $value, array_keys($featureVars), $featureVars )); $social = [ 'facebook' => (string) ($cms['social.facebook'] ?? ''), 'twitter' => (string) ($cms['social.twitter'] ?? ''), 'linkedin' => (string) ($cms['social.linkedin'] ?? ''), 'instagram' => (string) ($cms['social.instagram'] ?? ''), ]; $spotlightDefault = $orbitFeatures->firstWhere(fn ($f) => $f->is_highlighted) ?? $orbitFeatures->first(); @endphp {{-- Announcement banner --}} @if($bannerEnabled){{ $cms['hero.subtitle'] ?? ':appName gives each school its own subdomain, public website, dashboards, portals and CMS — all managed from a single cloud.' }}
Homeroom
Admissions & records
Academics
Teaching & assessment
Finance
Fees & payments
Communication
Messages & announcements
Features
{{ $cms['features.subtitle'] ?? 'Each tenant gets a complete, self-contained school system.' }}
{{ $desc }}
@if($isRecord && $featureLink !== '') @elseSolutions
Four dedicated portals, one shared source of truth.
{{ $text }}
Pricing
{{ $cms['pricing.subtitle'] ?? 'Start free, upgrade as your school grows.' }}
{{ $plan->description }}
@if($plan->billingType() === 'trial') Free @elseif($plan->billingType() === 'per_student') ₦{{ number_format((float) ($plan->per_student_price ?? 0), 0) }} @else ₦{{ number_format($plan->price, 0) }} @endif
@if($plan->billingType() === 'trial') for {{ $trialDays }} days @elseif($plan->billingType() === 'per_student') per student / month @else per school / {{ $plan->billing_period === 'yearly' ? 'year' : 'month' }} @endif
Our pricing plans are being prepared. Create your school to get started.
About
{{ $cms['about.body'] ?? (config('app.name').' is a modern multi-tenant school platform built for schools, teachers, students and parents. It brings the public website, management dashboard and all portals together in one secure place — so every member of the school community stays connected.') }}
Start your school on {{ config('app.name') }}
{{ $cms['cta.subtitle'] ?? 'Launch your school website, dashboards and portals on '.config('app.name').' in minutes — no setup fees, no tech team.' }}
Contact
Questions about the platform? We're here to help.
@if(trim((string) ($cms['contact.phone'] ?? '')) !== '' || trim((string) ($cms['contact.address'] ?? '')) !== '') @if(trim((string) ($cms['contact.phone'] ?? '')) !== '') @endif @if(trim((string) ($cms['contact.address'] ?? '')) !== ''){{ $cms['contact.address'] }}
@endif @endif