From 92fddf0392166ba24e0c1f39e69f9f30b96de6fd Mon Sep 17 00:00:00 2001 From: isaacclad Date: Thu, 11 Jun 2026 07:05:41 +0000 Subject: [PATCH] Add public product landing page at / Serve a marketing landing page at the site root via ProductLandingController instead of redirecting straight to login, with config/product_landing.php and product views. Co-Authored-By: Claude Opus 4.8 --- .../Controllers/ProductLandingController.php | 31 ++++++ config/product_landing.php | 43 ++++++++ resources/views/product/landing.blade.php | 101 ++++++++++++++++++ routes/web.php | 5 +- 4 files changed, 177 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/ProductLandingController.php create mode 100644 config/product_landing.php create mode 100644 resources/views/product/landing.blade.php diff --git a/app/Http/Controllers/ProductLandingController.php b/app/Http/Controllers/ProductLandingController.php new file mode 100644 index 0000000..6ab88dc --- /dev/null +++ b/app/Http/Controllers/ProductLandingController.php @@ -0,0 +1,31 @@ +session()->has('mb.email')) { + return redirect()->route($dashboardRoute); + } + + return view('product.landing'); + } + + if (auth()->check()) { + return redirect()->route($dashboardRoute); + } + + return view('product.landing'); + } +} diff --git a/config/product_landing.php b/config/product_landing.php new file mode 100644 index 0000000..e2b5fe0 --- /dev/null +++ b/config/product_landing.php @@ -0,0 +1,43 @@ + 'transfer', + 'name' => 'Transfer', + 'logo' => 'images/logo/ladilltransfer-logo.svg', + 'icon' => 'transfer.svg', + 'tagline' => 'Send and receive files securely', + 'headline' => 'Large file sharing, simplified', + 'accent' => 'secure links and tracked downloads', + 'description' => 'Transfer lets you send large files with password-protected links, expiry dates, and download tracking — no email attachment limits.', + 'benefits' => + [ + 0 => + [ + 'title' => 'Big files, small hassle', + 'text' => 'Share files too large for email with a simple link.', + ,] + 1 => + [ + 'title' => 'Access controls', + 'text' => 'Set passwords, expiry, and download limits.', + ,] + 2 => + [ + 'title' => 'Delivery tracking', + 'text' => 'Know when your files are opened and downloaded.', + ,] + ,] + 'use_cases' => + [ + 0 => 'Client deliverables', + 1 => 'Media & design files', + 2 => 'Internal document sharing', + ,] + 'gradient_from' => '#0ea5e9', + 'gradient_to' => '#4f46e5', + 'dashboard_route' => 'transfer.dashboard', + 'platform_url' => 'https://localhost', + 'marketing_url' => 'https://localhost/products/transfer', + 'register_url' => 'https://auth.localhost/register', + 'landing_variant' => 'default', +]; diff --git a/resources/views/product/landing.blade.php b/resources/views/product/landing.blade.php new file mode 100644 index 0000000..37bc63f --- /dev/null +++ b/resources/views/product/landing.blade.php @@ -0,0 +1,101 @@ +@php + $landing = (array) config('product_landing'); + $logo = (string) ($landing['logo'] ?? ''); + $logoPath = $logo !== '' ? public_path($logo) : null; + $platformUrl = (string) ($landing['platform_url'] ?? 'https://ladill.com'); + $marketingUrl = (string) ($landing['marketing_url'] ?? $platformUrl); + $signInUrl = route('sso.connect', [ + 'redirect' => route($landing['dashboard_route'] ?? 'login'), + 'interactive' => 1, + ]); + $variant = (string) ($landing['landing_variant'] ?? 'default'); +@endphp + + + + + + {{ $landing['name'] ?? config('app.name') }} — Ladill + + @include('partials.favicon') + + + + @vite(['resources/css/app.css']) + + +
+ +
+
+ @if ($logo !== '') + {{ $landing['name'] ?? config('app.name') }} + @else + {{ $landing['name'] ?? config('app.name') }} + @endif + +
+
+ +
+
+
+

{{ $landing['tagline'] ?? '' }}

+

{{ $landing['headline'] ?? ($landing['name'] ?? '') }}

+

{{ $landing['description'] ?? '' }}

+ + + +

+ Learn more on ladill.com +

+
+ +
+

Why {{ $landing['name'] ?? 'Ladill' }}

+
+ @foreach (($landing['benefits'] ?? []) as $benefit) +
+

{{ $benefit['title'] }}

+

{{ $benefit['text'] }}

+
+ @endforeach +
+ + @if (! empty($landing['use_cases'])) +
+

Ideal for

+
+ @foreach ($landing['use_cases'] as $useCase) + {{ $useCase }} + @endforeach +
+
+ @endif +
+
+
+ +
+ Part of the Ladill platform — one account for every app. +
+ + diff --git a/routes/web.php b/routes/web.php index d755069..8959289 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ auth()->check() - ? redirect()->route('transfer.dashboard') - : redirect()->route('sso.connect'))->name('transfer.root'); +Route::get('/', [ProductLandingController::class, 'show'])->name('transfer.landing'); Route::get('/login', [SsoLoginController::class, 'connect'])->name('login'); Route::get('/sso/connect', [SsoLoginController::class, 'connect'])->name('sso.connect');