Add server product catalog so VPS and dedicated pages can take orders.
Deploy Ladill Servers / deploy (push) Successful in 25s

Seed Contabo-backed VPS and dedicated plans, open the order modal from dashboard links, and show clearer order CTAs when the catalog is empty.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-06 20:01:05 +00:00
co-authored by Cursor
parent 1217bdac41
commit 608e6947bf
5 changed files with 167 additions and 22 deletions
@@ -20,7 +20,11 @@
'server_password_confirmation',
];
$hasOrderFormErrors = collect($orderFormErrorFields)->contains(fn ($field) => $errors->has($field));
$shouldOpenOrderModal = (bool) session('open_product_order_modal', false) || $hasOrderFormErrors;
$shouldOpenOrderModal = (bool) session('open_product_order_modal', false)
|| $hasOrderFormErrors
|| request()->boolean('order');
$orderButtonLabel = $type === 'vps' ? 'Order VPS' : 'Order dedicated server';
$initialServerStep = old('product_id')
? (($errors->has('server_password') || $errors->has('server_password_confirmation')) ? 3 : 2)
@@ -91,7 +95,7 @@
<button type="button" @click="showOrderModal = true"
class="inline-flex items-center gap-1.5 rounded-lg bg-gray-900 px-3.5 py-2 text-sm font-medium text-white shadow-sm transition hover:bg-gray-800">
<svg class="h-4 w-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15"/></svg>
New Product
{{ $orderButtonLabel }}
</button>
@endif
</div>
@@ -209,9 +213,11 @@
<button type="button" @click="showOrderModal = true"
class="inline-flex items-center gap-1.5 rounded-lg bg-gray-900 px-4 py-2.5 text-sm font-medium text-white shadow-sm transition hover:bg-gray-800">
<svg class="h-4 w-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15"/></svg>
Get Started
{{ $orderButtonLabel }}
</button>
</div>
@else
<p class="mt-4 text-sm text-amber-700">Server plans are not available right now. Please contact support or try again later.</p>
@endif
</div>
@endif
+6 -6
View File
@@ -8,11 +8,11 @@
<p class="mt-0.5 text-sm text-slate-500">Your VPS and dedicated servers at a glance.</p>
</div>
<div class="flex flex-wrap gap-2">
<a href="{{ route('servers.vps') }}" class="inline-flex items-center justify-center rounded-lg bg-indigo-600 px-4 py-2 text-sm font-semibold text-white transition hover:bg-indigo-700">
New VPS
<a href="{{ route('servers.vps', ['order' => 1]) }}" class="inline-flex items-center justify-center rounded-lg bg-indigo-600 px-4 py-2 text-sm font-semibold text-white transition hover:bg-indigo-700">
Order VPS
</a>
<a href="{{ route('servers.dedicated') }}" class="inline-flex items-center justify-center rounded-lg border border-slate-200 bg-white px-4 py-2 text-sm font-semibold text-slate-700 transition hover:bg-slate-50">
New dedicated
<a href="{{ route('servers.dedicated', ['order' => 1]) }}" class="inline-flex items-center justify-center rounded-lg border border-slate-200 bg-white px-4 py-2 text-sm font-semibold text-slate-700 transition hover:bg-slate-50">
Order dedicated
</a>
</div>
</div>
@@ -40,8 +40,8 @@
<p class="text-sm font-semibold text-slate-700">No servers yet</p>
<p class="mx-auto mt-1 max-w-sm text-xs text-slate-400">Deploy a VPS or dedicated server configure region, image, and billing in minutes.</p>
<div class="mt-5 flex flex-wrap justify-center gap-2">
<a href="{{ route('servers.vps') }}" class="rounded-lg border border-slate-200 px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50">Browse VPS</a>
<a href="{{ route('servers.dedicated') }}" class="rounded-lg border border-slate-200 px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50">Browse dedicated</a>
<a href="{{ route('servers.vps', ['order' => 1]) }}" class="rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700">Order VPS</a>
<a href="{{ route('servers.dedicated', ['order' => 1]) }}" class="rounded-lg border border-slate-200 px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50">Order dedicated</a>
</div>
</div>
@else