From a171276bc284d2165fb5d6f092d05d56835eb5ed Mon Sep 17 00:00:00 2001 From: isaacclad Date: Sat, 27 Jun 2026 16:16:25 +0000 Subject: [PATCH] Wire LadillLink through QrCode model and remaining QR surfaces. Public URLs, encoded payloads, slug preview, payment callbacks, and asset paths now use ladl.link instead of ladill.com/q/*. Co-authored-by: Cursor --- .env.example | 2 ++ app/Http/Controllers/Qr/QrCodeController.php | 2 +- app/Models/QrCode.php | 23 ++++++++--------- app/Support/DirectTransferFileUrl.php | 3 +-- app/Support/LadillLink.php | 26 ++++++++++++++++++++ config/link.php | 5 ++++ resources/views/qr-codes/create.blade.php | 4 +-- 7 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 app/Support/LadillLink.php create mode 100644 config/link.php diff --git a/.env.example b/.env.example index 95bfc03..4a3bb0c 100644 --- a/.env.example +++ b/.env.example @@ -58,4 +58,6 @@ AFIA_PROVIDER=openai AFIA_MODEL=gpt-4o-mini AFIA_API_KEY= +LINK_PUBLIC_DOMAIN=ladl.link + VITE_APP_NAME="${APP_NAME}" diff --git a/app/Http/Controllers/Qr/QrCodeController.php b/app/Http/Controllers/Qr/QrCodeController.php index 879af1b..ea377d6 100644 --- a/app/Http/Controllers/Qr/QrCodeController.php +++ b/app/Http/Controllers/Qr/QrCodeController.php @@ -313,7 +313,7 @@ class QrCodeController extends Controller } } - $png = $this->imageGenerator->renderPng(QrCode::publicBaseUrl() . '/q/' . $shortCode, $style); + $png = $this->imageGenerator->renderPng(\App\Support\LadillLink::url($shortCode), $style); if ($tempLogoPath) { Storage::disk('qr')->delete($tempLogoPath); diff --git a/app/Models/QrCode.php b/app/Models/QrCode.php index 14e628f..0b0b652 100644 --- a/app/Models/QrCode.php +++ b/app/Models/QrCode.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Support\LadillLink; use App\Support\Qr\QrStyleDefaults; use App\Support\Qr\QrTypeCatalog; use App\Support\Qr\QrWifiPayload; @@ -83,23 +84,19 @@ class QrCode extends Model public function publicUrl(): string { - return self::publicBaseUrl() . '/q/' . $this->short_code; + return LadillLink::url($this->short_code); + } + + public function publicPath(string $suffix = ''): string + { + return $suffix === '' + ? $this->publicUrl() + : LadillLink::path($this->short_code, $suffix); } - /** - * Base URL for public QR links. Always the short platform domain - * (ladill.com) — never the signed-in account/product host — so printed - * codes and shared links stay short and host-independent of where the QR - * was created. - */ public static function publicBaseUrl(): string { - $appUrl = (string) config('app.url'); - $scheme = parse_url($appUrl, PHP_URL_SCHEME) ?: 'https'; - $host = (string) config('app.platform_domain') - ?: (parse_url($appUrl, PHP_URL_HOST) ?: 'ladill.com'); - - return $scheme . '://' . $host; + return LadillLink::baseUrl(); } /** diff --git a/app/Support/DirectTransferFileUrl.php b/app/Support/DirectTransferFileUrl.php index 59d2140..0d4014f 100644 --- a/app/Support/DirectTransferFileUrl.php +++ b/app/Support/DirectTransferFileUrl.php @@ -2,7 +2,6 @@ namespace App\Support; -use App\Models\QrCode; use App\Models\Transfer; use App\Models\TransferFile; use RuntimeException; @@ -16,6 +15,6 @@ class DirectTransferFileUrl throw new RuntimeException('Transfer file URL is unavailable.'); } - return QrCode::publicBaseUrl().'/q/'.$shortCode.'/transfer/files/'.$file->id; + return LadillLink::path($shortCode, 'transfer/files/'.$file->id); } } diff --git a/app/Support/LadillLink.php b/app/Support/LadillLink.php new file mode 100644 index 0000000..3a51bc0 --- /dev/null +++ b/app/Support/LadillLink.php @@ -0,0 +1,26 @@ + env('LINK_PUBLIC_DOMAIN', 'ladl.link'), +]; diff --git a/resources/views/qr-codes/create.blade.php b/resources/views/qr-codes/create.blade.php index 7214105..6f648bf 100644 --- a/resources/views/qr-codes/create.blade.php +++ b/resources/views/qr-codes/create.blade.php @@ -106,7 +106,7 @@ status: '', timer: null, checkUrl: @js(route('events.check-slug')), - baseUrl: @js(\App\Models\QrCode::publicBaseUrl() . '/q'), + baseUrl: @js(\App\Support\LadillLink::baseUrl()), check() { clearTimeout(this.timer); const s = this.slug.trim(); @@ -126,7 +126,7 @@ :class="status === 'available' ? 'border-green-400' : status === 'taken' || status === 'invalid' ? 'border-red-400' : 'border-slate-200'"> - {{ \App\Models\QrCode::publicBaseUrl() }}/q/ + {{ \App\Support\LadillLink::baseUrl() }}/