Files
m105 4f26f840aa Rework the landing page: sections, icons, SEO meta tags
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.
2026-07-25 15:50:46 +03:00

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>