feat: rename KOL Manager to Cathy's App across various files and update related placeholders

This commit is contained in:
I-Fun
2026-04-03 12:11:05 +07:00
parent a0b294fa1c
commit 15c8d3ae7c
14 changed files with 27 additions and 25 deletions

View File

@@ -23,7 +23,7 @@ class RateCardProfile extends Model
public static function getSingleton(): self public static function getSingleton(): self
{ {
return static::firstOrCreate([], [ return static::firstOrCreate([], [
'owner_name' => config('app.name', 'KOL Manager'), 'owner_name' => config('app.name', 'Cathy Page'),
'bg_color' => '#FFF8F0', 'bg_color' => '#FFF8F0',
'accent_color' => '#FFB7C5', 'accent_color' => '#FFB7C5',
'text_color' => '#374151', 'text_color' => '#374151',

View File

@@ -21,7 +21,7 @@ class EmailNotifier
Mail::raw($combined, function ($mail) use ($toEmail, $setting): void { Mail::raw($combined, function ($mail) use ($toEmail, $setting): void {
$mail->to($toEmail) $mail->to($toEmail)
->subject("🐱 KOL Manager — {$setting->name} Notifications"); ->subject("🐱 Cathy's App — {$setting->name} Notifications");
}); });
} }

View File

@@ -24,7 +24,7 @@ class WahaNotifier
{ {
$this->send( $this->send(
$setting, $setting,
"🐱 *KOL Manager — Test Notification*\n\nYour WhatsApp channel is configured correctly! 🎉" "🐱 *Cathy's App — Test Notification*\n\nYour WhatsApp channel is configured correctly! 🎉"
); );
} }

2
package-lock.json generated
View File

@@ -1,5 +1,5 @@
{ {
"name": "KOL-Manager", "name": "app",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {

View File

@@ -30,7 +30,7 @@
<div> <div>
<label class="block text-xs font-semibold text-gray-600 mb-1">Name <span class="text-pink-400">*</span></label> <label class="block text-xs font-semibold text-gray-600 mb-1">Name <span class="text-pink-400">*</span></label>
<input type="text" name="name" required maxlength="100" <input type="text" name="name" required maxlength="100"
placeholder="e.g. Energy Drinks" placeholder="e.g. Susu Formula"
class="input-soft" value="{{ old('name') }}"> class="input-soft" value="{{ old('name') }}">
</div> </div>
<div> <div>

View File

@@ -30,7 +30,7 @@
<div> <div>
<label class="block text-xs font-semibold text-gray-600 mb-1">Contract Title <span class="text-pink-400">*</span></label> <label class="block text-xs font-semibold text-gray-600 mb-1">Contract Title <span class="text-pink-400">*</span></label>
<input type="text" name="title" required maxlength="255" <input type="text" name="title" required maxlength="255"
placeholder="e.g. Exclusive – Energy Drinks 2025" placeholder="e.g. Exclusive – Susu Formula 2026"
class="input-soft" value="{{ old('title') }}"> class="input-soft" value="{{ old('title') }}">
</div> </div>
<div> <div>

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#FFB7C5"> <meta name="theme-color" content="#FFB7C5">
<title>KOL Manager — Login</title> <title>Cathy's App - Login</title>
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800&display=swap" rel="stylesheet">
@vite(['resources/css/app.css', 'resources/js/app.js']) @vite(['resources/css/app.css', 'resources/js/app.js'])
@@ -28,7 +28,7 @@
{{-- Logo / header --}} {{-- Logo / header --}}
<div class="text-center mb-8 select-none"> <div class="text-center mb-8 select-none">
<div class="text-7xl mb-3 inline-block animate-bounce" style="animation-duration:2s">🐱</div> <div class="text-7xl mb-3 inline-block animate-bounce" style="animation-duration:2s">🐱</div>
<h1 class="text-2xl font-extrabold text-pink-500 leading-tight">KOL Manager</h1> <h1 class="text-2xl font-extrabold text-pink-500 leading-tight">Cathy's App</h1>
<p class="text-sm text-gray-400 mt-1">Your Purr-fect Assistant</p> <p class="text-sm text-gray-400 mt-1">Your Purr-fect Assistant</p>
</div> </div>

View File

@@ -87,7 +87,7 @@
</td> </td>
@endif @endif
<td style="vertical-align:middle;"> <td style="vertical-align:middle;">
<div class="logo-name">{{ $invoiceSettings->header_name ?: 'KOL Manager' }}</div> <div class="logo-name">{{ $invoiceSettings->header_name ?: 'Cathy' }}</div>
<div class="logo-sub">{{ $invoiceSettings->header_title ?: 'Personal Talent Assistant' }}</div> <div class="logo-sub">{{ $invoiceSettings->header_title ?: 'Personal Talent Assistant' }}</div>
</td> </td>
</tr> </tr>

View File

@@ -26,7 +26,7 @@
<div> <div>
<div class="text-xl font-extrabold" <div class="text-xl font-extrabold"
style="color:{{ $invoiceSettings->accent_color ?? '#FFB7C5' }}"> style="color:{{ $invoiceSettings->accent_color ?? '#FFB7C5' }}">
{{ $invoiceSettings->header_name ?: '🐱 KOL Manager' }} {{ $invoiceSettings->header_name ?: '🐱 Cathy' }}
</div> </div>
<div class="text-sm text-gray-400 mt-0.5"> <div class="text-sm text-gray-400 mt-0.5">
{{ $invoiceSettings->header_title ?: 'Personal Talent Assistant' }} {{ $invoiceSettings->header_title ?: 'Personal Talent Assistant' }}

View File

@@ -45,7 +45,7 @@
class="flex items-center gap-3 group focus:outline-none"> class="flex items-center gap-3 group focus:outline-none">
<span class="text-3xl transition-transform duration-200 group-hover:scale-110 group-active:scale-95 select-none">🐱</span> <span class="text-3xl transition-transform duration-200 group-hover:scale-110 group-active:scale-95 select-none">🐱</span>
<div class="text-left"> <div class="text-left">
<div class="text-lg font-extrabold text-pink-500 leading-tight">KOL Manager</div> <div class="text-lg font-extrabold text-pink-500 leading-tight">Cathy's App</div>
<div class="text-xs text-gray-400">Your Purr-fect Assistant</div> <div class="text-xs text-gray-400">Your Purr-fect Assistant</div>
</div> </div>
</a> </a>
@@ -170,7 +170,7 @@
{{-- ── Global Search bar ─────────────────────────── --}} {{-- ── Global Search bar ─────────────────────────── --}}
<div class="flex-1 min-w-0" x-show="searchOpen" x-transition style="display:none"> <div class="flex-1 min-w-0" x-show="searchOpen" x-transition style="display:none">
<div class="relative"> <div class="relative">
<span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none">🔍</span> <span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none"></span>
<input <input
id="global-search-input" id="global-search-input"
type="text" type="text"
@@ -235,11 +235,13 @@
<span x-text="searchOpen ? '✕' : '🔍'" class="text-sm lg:text-base"></span> <span x-text="searchOpen ? '✕' : '🔍'" class="text-sm lg:text-base"></span>
</button> </button>
<!--
{{-- Avatar --}} {{-- Avatar --}}
<div class="w-8 h-8 lg:w-9 lg:h-9 rounded-full flex items-center justify-center text-white font-bold text-xs lg:text-sm shadow-sm" <div class="w-8 h-8 lg:w-9 lg:h-9 rounded-full flex items-center justify-center text-white font-bold text-xs lg:text-sm shadow-sm"
style="background: linear-gradient(135deg, #FFB7C5, #E8D5F5);"> style="background: linear-gradient(135deg, #FFB7C5, #E8D5F5);">
FUN FUN
</div> </div>
-->
</div> </div>
</header> </header>

View File

@@ -17,8 +17,8 @@
{{-- Search --}} {{-- Search --}}
<div class="relative flex-1 max-w-xs"> <div class="relative flex-1 max-w-xs">
<span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none">🔍</span> <span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none"></span>
<input type="text" x-model="searchQuery" placeholder="Search notes…" <input type="text" x-model="searchQuery" placeholder="🔍Search notes…"
class="input-soft pl-9 text-sm py-2 w-full"> class="input-soft pl-9 text-sm py-2 w-full">
</div> </div>

View File

@@ -52,19 +52,19 @@
<div> <div>
<label class="block text-xs font-semibold text-gray-600 mb-1">Instagram Handle</label> <label class="block text-xs font-semibold text-gray-600 mb-1">Instagram Handle</label>
<div class="relative"> <div class="relative">
<span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none">@</span> <span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none"></span>
<input type="text" name="ig_handle" <input type="text" name="ig_handle"
value="{{ old('ig_handle', $profile->ig_handle) }}" value="{{ old('ig_handle', $profile->ig_handle) }}"
class="input-soft pl-7" placeholder="yourhandle"> class="input-soft pl-7" placeholder="@yourhandle">
</div> </div>
</div> </div>
<div> <div>
<label class="block text-xs font-semibold text-gray-600 mb-1">TikTok Handle</label> <label class="block text-xs font-semibold text-gray-600 mb-1">TikTok Handle</label>
<div class="relative"> <div class="relative">
<span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none">@</span> <span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 text-sm pointer-events-none"></span>
<input type="text" name="tiktok_handle" <input type="text" name="tiktok_handle"
value="{{ old('tiktok_handle', $profile->tiktok_handle) }}" value="{{ old('tiktok_handle', $profile->tiktok_handle) }}"
class="input-soft pl-7" placeholder="yourhandle"> class="input-soft pl-7" placeholder="@yourhandle">
</div> </div>
</div> </div>
<div class="sm:col-span-2"> <div class="sm:col-span-2">

View File

@@ -61,10 +61,10 @@
<a href="{{ $profile->whatsappUrl }}" target="_blank" class="contact-pill">📱 WhatsApp</a> <a href="{{ $profile->whatsappUrl }}" target="_blank" class="contact-pill">📱 WhatsApp</a>
@endif @endif
@if($profile->ig_handle) @if($profile->ig_handle)
<a href="https://instagram.com/{{ ltrim($profile->ig_handle, '@') }}" target="_blank" class="contact-pill">📸 @{{ $profile->ig_handle }}</a> <a href="https://instagram.com/{{ ltrim($profile->ig_handle, '@') }}" target="_blank" class="contact-pill">📸 {{ '@' . ltrim($profile->ig_handle, '@') }}</a>
@endif @endif
@if($profile->tiktok_handle) @if($profile->tiktok_handle)
<a href="https://tiktok.com/@{{ ltrim($profile->tiktok_handle, '@') }}" target="_blank" class="contact-pill">🎵 @{{ $profile->tiktok_handle }}</a> <a href="https://tiktok.com/{{ ltrim($profile->tiktok_handle, '@') }}" target="_blank" class="contact-pill">🎵 {{ '@' . ltrim($profile->tiktok_handle, '@') }}</a>
@endif @endif
@if($profile->youtube_handle) @if($profile->youtube_handle)
<a href="https://youtube.com/{{ $profile->youtube_handle }}" target="_blank" class="contact-pill">▶️ {{ $profile->youtube_handle }}</a> <a href="https://youtube.com/{{ $profile->youtube_handle }}" target="_blank" class="contact-pill">▶️ {{ $profile->youtube_handle }}</a>
@@ -110,7 +110,7 @@
<div class="footer"> <div class="footer">
{{ $profile->custom_footer ?: 'Prices may vary. Contact for custom packages. 🐾' }} {{ $profile->custom_footer ?: 'Prices may vary. Contact for custom packages. 🐾' }}
<br>Generated by KOL Manager · {{ now()->format('Y') }} <br>Generated by Cathy's App · {{ now()->format('Y-M-D') }}
</div> </div>
</div> </div>
</body> </body>

View File

@@ -14,7 +14,7 @@ Artisan::command('notifications:dispatch', function () {
$dispatcher = app(NotificationDispatcher::class); $dispatcher = app(NotificationDispatcher::class);
$dispatcher->dispatchAll(); $dispatcher->dispatchAll();
$this->info('🔔 Notifications dispatched.'); $this->info('🔔 Notifications dispatched.');
})->purpose('Send all pending KOL Manager notifications'); })->purpose('Send all pending Cathy notifications');
// Run every hour automatically // Run every hour automatically
Schedule::command('notifications:dispatch')->hourly(); Schedule::command('notifications:dispatch')->hourly();