Add a real hosting overview dashboard.
Deploy Ladill Hosting / deploy (push) Successful in 22s

Replace the smart redirect on /dashboard with an overview hub (stats,
recent accounts, pending orders) matching Domains and Email, and move
the full account list to /hosting/accounts.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-06 17:21:27 +00:00
co-authored by Cursor
parent 62d33e2a75
commit c4bd4efbed
5 changed files with 220 additions and 81 deletions
@@ -25,71 +25,6 @@ use Illuminate\View\View;
class HostingProductController extends Controller
{
/**
* Smart hosting redirect - routes user based on their hosting accounts
*/
public function index(Request $request): View|RedirectResponse
{
$user = $request->user();
// Get all shared hosting types (not VPS/dedicated)
$sharedTypes = [
HostingProduct::TYPE_SINGLE_DOMAIN,
HostingProduct::TYPE_MULTI_DOMAIN,
HostingProduct::TYPE_WORDPRESS,
];
// Get user's hosting accounts (owned + team member access)
$sharedAccountIds = HostingAccountMember::query()
->where('user_id', $user->id)
->pluck('hosting_account_id');
$hostingAccounts = HostingAccount::query()
->where(function ($query) use ($user, $sharedAccountIds) {
$query->where('user_id', $user->id);
if ($sharedAccountIds->isNotEmpty()) {
$query->orWhereIn('id', $sharedAccountIds);
}
})
->whereHas('product', fn ($q) => $q->whereIn('type', $sharedTypes))
->with('product')
->latest()
->get();
// Get user's hosting orders
$orders = CustomerHostingOrder::query()
->forUser($user->id)
->whereHas('product', fn ($q) => $q->whereIn('type', $sharedTypes))
->with(['product', 'hostingAccount'])
->latest()
->get();
// Combine accounts from orders and direct assignments
$allAccounts = $hostingAccounts->merge(
$orders->filter(fn ($o) => $o->hostingAccount)->map(fn ($o) => $o->hostingAccount)
)->unique('id');
// No hosting accounts - show selection modal
if ($allAccounts->isEmpty()) {
return view('hosting.select-type', [
'title' => 'Choose Hosting Plan',
]);
}
// Single account — account overview (matches monolith; panel via Control Panel)
if ($allAccounts->count() === 1) {
$account = $allAccounts->first();
return redirect()->route('hosting.accounts.show', $account);
}
// Multiple accounts - show list page
return view('hosting.accounts-list', [
'title' => 'Your Hosting Accounts',
'accounts' => $allAccounts,
]);
}
public function singleDomain(Request $request): View
{
return $this->renderHostingPage($request, HostingProduct::TYPE_SINGLE_DOMAIN, 'Single Domain Hosting');