move into sonardesk
This commit is contained in:
@@ -23,4 +23,10 @@
|
||||
: 'Streamline operations, boost productivity, and improve customer satisfaction with one connected platform built for modern teams.',
|
||||
])
|
||||
@endif
|
||||
<section class="abs-sonardesk-feature" style="background:linear-gradient(115deg,#0d1b30,#172b49);border-block:1px solid #3b4c68;padding:64px 0;color:#f4f6fb">
|
||||
<div style="width:min(1440px,calc(100% - 48px));margin:auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:28px">
|
||||
<div style="max-width:740px"><span style="color:#e6bd6b;font-weight:800;font-size:12px;letter-spacing:.16em">ABSDEV SOFTWARE</span><h2 style="font-size:clamp(36px,4vw,56px);margin:12px 0;line-height:1.1">Sonar<span style="color:#e6bd6b">Desk</span></h2><p style="color:#c2d0e2;font-size:18px;line-height:1.6">Native SonarQube monitoring for macOS. Keep quality gates, issues and project health in view, all from your desktop.</p></div>
|
||||
<div style="display:flex;gap:12px;flex-wrap:wrap"><a href="{{ route('absdev.sonardesk.home') }}" style="background:#e6bd6b;color:#0d1b30;padding:13px 20px;border-radius:9px;font-weight:800">Explore SonarDesk →</a><a href="{{ route('sonardesk.downloads') }}" style="border:1px solid #8496af;color:#f4f6fb;padding:13px 20px;border-radius:9px;font-weight:750">Downloads</a></div>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@@ -14,13 +14,40 @@
|
||||
@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'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@if (strtolower(trim($link['label'])) !== 'products' && strtolower(trim($link['label'])) !== 'sonardesk')
|
||||
@if (!empty($link['children']))
|
||||
<details class="abs-nav-group"><summary>{{ $link['label'] }}</summary><div class="abs-nav-panel">
|
||||
@foreach ($link['children'] as $child)
|
||||
<a href="{{ $child['url'] }}" @if($child['target'] ?? null) target="{{ $child['target'] }}" rel="noopener" @endif>{{ $child['label'] }}</a>
|
||||
@endforeach
|
||||
</div></details>
|
||||
@else
|
||||
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@endif
|
||||
@endif
|
||||
@endforeach
|
||||
@if (Route::has('absdev.sonardesk.home'))
|
||||
<a href="{{ route('absdev.sonardesk.home') }}">SonarDesk</a>
|
||||
@endif
|
||||
<details class="abs-nav-group abs-products"><summary>Products <span aria-hidden="true">⌄</span></summary>
|
||||
<div class="abs-nav-panel">
|
||||
<a href="{{ route('absdev.sonardesk.home') }}"><strong>SonarDesk</strong><small>Native SonarQube dashboard for Mac</small></a>
|
||||
<a href="{{ route('absdev.sonardesk.features') }}">Features</a>
|
||||
<a href="{{ route('absdev.sonardesk.pricing') }}">Pricing</a>
|
||||
<a href="{{ route('sonardesk.downloads') }}">Downloads & releases</a>
|
||||
</div>
|
||||
</details>
|
||||
</nav>
|
||||
@endif
|
||||
<style>
|
||||
.abs-nav-group{position:relative;display:flex;align-items:center}
|
||||
.abs-nav-group summary{list-style:none;cursor:pointer;color:#ddd;font-size:14px;white-space:nowrap}
|
||||
.abs-nav-group summary::-webkit-details-marker{display:none}
|
||||
.abs-nav-group[open] summary,.abs-nav-group summary:hover{color:#e5b95b}
|
||||
.abs-nav-panel{position:absolute;top:calc(100% + 20px);left:0;width:280px;z-index:100;background:#131d30;border:1px solid #35415a;border-radius:12px;box-shadow:0 22px 45px #0008;padding:9px;display:grid;gap:2px}
|
||||
.abs-nav-panel a{display:block!important;padding:10px 12px!important;color:#eaf0f9!important;border-radius:7px;font-size:13px!important}
|
||||
.abs-nav-panel a:hover{background:#253550;color:#e5b95b!important}
|
||||
.abs-nav-panel small{display:block;color:#aab8ce;font-size:11px}
|
||||
.abs-mobile-products{padding:12px 16px;border-top:1px solid #3a3a3a;display:grid;gap:10px}
|
||||
.abs-mobile-products strong{color:#e5b95b}.abs-mobile-products a{padding:5px 0!important}
|
||||
</style>
|
||||
|
||||
<div class="nav-actions">
|
||||
@auth
|
||||
@@ -42,10 +69,18 @@
|
||||
@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'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@if (!in_array(strtolower(trim($link['label'])), ['products', 'sonardesk'], true))
|
||||
<a href="{{ $link['url'] }}" @if($link['target'] ?? null) target="{{ $link['target'] }}" rel="noopener" @endif>{{ $link['label'] }}</a>
|
||||
@foreach(($link['children'] ?? []) as $child)
|
||||
<a href="{{ $child['url'] }}" style="padding-left:28px">{{ $child['label'] }}</a>
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
@if (Route::has('absdev.sonardesk.home'))
|
||||
<a href="{{ route('absdev.sonardesk.home') }}">SonarDesk</a>
|
||||
@endif
|
||||
<div class="abs-mobile-products"><strong>Products · SonarDesk</strong>
|
||||
<a href="{{ route('absdev.sonardesk.home') }}">Overview</a>
|
||||
<a href="{{ route('absdev.sonardesk.features') }}">Features</a>
|
||||
<a href="{{ route('absdev.sonardesk.pricing') }}">Pricing</a>
|
||||
<a href="{{ route('sonardesk.downloads') }}">Downloads & releases</a>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
@extends('sonardesk.layout')
|
||||
@section('title','Features')
|
||||
@section('content')<section class="hero"><h1>Focus on what matters.</h1><p class="lead">SonarDesk brings SonarQube project health and issue exploration to a native macOS workspace.</p></section><div class="grid"><div class="card"><h2>Quality gates</h2><p>Understand project health quickly.</p></div><div class="card"><h2>Issue details</h2><p>Explore bugs, vulnerabilities and code smells.</p></div><div class="card"><h2>Multiple projects</h2><p>Organise and switch between your projects.</p></div></div>@endsection
|
||||
@section('content')<section class="sd-hero"><span class="sd-kicker">SonarDesk / Features</span><h1>Less switching.<br><span style="color:var(--gold)">More clarity.</span></h1><p class="sd-lead">Stay close to your SonarQube project health with a native macOS workspace.</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.downloads') }}">Download SonarDesk →</a></div></section><section class="sd-section"><div class="sd-grid"><article class="sd-card"><h3>Quality gates</h3><p>Keep the current status of your projects visible.</p></article><article class="sd-card"><h3>Bugs & vulnerabilities</h3><p>Explore issues and their details without losing context.</p></article><article class="sd-card"><h3>Code smells</h3><p>See maintainability concerns alongside your other quality metrics.</p></article><article class="sd-card"><h3>Multiple servers</h3><p>Connect to and switch between SonarQube servers.</p></article><article class="sd-card"><h3>Project organisation</h3><p>Arrange your project sidebar around your workflow.</p></article><article class="sd-card"><h3>Native macOS experience</h3><p>Designed for the desktop with light and dark appearance support.</p></article></div></section>@endsection
|
||||
|
||||
@@ -1,22 +1,7 @@
|
||||
@extends('sonardesk.layout')
|
||||
@section('title', 'SonarDesk')
|
||||
@section('title','SonarDesk — SonarQube for Mac')
|
||||
@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>
|
||||
<section class="sd-hero"><span class="sd-kicker">Native macOS · SonarQube</span><h1>Your code quality.<br><span style="color:var(--gold)">Clearly in view.</span></h1><p class="sd-lead">A dedicated Mac dashboard for SonarQube. Follow quality gates, inspect bugs and vulnerabilities, and move between projects without the clutter.</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.downloads') }}">Browse downloads →</a><a class="sd-button secondary" href="{{ $sdBase }}/features">Explore features</a><a class="sd-button secondary" href="{{ $sdBase }}/pricing">See pricing</a></div><p class="sd-meta">Built for macOS · Connects to your SonarQube server</p></section>
|
||||
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Everything in one place</span><h2>Quality signals, not noise.</h2></div></div><div class="sd-grid"><article class="sd-card"><span class="sd-badge">01 / Monitor</span><h3 style="margin-top:16px">Project health at a glance</h3><p>Track quality gates, bugs, vulnerabilities and code smells from a single dashboard.</p></article><article class="sd-card"><span class="sd-badge">02 / Investigate</span><h3 style="margin-top:16px">Go straight to the issue</h3><p>Inspect issue details, navigate results and focus on the work that needs attention.</p></article><article class="sd-card"><span class="sd-badge">03 / Organise</span><h3 style="margin-top:16px">Your projects, your workflow</h3><p>Manage multiple projects and servers in a native Mac interface.</p></article></div></section>
|
||||
<section class="sd-section"><div class="sd-card" style="display:flex;justify-content:space-between;align-items:center;gap:25px;flex-wrap:wrap"><div><span class="sd-kicker">Download centre</span><h2>Ready to get started?</h2><p>Find published installers, release notes and product details.</p></div><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.downloads') }}">View all downloads →</a><a class="sd-button secondary" href="{{ route('sonardesk.buy') }}">Plans & licensing</a></div></div></section>
|
||||
@endsection
|
||||
|
||||
@@ -1,50 +1,13 @@
|
||||
@php
|
||||
$isDedicatedHost = in_array(request()->getHost(), [
|
||||
'sonardesk.absdev.net', 'sonardesk.co.uk', 'www.sonardesk.co.uk',
|
||||
], true);
|
||||
$base = $isDedicatedHost ? '' : '/sonardesk';
|
||||
$dedicated = in_array(request()->getHost(), ['sonardesk.absdev.net', 'sonardesk.co.uk', 'www.sonardesk.co.uk'], true);
|
||||
$sdBase = $dedicated ? '' : '/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>
|
||||
<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 — native SonarQube monitoring for macOS.">
|
||||
<style>
|
||||
:root{color-scheme:dark;--navy:#0b1629;--gold:#e6bd6b;--muted:#a9b8ce;--border:#293953;--text:#f1f5fc}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:radial-gradient(ellipse at 85% -10%,#1d385b 0,transparent 42%),#0b1629;color:var(--text);font:16px/1.65 system-ui,-apple-system,sans-serif}a{color:inherit;text-decoration:none}a:hover{color:var(--gold)}.sd-container{width:min(1440px,calc(100% - 64px));margin:auto}.sd-header{border-bottom:1px solid var(--border);background:#0a1525e8;position:sticky;top:0;z-index:30;backdrop-filter:blur(18px)}.sd-header-inner{min-height:76px;display:flex;align-items:center;justify-content:space-between;gap:26px}.sd-brand{font-size:26px;font-weight:850;letter-spacing:-1.3px;white-space:nowrap}.sd-brand span{color:var(--gold)}.sd-nav{display:flex;align-items:center;gap:clamp(12px,2vw,30px);flex-wrap:wrap}.sd-nav a{font-size:14px;color:#c6d3e6}.sd-nav a[aria-current=page],.sd-nav a:hover{color:var(--gold)}.sd-nav .sd-nav-cta{background:var(--gold);color:#101c30;padding:9px 16px;border-radius:8px;font-weight:750}.sd-main{min-height:65vh}.sd-hero{padding:94px 0 65px;max-width:920px}.sd-kicker{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);font-weight:800}.sd-hero h1{font-size:clamp(43px,5.5vw,78px);line-height:1.07;letter-spacing:-.055em;margin:14px 0 22px}.sd-lead{font-size:clamp(17px,2vw,22px);color:#b9c8dd;max-width:760px;line-height:1.65}.sd-actions{display:flex;gap:12px;flex-wrap:wrap;margin:28px 0}.sd-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--gold);color:#101c30;border:1px solid var(--gold);border-radius:9px;padding:12px 20px;font-weight:800;font-size:14px}.sd-button:hover{background:#f3d390;color:#101c30}.sd-button.secondary{background:transparent;color:#eef4ff;border-color:#425575}.sd-button.secondary:hover{border-color:var(--gold);color:var(--gold)}.sd-section{padding:34px 0 65px}.sd-section-head{display:flex;justify-content:space-between;align-items:end;gap:24px;flex-wrap:wrap;margin-bottom:24px}.sd-section h2{font-size:clamp(26px,3vw,38px);letter-spacing:-.035em;margin:0 0 8px}.sd-section p{color:#b3c2d8}.sd-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.sd-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.sd-card{min-width:0;background:linear-gradient(150deg,#192941,#101d30);border:1px solid #30425d;border-radius:14px;padding:26px}.sd-card h2,.sd-card h3{margin:0 0 9px;line-height:1.3}.sd-card p{color:#b5c3d6;margin:8px 0 16px}.sd-card .sd-actions{margin-bottom:0}.sd-meta{color:#aabbd2;font-size:13px}.sd-badge{display:inline-block;background:#e6bd6b18;color:var(--gold);border:1px solid #e6bd6b60;border-radius:99px;padding:3px 11px;font-size:12px;font-weight:750}.sd-list{display:grid;gap:12px}.sd-row{display:flex;align-items:center;justify-content:space-between;gap:22px;background:#15243a;border:1px solid var(--border);border-radius:12px;padding:20px 24px}.sd-row h3{margin:0 0 4px}.sd-row p{margin:4px 0;color:#b2c1d6}.sd-row-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;flex-shrink:0}.sd-text{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.75;color:#c6d3e4}.sd-footer{margin-top:60px;border-top:1px solid var(--border);padding:32px 0;color:#98acc8}.sd-footer-inner{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}.sd-footer a{margin-left:18px}.sd-price{font-size:32px;font-weight:850;color:#fff}.sd-muted{color:#aabbd2}.sd-empty{border:1px dashed #465a78;border-radius:12px;padding:28px;color:#b8c7db}.sd-checks{padding-left:20px;color:#c0cde0}.sd-checks li{margin:8px 0}code{overflow-wrap:anywhere}@media(max-width:900px){.sd-grid,.sd-grid.two{grid-template-columns:1fr 1fr}.sd-header-inner{align-items:flex-start;flex-direction:column;padding:16px 0}.sd-nav{gap:14px}.sd-hero{padding:65px 0 40px}}@media(max-width:650px){.sd-container{width:calc(100% - 36px)}.sd-grid,.sd-grid.two{grid-template-columns:1fr}.sd-row{align-items:stretch;flex-direction:column}.sd-row-actions{flex-shrink:1}.sd-header{position:static}.sd-nav a{font-size:13px}.sd-hero h1{font-size:43px}.sd-card{padding:21px}}
|
||||
</style></head><body>
|
||||
<header class="sd-header"><div class="sd-container sd-header-inner"><a class="sd-brand" href="{{ $sdBase ?: '/' }}">Sonar<span>Desk</span></a><nav class="sd-nav" aria-label="SonarDesk navigation"><a href="{{ $sdBase ?: '/' }}">Overview</a><a href="{{ $sdBase }}/features">Features</a><a href="{{ $sdBase }}/pricing">Pricing</a><a href="{{ route('sonardesk.downloads') }}">Downloads</a><a href="{{ route('account.sonardesk.index') }}">My licences</a><a href="{{ url('/') }}">ABSDEV</a><a class="sd-nav-cta" href="{{ route('sonardesk.buy') }}">Get SonarDesk</a></nav></div></header>
|
||||
<main class="sd-container sd-main">@yield('content')</main>
|
||||
<footer class="sd-footer"><div class="sd-container sd-footer-inner"><span>SonarDesk by ABSDEV · Native macOS software</span><div><a href="{{ route('sonardesk.downloads') }}">Downloads</a><a href="{{ route('sonardesk.buy') }}">Licensing</a><a href="{{ route('account.sonardesk.index') }}">Account</a></div></div></footer></body></html>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
@extends('sonardesk.layout')
|
||||
@section('title','Pricing')
|
||||
@section('content')<section class="hero"><h1>Simple plans for developers.</h1><p class="lead">Choose a plan that fits your workflow. Checkout will be available once the existing payment integration has passed migration verification.</p></section><div class="grid"><div class="card"><h2>Personal</h2><p>£4.99/month or £39.99/year</p></div><div class="card"><h2>Professional</h2><p>£8.99/month or £79.99/year</p></div></div>@endsection
|
||||
@section('content')<section class="sd-hero"><span class="sd-kicker">SonarDesk / Licensing</span><h1>Simple plans.<br><span style="color:var(--gold)">Built for developers.</span></h1><p class="sd-lead">Choose the SonarDesk licence that fits your workflow. Checkout and subscription management remain with the existing SonarDesk licensing service.</p></section><section class="sd-section"><div class="sd-grid two"><article class="sd-card"><span class="sd-badge">Personal</span><h2 style="margin-top:18px">For individual developers</h2><p><span class="sd-price">£4.99</span> / month</p><p>Or £39.99 billed annually.</p><a class="sd-button" href="{{ route('sonardesk.buy') }}">View purchase options →</a></article><article class="sd-card"><span class="sd-badge">Professional</span><h2 style="margin-top:18px">For advanced workflows</h2><p><span class="sd-price">£8.99</span> / month</p><p>Or £79.99 billed annually.</p><a class="sd-button" href="{{ route('sonardesk.buy') }}">View purchase options →</a></article></div><p class="sd-muted" style="margin-top:22px">The purchase page shows whether checkout is currently enabled. No payment is taken directly on ABSDEV.</p></section>@endsection
|
||||
|
||||
Reference in New Issue
Block a user