Rewrites the marketing copy around outcomes (find competitors by product/market, tech stack, backlinks, subdomains) rather than mentioning Common Crawl as the data source. Adds a stats strip (real site/page/backlink counts), a 4-feature grid with inline SVG icons, and a 3-step "how it works" section. Layout now supports a per-page :description prop and emits meta description, Open Graph, Twitter card, and canonical tags — falls back to a sensible site-wide description when a page doesn't set one. Heading structure is a single h1 with h2 section headers, for SEO. Verified over real HTTP: no "Common Crawl" mention anywhere on the page, all meta/OG/Twitter/canonical tags present and correct, heading hierarchy clean, all 4 SVG icons well-formed, CTAs intact. Full test suite (31 tests) still passes.
62 lines
3.4 KiB
PHP
62 lines
3.4 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
@php
|
|
$metaDescription = $description ?? 'Huginn helps you find and analyze your real online competitors — by product, market, and the technology they run on.';
|
|
@endphp
|
|
|
|
<title>{{ isset($title) ? $title.' — ' : '' }}{{ config('app.name', 'Huginn') }}</title>
|
|
<meta name="description" content="{{ $metaDescription }}">
|
|
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:site_name" content="{{ config('app.name', 'Huginn') }}">
|
|
<meta property="og:title" content="{{ isset($title) ? $title.' — ' : '' }}{{ config('app.name', 'Huginn') }}">
|
|
<meta property="og:description" content="{{ $metaDescription }}">
|
|
<meta property="og:url" content="{{ url()->current() }}">
|
|
|
|
<meta name="twitter:card" content="summary">
|
|
<meta name="twitter:title" content="{{ isset($title) ? $title.' — ' : '' }}{{ config('app.name', 'Huginn') }}">
|
|
<meta name="twitter:description" content="{{ $metaDescription }}">
|
|
|
|
<link rel="canonical" href="{{ url()->current() }}">
|
|
|
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
|
<link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600&display=swap" rel="stylesheet">
|
|
|
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
@livewireStyles
|
|
</head>
|
|
<body class="min-h-screen bg-white text-neutral-900 antialiased dark:bg-neutral-950 dark:text-neutral-100">
|
|
<header class="border-b border-neutral-200 dark:border-neutral-800">
|
|
<div class="mx-auto flex max-w-5xl items-center gap-6 px-4 py-4">
|
|
<a href="{{ route('home') }}" class="text-lg font-semibold">Huginn</a>
|
|
<nav class="flex flex-1 gap-4 text-sm">
|
|
<a href="{{ route('sites.index') }}" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100">Sites</a>
|
|
<a href="{{ route('discover') }}" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100">Discover</a>
|
|
</nav>
|
|
<nav class="flex items-center gap-4 text-sm">
|
|
@auth
|
|
<a href="{{ route('profile') }}" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100">{{ auth()->user()->name }}</a>
|
|
<form method="POST" action="{{ route('logout') }}">
|
|
@csrf
|
|
<button type="submit" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100">Log out</button>
|
|
</form>
|
|
@else
|
|
<a href="{{ route('login') }}" class="text-neutral-600 hover:text-neutral-900 dark:text-neutral-400 dark:hover:text-neutral-100">Log in</a>
|
|
<a href="{{ route('register') }}" class="rounded-md bg-neutral-900 px-3 py-1.5 font-medium text-white hover:bg-neutral-700 dark:bg-white dark:text-neutral-900 dark:hover:bg-neutral-200">Sign up</a>
|
|
@endauth
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
{{ $slot }}
|
|
</main>
|
|
|
|
@livewireScripts
|
|
</body>
|
|
</html>
|