Fix subdomain DNS messaging for Ladill nameservers and retire pending-setup primaries.
Deploy Ladill Hosting / deploy (push) Successful in 47s

Treat ns_auto domains as managed DNS, publish subdomain A records via PowerDNS without failing the UX when the local DNS registry is missing, and promote real linked domains over pending-setup.local placeholders.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-13 16:47:50 +00:00
co-authored by Cursor
parent 460edb8719
commit 136cf8b719
12 changed files with 686 additions and 45 deletions
+4 -4
View File
@@ -82,7 +82,7 @@
<nav class="flex items-center gap-1.5 text-sm text-slate-500">
<a href="{{ route('hosting.single-domain') }}" class="hover:text-slate-700 transition">Hosting</a>
<svg class="h-3.5 w-3.5 text-slate-400" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5m0 0v-15"/></svg>
<span class="font-medium text-slate-800">{{ $account->primary_domain ?: $account->username }}</span>
<span class="font-medium text-slate-800">{{ $accountLabel ?? ($account->primary_domain ?: $account->username) }}</span>
</nav>
{{-- Expired Account Banner --}}
@@ -150,7 +150,7 @@
<div>
<h2 class="text-xl font-bold tracking-tight text-slate-900">Hosting Account</h2>
<div class="mt-1 flex flex-wrap items-center gap-2.5">
<span class="text-sm text-slate-700">{{ $account->primary_domain ?: $account->username }}</span>
<span class="text-sm text-slate-700">{{ $accountLabel ?? ($account->primary_domain ?: $account->username) }}</span>
<span class="rounded-full px-2.5 py-0.5 text-[11px] font-semibold {{ $statusColors[$account->status ?? 'pending'] }}">
{{ $statusLabels[$account->status ?? 'Pending'] }}
</span>
@@ -442,7 +442,7 @@
@endif
· {{ $account->subdomainSitesCount() }}{{ $account->maxSubdomainsLimit() === -1 ? '' : ' of '.$account->maxSubdomainsLimit() }} subdomain {{ $account->subdomainSitesCount() === 1 ? 'slot' : 'slots' }} in use.
</p>
@elseif ($account->primary_domain)
@elseif ($account->primary_domain && ! \App\Services\Hosting\PlaceholderPrimaryDomainService::isPlaceholderDomain($account->primary_domain))
<div class="flex items-center justify-between">
<span class="text-sm font-medium text-slate-800">{{ $account->primary_domain }}</span>
<span class="rounded-full px-2 py-0.5 text-[11px] font-semibold bg-emerald-100 text-emerald-700">
@@ -524,7 +524,7 @@
<div class="flex items-center justify-between border-b border-slate-100 px-6 py-4">
<div>
<h3 class="text-base font-semibold text-slate-900">Renew Hosting Plan</h3>
<p class="mt-0.5 text-xs text-slate-500">{{ $account->primary_domain ?: $account->username }}</p>
<p class="mt-0.5 text-xs text-slate-500">{{ $accountLabel ?? ($account->primary_domain ?: $account->username) }}</p>
</div>
<button @click="renewModal = false" type="button" class="rounded-lg p-1 text-slate-400 hover:bg-slate-100 hover:text-slate-600 transition">
<svg class="h-5 w-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg>
+21 -5
View File
@@ -39,11 +39,27 @@
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
@if($site->ssl_enabled)
@if($site->ssl_enabled || $site->ssl_status === 'issued')
<span class="inline-flex items-center gap-1.5 rounded-full bg-emerald-100 px-2.5 py-1 text-xs font-medium text-emerald-800">
<svg class="h-3.5 w-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z"/></svg>
SSL Active
</span>
@elseif($site->ssl_status === 'provisioning')
<div>
<span class="inline-flex items-center gap-1.5 rounded-full bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-800">
Provisioning…
</span>
<p class="mt-1 text-xs text-slate-500">Waiting for DNS / Let's Encrypt</p>
</div>
@elseif($site->ssl_status === 'failed')
<div>
<span class="inline-flex items-center gap-1.5 rounded-full bg-red-100 px-2.5 py-1 text-xs font-medium text-red-800">
SSL Failed
</span>
@if($site->ssl_error)
<p class="mt-1 max-w-xs text-xs text-slate-500 truncate" title="{{ $site->ssl_error }}">{{ \Illuminate\Support\Str::limit($site->ssl_error, 80) }}</p>
@endif
</div>
@else
<span class="inline-flex items-center gap-1.5 rounded-full bg-slate-100 px-2.5 py-1 text-xs font-medium text-slate-600">
<svg class="h-3.5 w-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"/></svg>
@@ -52,16 +68,16 @@
@endif
</td>
<td class="px-6 py-4 whitespace-nowrap text-right">
@if(!$site->ssl_enabled)
@if($site->ssl_enabled || $site->ssl_status === 'issued')
<span class="text-xs text-slate-500">Auto-renews</span>
@else
<form action="{{ route('hosting.panel.ssl.request', [$account, $site]) }}" method="POST" class="inline">
@csrf
<button type="submit" class="btn-primary btn-primary-sm">
<svg class="h-3.5 w-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z"/></svg>
Issue SSL
{{ $site->ssl_status === 'failed' ? 'Retry SSL' : 'Issue SSL' }}
</button>
</form>
@else
<span class="text-xs text-slate-500">Auto-renews</span>
@endif
</td>
</tr>