Add app-specific mail branding and sidebar Support links.
Deploy Ladill Transfer / deploy (push) Successful in 33s

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-08 20:11:43 +00:00
co-authored by Cursor
parent 7be2e67dd4
commit 323fd1dd5c
9 changed files with 201 additions and 13 deletions
+123
View File
@@ -0,0 +1,123 @@
<?php
$platformHost = parse_url((string) env('APP_URL', 'https://ladill.com'), PHP_URL_HOST) ?: 'ladill.com';
return [
'account_url' => env(
'LADILL_ACCOUNT_URL',
'https://'.env('ACCOUNT_DOMAIN', 'account.'.$platformHost)
),
'brands' => [
'ladill' => [
'name' => 'Ladill',
'logo' => 'ladill-logo-white.png',
'logo_class' => 'email-logo',
'app_url' => env('APP_URL', 'https://ladill.com'),
'footer_account' => 'an account with Ladill',
'dashboard_path' => '/dashboard',
'support_path' => '/support',
'home_label' => 'ladill.com',
],
'hosting' => [
'name' => 'Ladill Hosting',
'logo' => 'ladillhosting-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_HOSTING_APP_URL', 'https://hosting.ladill.com'),
'footer_account' => 'a Ladill Hosting account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'hosting.ladill.com',
],
'domains' => [
'name' => 'Ladill Domains',
'logo' => 'ladilldomains-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_DOMAINS_APP_URL', 'https://domains.ladill.com'),
'footer_account' => 'a Ladill Domains account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'domains.ladill.com',
],
'bird' => [
'name' => 'Ladill Bird',
'logo' => 'ladillbird-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_BIRD_APP_URL', 'https://bird.ladill.com'),
'footer_account' => 'a Ladill Bird account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'bird.ladill.com',
],
'mail' => [
'name' => 'Ladill Mail',
'logo' => 'ladillmail-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_WEBMAIL_URL', 'https://mail.ladill.com'),
'footer_account' => 'a Ladill Mail account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'mail.ladill.com',
],
'email' => [
'name' => 'Ladill Email',
'logo' => 'ladillemail-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_EMAIL_APP_URL', 'https://email.ladill.com'),
'footer_account' => 'a Ladill Email account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'email.ladill.com',
],
'qrplus' => [
'name' => 'Ladill QR Plus',
'logo' => 'ladillqrplus-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_QR_APP_URL', 'https://qrplus.ladill.com'),
'footer_account' => 'a Ladill QR Plus account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'qrplus.ladill.com',
],
'events' => [
'name' => 'Ladill Events',
'logo' => 'ladillevents-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_EVENTS_APP_URL', 'https://events.ladill.com'),
'footer_account' => 'a Ladill Events account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'events.ladill.com',
],
'transfer' => [
'name' => 'Ladill Transfer',
'logo' => 'ladilltransfer-logo-email.png',
'logo_class' => 'email-logo email-logo-transfer',
'app_url' => env('LADILL_TRANSFER_APP_URL', 'https://transfer.ladill.com'),
'footer_account' => 'a Ladill Transfer account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'transfer.ladill.com',
],
'mini' => [
'name' => 'Ladill Mini',
'logo' => 'ladillmini-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_MINI_APP_URL', 'https://mini.ladill.com'),
'footer_account' => 'a Ladill Mini account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'mini.ladill.com',
],
'servers' => [
'name' => 'Ladill Servers',
'logo' => 'ladillservers-logo-email.png',
'logo_class' => 'email-logo',
'app_url' => env('LADILL_SERVERS_APP_URL', 'https://servers.ladill.com'),
'footer_account' => 'a Ladill Servers account',
'dashboard_path' => '/',
'support_path' => '/support',
'home_label' => 'servers.ladill.com',
],
],
];
@@ -1,5 +1,13 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'events'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'events'])
@endsection
@section('content')
<div class="highlight-box highlight-box-success">
<p class="highlight-box-text">📋 Programme Outline</p>
@@ -374,7 +374,7 @@
@hasSection('email-header')
@yield('email-header')
@else
<img src="{{ config('app.url') }}/images/logo/ladill-logo-white.png" alt="Ladill" class="email-logo">
@include('mail.partials.brand-header', ['brand' => 'ladill'])
@endif
</div>
@@ -389,17 +389,11 @@
{{-- Footer --}}
<div class="email-footer">
<p class="email-footer-text">
You're receiving this email because you have an account with Ladill.
</p>
<div class="email-footer-links">
<a href="{{ config('app.url') }}/dashboard">Dashboard</a>
<a href="{{ config('app.url') }}/support">Support</a>
<a href="{{ config('app.url') }}">ladill.com</a>
</div>
<p class="email-footer-text" style="margin-top: 20px; color: #64748b;">
&copy; 2026 Ladill Technologies. All rights reserved.
</p>
@hasSection('email-footer')
@yield('email-footer')
@else
@include('mail.partials.brand-footer', ['brand' => 'ladill'])
@endif
</div>
</div>
</td>
@@ -1,5 +1,13 @@
@extends('mail.notifications.layout')
@section('email-header')
@include('mail.partials.brand-header', ['brand' => 'transfer'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'transfer'])
@endsection
@section('content')
@php
$graceEnds = $transfer->grace_ends_at;
@@ -1,7 +1,11 @@
@extends('mail.notifications.layout')
@section('email-header')
<img src="{{ config('app.url') }}/images/logo/ladilltransfer-logo-email.png" alt="Ladill Transfer" class="email-logo email-logo-transfer">
@include('mail.partials.brand-header', ['brand' => 'transfer'])
@endsection
@section('email-footer')
@include('mail.partials.brand-footer', ['brand' => 'transfer'])
@endsection
@section('content')
@@ -0,0 +1,20 @@
@php
$brandKey = $brand ?? 'ladill';
$brandConfig = config("mail_brands.brands.{$brandKey}", config('mail_brands.brands.ladill'));
$appBase = rtrim((string) ($brandConfig['app_url'] ?? config('app.url')), '/');
$dashboardPath = $brandConfig['dashboard_path'] ?? '/';
$accountBase = rtrim((string) ($brandConfig['account_url'] ?? config('mail_brands.account_url', 'https://account.ladill.com')), '/');
$supportUrl = $brandConfig['support_url'] ?? $accountBase.'/support-tickets';
$homeLabel = $brandConfig['home_label'] ?? parse_url($appBase, PHP_URL_HOST) ?: 'ladill.com';
@endphp
<p class="email-footer-text">
You're receiving this email because you have {{ $brandConfig['footer_account'] ?? 'an account with Ladill' }}.
</p>
<div class="email-footer-links">
<a href="{{ $appBase }}{{ $dashboardPath }}">Dashboard</a>
<a href="{{ $supportUrl }}">Support</a>
<a href="{{ $appBase }}">{{ $homeLabel }}</a>
</div>
<p class="email-footer-text" style="margin-top: 20px; color: #64748b;">
&copy; {{ date('Y') }} Ladill Technologies. All rights reserved.
</p>
@@ -0,0 +1,7 @@
@php
$brandKey = $brand ?? 'ladill';
$brandConfig = config("mail_brands.brands.{$brandKey}", config('mail_brands.brands.ladill'));
$assetBase = rtrim((string) ($brandConfig['asset_url'] ?? config('app.url')), '/');
$logoClass = trim((string) ($brandConfig['logo_class'] ?? 'email-logo'));
@endphp
<img src="{{ $assetBase }}/images/logo/{{ $brandConfig['logo'] }}" alt="{{ $brandConfig['name'] }}" class="{{ $logoClass }}">
@@ -0,0 +1,23 @@
@php
$useInternal = $internal ?? false;
if ($useInternal) {
$supportUrl = route('user.support-tickets.index');
$openExternal = false;
} else {
$supportUrl = function_exists('ladill_account_url')
? ladill_account_url('/support-tickets')
: 'https://'.config('app.account_domain', 'account.ladill.com').'/support-tickets';
$openExternal = true;
}
@endphp
<a href="{{ $supportUrl }}"
@if($openExternal) target="_blank" rel="noopener" @endif
class="group flex items-center gap-3 rounded-lg px-3 py-2 text-[13px] text-slate-600 transition hover:bg-slate-50 hover:text-slate-900">
<svg class="h-[18px] w-[18px] shrink-0 text-slate-400 group-hover:text-slate-500" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M16.712 4.33a9.027 9.027 0 0 1 1.652 1.306c.51.51.944 1.064 1.306 1.652M16.712 4.33l-3.448 4.138m3.448-4.138a9.014 9.014 0 0 0-9.424 0M19.67 7.288l-4.138 3.448m4.138-3.448a9.014 9.014 0 0 1 0 9.424m-4.138-5.976a3.736 3.736 0 0 0-.88-1.388 3.737 3.737 0 0 0-1.388-.88m2.268 2.268a3.765 3.765 0 0 1 0 2.528m-2.268-4.796a3.765 3.765 0 0 0-2.528 0m4.796 4.796c-.181.506-.475.982-.88 1.388a3.736 3.736 0 0 1-1.388.88m2.268-2.268 4.138 3.448m0 0a9.027 9.027 0 0 1-1.306 1.652c-.51.51-1.064.944-1.652 1.306m0 0-3.448-4.138m3.448 4.138a9.014 9.014 0 0 1-9.424 0m5.976-4.138a3.765 3.765 0 0 1-2.528 0m0 0a3.736 3.736 0 0 1-1.388-.88 3.737 3.737 0 0 1-.88-1.388m2.268 2.268L7.288 19.67m0 0a9.024 9.024 0 0 1-1.652-1.306 9.027 9.027 0 0 1-1.306-1.652m0 0 4.138-3.448M4.33 16.712a9.014 9.014 0 0 1 0-9.424m4.138 5.976a3.765 3.765 0 0 1 0-2.528m0 0c.181-.506.475-.982.88-1.388a3.736 3.736 0 0 1 1.388-.88m-2.268 2.268L4.33 7.288m6.406 1.18L7.288 4.33m0 0a9.024 9.024 0 0 0-1.652 1.306A9.025 9.025 0 0 0 4.33 7.288"/>
</svg>
<span class="flex-1 truncate">Support</span>
@if($openExternal)
<span class="text-[10px] text-slate-400" aria-hidden="true"></span>
@endif
</a>
@@ -41,6 +41,7 @@
</nav>
<div class="shrink-0 border-t border-slate-100 px-3 py-3">
@include('partials.sidebar-support')
<a href="{{ route('account.settings') }}"
class="group flex items-center gap-3 rounded-lg px-3 py-2 text-[13px] transition {{ request()->routeIs('account.settings') ? 'bg-indigo-50 text-indigo-700 font-semibold' : 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' }}">
<svg class="h-[18px] w-[18px] shrink-0 {{ request()->routeIs('account.settings') ? 'text-indigo-600' : 'text-slate-400' }}" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">