move into sonardesk

This commit is contained in:
Mark Gregory
2026-10-12 15:55:14 +01:00
parent cd1d3186f0
commit 27b4e53caf
4 changed files with 88 additions and 24 deletions
@@ -11,11 +11,14 @@
@if ($logoUrl)<img src="{{ $logoUrl }}" alt="{{ $siteTitle }}">@else{{ $siteTitle }}@endif
</a>
@if (filter_var($headerContent['show_navigation'] ?? true, FILTER_VALIDATE_BOOL) && $navigationLinks)
@if (filter_var($headerContent['show_navigation'] ?? true, FILTER_VALIDATE_BOOL))
<nav class="desktop-nav" aria-label="Primary navigation">
@foreach ($navigationLinks as $link)
<a href="{{ $link['url'] }}" @if($link['target']) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
@endforeach
@if (Route::has('absdev.sonardesk.home'))
<a href="{{ route('absdev.sonardesk.home') }}">SonarDesk</a>
@endif
</nav>
@endif
@@ -32,21 +35,17 @@
@if (filter_var($headerContent['show_registration'] ?? true, FILTER_VALIDATE_BOOL) && Route::has('register'))<a class="btn primary nav-register" href="{{ route('register') }}">{{ $siteSettings['registration_label'] }}</a>@endif
@endauth
@if (filter_var($headerContent['show_mobile_menu'] ?? true, FILTER_VALIDATE_BOOL))
<button
class="menu"
type="button"
aria-label="Open navigation"
aria-controls="{{ $mobileMenuId }}"
aria-expanded="false"
data-saasland-menu-toggle
><span></span><span></span><span></span></button>
<button class="menu" type="button" aria-label="Open navigation" aria-controls="{{ $mobileMenuId }}" aria-expanded="false" data-saasland-menu-toggle><span></span><span></span><span></span></button>
@endif
</div>
</header>
@if (filter_var($headerContent['show_mobile_menu'] ?? true, FILTER_VALIDATE_BOOL))
<div id="{{ $mobileMenuId }}" class="mobile-nav" data-saasland-mobile-nav hidden>
@foreach($navigationLinks as $link)
<a href="{{ $link['url'] }}" @if($link['target']) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
@endforeach
@if (Route::has('absdev.sonardesk.home'))
<a href="{{ route('absdev.sonardesk.home') }}">SonarDesk</a>
@endif
</div>
@endif
+21 -2
View File
@@ -1,3 +1,22 @@
@extends('sonardesk.layout')
@section('title','SonarDesk for macOS')
@section('content')<section class="hero"><p style="color:var(--gold);font-weight:700">NATIVE MACOS · SONARQUBE</p><h1>Code quality, without the clutter.</h1><p class="lead">Monitor projects, inspect issues and follow quality gates from a purpose-built macOS dashboard.</p><a class="button" href="/features">Explore features</a><a class="button secondary" href="/pricing">View pricing</a></section><div class="grid"><article class="card"><h2>At a glance</h2><p>Keep quality gates, bugs, vulnerabilities and code smells in view.</p></article><article class="card"><h2>Project focused</h2><p>Switch between projects and investigate issues with fewer distractions.</p></article><article class="card"><h2>Built for macOS</h2><p>A native interface designed for your Mac.</p></article></div>@endsection
@section('title', 'SonarDesk')
@section('content')
@php
$base = in_array(request()->getHost(), [
'sonardesk.absdev.net', 'sonardesk.co.uk', 'www.sonardesk.co.uk',
], true) ? '' : '/sonardesk';
@endphp
<section class="hero">
<p style="color:var(--gold);font-weight:700">NATIVE MACOS · SONARQUBE</p>
<h1>Code quality, without the clutter.</h1>
<p class="lead">Monitor projects, inspect issues and follow quality gates from a purpose-built macOS dashboard.</p>
<a class="button" href="{{ $base }}/features">Explore features</a>
<a class="button secondary" href="{{ $base }}/pricing">View pricing</a>
<a class="button secondary" href="{{ route('sonardesk.downloads') }}">Download SonarDesk</a>
</section>
<div class="grid">
<article class="card"><h2>At a glance</h2><p>Keep quality gates, bugs, vulnerabilities and code smells in view.</p></article>
<article class="card"><h2>Project focused</h2><p>Switch between projects and investigate issues with fewer distractions.</p></article>
<article class="card"><h2>Built for macOS</h2><p>A native interface designed for your Mac.</p></article>
</div>
@endsection
+50 -1
View File
@@ -1 +1,50 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@yield('title', 'SonarDesk') · ABSDev</title><meta name="description" content="SonarDesk, a native macOS dashboard for SonarQube."><style>:root{color-scheme:dark;--navy:#0d1c36;--gold:#e5b95b;--ink:#eef3fb}*{box-sizing:border-box}body{margin:0;background:linear-gradient(135deg,#0d1c36,#172d4e);color:var(--ink);font:16px/1.6 system-ui,-apple-system,sans-serif}a{color:inherit}header,main,footer{max-width:1200px;margin:auto;padding:24px 32px}header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ffffff26}nav{display:flex;gap:24px;flex-wrap:wrap}.brand{font-weight:800;font-size:24px;letter-spacing:-.5px}.brand span{color:var(--gold)}.hero{padding:96px 0 64px;max-width:850px}h1{font-size:clamp(42px,6vw,76px);line-height:1.08;letter-spacing:-2px;margin:0 0 24px}h2{font-size:32px}.lead{font-size:21px;color:#c5d2e5}.button{display:inline-block;background:var(--gold);color:#0d1c36;padding:14px 25px;border-radius:9px;text-decoration:none;font-weight:750;margin:12px 12px 12px 0}.button.secondary{background:#ffffff16;color:white;border:1px solid #ffffff4d}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:20px;margin:36px 0 80px}.card{padding:28px;border:1px solid #ffffff28;background:#ffffff0b;border-radius:14px}footer{border-top:1px solid #ffffff26;color:#a9b8ce}@media(max-width:650px){header{display:block}nav{margin-top:16px}.hero{padding:56px 0}}</style></head><body><header><a class="brand" href="/">Sonar<span>Desk</span></a><nav><a href="/features">Features</a><a href="/pricing">Pricing</a><a href="https://absdev.net">ABSDev</a></nav></header><main>@yield('content')</main><footer>SonarDesk by ABSDev · macOS software</footer></body></html>
@php
$isDedicatedHost = in_array(request()->getHost(), [
'sonardesk.absdev.net', 'sonardesk.co.uk', 'www.sonardesk.co.uk',
], true);
$base = $isDedicatedHost ? '' : '/sonardesk';
@endphp
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title', 'SonarDesk') · ABSDEV</title>
<meta name="description" content="SonarDesk, a native macOS dashboard for SonarQube.">
<style>
:root{color-scheme:dark;--navy:#0d1c36;--gold:#e5b95b;--ink:#eef3fb}
*{box-sizing:border-box}
body{margin:0;background:linear-gradient(135deg,#0d1c36,#172d4e);color:var(--ink);font:16px/1.6 system-ui,-apple-system,sans-serif}
a{color:inherit}
header,main,footer{max-width:1200px;margin:auto;padding:24px 32px}
header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ffffff26}
nav{display:flex;gap:24px;flex-wrap:wrap}
.brand{font-weight:800;font-size:24px;letter-spacing:-.5px}
.brand span{color:var(--gold)}
.hero{padding:96px 0 64px;max-width:850px}
h1{font-size:clamp(42px,6vw,76px);line-height:1.08;letter-spacing:-2px;margin:0 0 24px}
h2{font-size:32px}
.lead{font-size:21px;color:#c5d2e5}
.button{display:inline-block;background:var(--gold);color:var(--navy);padding:14px 25px;border-radius:9px;text-decoration:none;font-weight:750;margin:12px 12px 12px 0}
.button.secondary{background:#ffffff16;color:white;border:1px solid #ffffff4d}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:20px;margin:36px 0 80px}
.card{padding:28px;border:1px solid #ffffff28;background:#ffffff0b;border-radius:14px}
footer{border-top:1px solid #ffffff26;color:#a9b8ce}
@media(max-width:650px){header{display:block}nav{margin-top:16px}.hero{padding:56px 0}}
</style>
</head>
<body>
<header>
<a class="brand" href="{{ $base ?: '/' }}">Sonar<span>Desk</span></a>
<nav>
<a href="{{ $base }}/features">Features</a>
<a href="{{ $base }}/pricing">Pricing</a>
<a href="{{ route('sonardesk.downloads') }}">Downloads</a>
<a href="{{ route('sonardesk.buy') }}">Buy</a>
<a href="https://absdev.net">ABSDEV</a>
</nav>
</header>
<main>@yield('content')</main>
<footer>SonarDesk by ABSDEV · macOS software</footer>
</body>
</html>
+7 -10
View File
@@ -12,18 +12,15 @@ Route::get('/', function () {
return stylist_frontend_view(stylist()->frontend()->entryView());
})->name('home');
// Public SonarDesk product pages on ABSDEV.
Route::prefix('sonardesk')->name('absdev.sonardesk.')->group(function (): void {
Route::view('/', 'sonardesk.home')->name('home');
Route::view('/features', 'sonardesk.features')->name('features');
Route::view('/pricing', 'sonardesk.pricing')->name('pricing');
});
Route::middleware(['auth', 'verified'])->group(function () {
Route::get('/dashboard', DashboardController::class)->name('dashboard');
});
// SonarDesk public product pages on ABSDEV.
Route::prefix('sonardesk')
->name('absdev.sonardesk.')
->group(function (): void {
Route::view('/', 'sonardesk.home')->name('home');
Route::view('/features', 'sonardesk.features')->name('features');
Route::view('/pricing', 'sonardesk.pricing')->name('pricing');
});
require __DIR__.'/settings.php';