first commit

This commit is contained in:
Doar Mihai
2026-08-08 18:03:29 +03:00
commit df2128ebff
183 changed files with 18719 additions and 0 deletions
@@ -0,0 +1,80 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
@php
$seoTitle = $title ?? config('app.name');
$seoDescription = $description ?? 'A blog powered by ' . config('app.name') . '.';
$seoCanonical = $canonical ?? url()->current();
$seoImage = $image ?? null;
$seoType = $type ?? 'website';
@endphp
<title>{{ $seoTitle }}</title>
<meta name="description" content="{{ $seoDescription }}">
<link rel="canonical" href="{{ $seoCanonical }}">
{{-- Open Graph --}}
<meta property="og:site_name" content="{{ config('app.name') }}">
<meta property="og:type" content="{{ $seoType }}">
<meta property="og:title" content="{{ $seoTitle }}">
<meta property="og:description" content="{{ $seoDescription }}">
<meta property="og:url" content="{{ $seoCanonical }}">
@if ($seoImage)
<meta property="og:image" content="{{ $seoImage }}">
@endif
{{-- Twitter --}}
<meta name="twitter:card" content="{{ $seoImage ? 'summary_large_image' : 'summary' }}">
<meta name="twitter:title" content="{{ $seoTitle }}">
<meta name="twitter:description" content="{{ $seoDescription }}">
@if ($seoImage)
<meta name="twitter:image" content="{{ $seoImage }}">
@endif
<link rel="alternate" type="application/rss+xml" title="{{ config('app.name') }} Feed" href="{{ route('blog.feed') }}">
<link rel="icon" type="image/svg+xml" href="{{ asset('favicon.svg') }}">
@stack('jsonld')
@fonts
@vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
<body class="min-h-screen bg-white text-neutral-900 antialiased">
<header class="border-b border-neutral-200">
<div class="mx-auto flex max-w-3xl items-center justify-between px-6 py-6">
<a href="{{ route('blog.index') }}" class="flex shrink-0 items-center gap-2 text-lg font-semibold tracking-tight">
<x-logo class="h-8 w-8 shrink-0 text-neutral-900" />
<span class="whitespace-nowrap">{{ config('app.name') }}</span>
</a>
<nav class="flex shrink-0 gap-6 text-sm text-neutral-600">
<a href="{{ route('blog.index') }}" class="hover:text-neutral-900 hover:underline underline-offset-4">Blog</a>
<a href="{{ route('tools.index') }}" class="hover:text-neutral-900 hover:underline underline-offset-4">Tools</a>
</nav>
</div>
</header>
<main class="mx-auto max-w-3xl px-6 py-10">
{{ $slot }}
</main>
<footer class="mt-16 border-t border-neutral-200">
<div class="mx-auto flex max-w-3xl flex-col gap-4 px-6 py-8 text-sm text-neutral-500 sm:flex-row sm:items-center sm:justify-between">
<p>&copy; {{ now()->year }} {{ config('app.name') }}</p>
@if (($footerPages ?? collect())->isNotEmpty())
<nav class="flex flex-wrap gap-x-6 gap-y-2">
@foreach ($footerPages as $footerPage)
<a href="{{ route('pages.show', $footerPage) }}" class="hover:text-neutral-900 hover:underline underline-offset-4">
{{ $footerPage->title }}
</a>
@endforeach
</nav>
@endif
</div>
</footer>
</body>
</html>
+23
View File
@@ -0,0 +1,23 @@
@props(['class' => 'h-8 w-8'])
<svg viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg" {{ $attributes->merge(['class' => $class]) }}>
{{-- antenna --}}
<line x1="32" y1="16" x2="32" y2="7" stroke="currentColor" stroke-width="3" stroke-linecap="round" />
<circle cx="32" cy="5.5" r="4" fill="currentColor" />
{{-- ears --}}
<rect x="3" y="27" width="8" height="15" rx="4" fill="currentColor" />
<rect x="53" y="27" width="8" height="15" rx="4" fill="currentColor" />
{{-- head --}}
<rect x="10" y="15" width="44" height="38" rx="15" fill="currentColor" />
{{-- open eye --}}
<circle cx="24" cy="34" r="4.5" fill="white" />
{{-- winking eye --}}
<path d="M 34 34 Q 39.5 29.5 45 34" stroke="white" stroke-width="3.25" stroke-linecap="round" fill="none" />
{{-- smile --}}
<path d="M 23 45 Q 32 51.5 41 45" stroke="white" stroke-width="3.25" stroke-linecap="round" fill="none" />
</svg>
@@ -0,0 +1,35 @@
<article class="flex gap-5 border-b border-neutral-200 py-8 first:pt-0">
@if ($post->featured_image)
<a href="{{ route('blog.show', $post) }}" class="hidden shrink-0 sm:block">
<img
src="{{ asset('storage/'.$post->featured_image) }}"
alt="{{ $post->title }}"
class="h-28 w-40 rounded-lg object-cover"
loading="lazy"
>
</a>
@endif
<div class="min-w-0">
@if ($post->category)
<a href="{{ route('blog.category', $post->category) }}" class="text-xs font-medium uppercase tracking-wide text-neutral-500 hover:text-neutral-900">
{{ $post->category->name }}
</a>
@endif
<h2 class="mt-2 text-2xl font-semibold tracking-tight">
<a href="{{ route('blog.show', $post) }}" class="hover:underline">{{ $post->title }}</a>
</h2>
<p class="mt-2 text-neutral-600">{{ $post->excerpt_or_summary }}</p>
<div class="mt-4 flex flex-wrap items-center gap-3 text-sm text-neutral-500">
<time datetime="{{ $post->published_at->toIso8601String() }}">{{ $post->published_at->format('M j, Y') }}</time>
<span aria-hidden="true">&middot;</span>
<span>{{ $post->user->name }}</span>
@foreach ($post->tags as $tag)
<a href="{{ route('blog.tag', $tag) }}" class="rounded-full bg-neutral-100 px-2 py-0.5 text-xs hover:bg-neutral-200">#{{ $tag->name }}</a>
@endforeach
</div>
</div>
</article>
@@ -0,0 +1,34 @@
<article class="flex flex-col rounded-lg border border-neutral-200 p-5">
<div class="flex items-center gap-3">
@if ($tool->logo_url)
<img src="{{ $tool->logo_url }}" alt="{{ $tool->name }} logo" class="h-10 w-10 rounded-md object-cover" loading="lazy">
@endif
<div>
<h3 class="font-semibold leading-tight">
<a href="{{ route('tools.show', $tool) }}" class="hover:underline">{{ $tool->name }}</a>
</h3>
<a href="{{ route('tools.category', $tool->category) }}" class="text-xs text-neutral-500 hover:text-neutral-900">
{{ $tool->category_label }}@if ($tool->subcategory) &middot; {{ $tool->subcategory }} @endif
</a>
</div>
@if ($tool->featured)
<span class="ml-auto rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-800">Featured</span>
@endif
</div>
<p class="mt-3 flex-1 text-sm text-neutral-600">{{ str($tool->description)->limit(120) }}</p>
<div class="mt-4 flex flex-wrap items-center justify-between gap-2">
@if ($tool->pricing)
<span class="rounded-full bg-neutral-100 px-2 py-0.5 text-xs text-neutral-700">{{ $tool->pricing }}</span>
@endif
<a
href="{{ route('tools.visit', $tool) }}"
target="_blank"
rel="nofollow noopener sponsored"
class="ml-auto text-sm font-medium text-neutral-900 hover:underline"
>
Visit site &rarr;
</a>
</div>
</article>