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
+47
View File
@@ -0,0 +1,47 @@
<x-layouts.app :title="$title" :description="$description" :canonical="$canonical">
@push('jsonld')
<script type="application/ld+json">
{!! json_encode([
'@context' => 'https://schema.org',
'@type' => 'BreadcrumbList',
'itemListElement' => [
['@type' => 'ListItem', 'position' => 1, 'name' => 'AI Tools', 'item' => route('tools.index')],
['@type' => 'ListItem', 'position' => 2, 'name' => $label, 'item' => $canonical],
],
]) !!}
</script>
@endpush
<p class="text-sm text-neutral-500">
<a href="{{ route('tools.index') }}" class="hover:underline">AI Tools</a>
<span aria-hidden="true">/</span>
{{ $label }}
</p>
<h1 class="mt-2 text-3xl font-bold tracking-tight">{{ $label }} AI Tools</h1>
<nav class="mt-4 flex flex-wrap gap-2">
<a href="{{ route('tools.index') }}" class="rounded-full bg-neutral-100 px-3 py-1 text-sm text-neutral-700 hover:bg-neutral-200">
All
</a>
@foreach ($categories as $slug => $categoryLabel)
<a
href="{{ route('tools.category', $slug) }}"
class="rounded-full px-3 py-1 text-sm {{ $category === $slug ? 'bg-neutral-900 text-white' : 'bg-neutral-100 text-neutral-700 hover:bg-neutral-200' }}"
>
{{ $categoryLabel }}
</a>
@endforeach
</nav>
<div class="mt-8 grid grid-cols-1 gap-4 sm:grid-cols-2">
@forelse ($tools as $tool)
<x-tool-card :tool="$tool" />
@empty
<p class="text-neutral-500 sm:col-span-2">No tools in this category yet.</p>
@endforelse
</div>
<div class="mt-10">
{{ $tools->links() }}
</div>
</x-layouts.app>
+54
View File
@@ -0,0 +1,54 @@
<x-layouts.app :title="$title" :description="$description" :canonical="$canonical">
@push('jsonld')
<script type="application/ld+json">
{!! json_encode([
'@context' => 'https://schema.org',
'@type' => 'CollectionPage',
'name' => 'AI Tools Directory',
'url' => $canonical,
]) !!}
</script>
@endpush
<h1 class="text-3xl font-bold tracking-tight">AI Tools Directory</h1>
<p class="mt-2 text-neutral-600">A curated list of AI tools for developers, designers, marketers, and more.</p>
<form action="{{ route('tools.index') }}" method="GET" class="mt-6">
<input
type="search"
name="q"
value="{{ $search }}"
placeholder="Search tools&hellip;"
class="w-full rounded-lg border border-neutral-300 px-4 py-2 text-sm focus:border-neutral-900 focus:outline-none"
>
</form>
<nav class="mt-4 flex flex-wrap gap-2">
<a
href="{{ route('tools.index') }}"
class="rounded-full px-3 py-1 text-sm {{ $activeCategory === '' ? 'bg-neutral-900 text-white' : 'bg-neutral-100 text-neutral-700 hover:bg-neutral-200' }}"
>
All
</a>
@foreach ($categories as $slug => $label)
<a
href="{{ route('tools.category', $slug) }}"
class="rounded-full px-3 py-1 text-sm {{ $activeCategory === $slug ? 'bg-neutral-900 text-white' : 'bg-neutral-100 text-neutral-700 hover:bg-neutral-200' }}"
>
{{ $label }}
</a>
@endforeach
</nav>
<div class="mt-8 grid grid-cols-1 gap-4 sm:grid-cols-2">
@forelse ($tools as $tool)
<x-tool-card :tool="$tool" />
@empty
<p class="text-neutral-500 sm:col-span-2">No tools found.</p>
@endforelse
</div>
<div class="mt-10">
{{ $tools->links() }}
</div>
</x-layouts.app>
+76
View File
@@ -0,0 +1,76 @@
<x-layouts.app :title="$title" :description="$description" :canonical="$canonical" :image="$image ?? null">
@push('jsonld')
<script type="application/ld+json">
{!! json_encode([
'@context' => 'https://schema.org',
'@type' => 'SoftwareApplication',
'name' => $tool->name,
'description' => $description,
'url' => $tool->url,
...($tool->logo_url ? ['image' => $tool->logo_url] : []),
'applicationCategory' => $tool->category_label,
...($tool->pricing ? ['offers' => ['@type' => 'Offer', 'price' => $tool->pricing]] : []),
]) !!}
</script>
@endpush
<p class="text-sm text-neutral-500">
<a href="{{ route('tools.index') }}" class="hover:underline">AI Tools</a>
<span aria-hidden="true">/</span>
<a href="{{ route('tools.category', $tool->category) }}" class="hover:underline">{{ $tool->category_label }}</a>
</p>
<div class="mt-4 flex items-start gap-4">
@if ($tool->logo_url)
<img src="{{ $tool->logo_url }}" alt="{{ $tool->name }} logo" class="h-16 w-16 rounded-lg object-cover">
@endif
<div>
<h1 class="text-3xl font-bold tracking-tight">{{ $tool->name }}</h1>
<p class="mt-1 text-sm text-neutral-500">
{{ $tool->category_label }}@if ($tool->subcategory) &middot; {{ $tool->subcategory }} @endif
@if ($tool->pricing) &middot; {{ $tool->pricing }} @endif
</p>
</div>
</div>
<a
href="{{ route('tools.visit', $tool) }}"
target="_blank"
rel="nofollow noopener sponsored"
class="mt-6 inline-block rounded-lg bg-neutral-900 px-5 py-2.5 text-sm font-medium text-white hover:bg-neutral-700"
>
Visit {{ $tool->name }} &rarr;
</a>
<p class="mt-8 text-neutral-700">{{ $tool->description }}</p>
@if (! empty($tool->features))
<div class="mt-8">
<h2 class="text-lg font-semibold">Features</h2>
<ul class="mt-3 list-inside list-disc space-y-1 text-neutral-700">
@foreach ($tool->features as $feature)
<li>{{ $feature }}</li>
@endforeach
</ul>
</div>
@endif
@if (! empty($tool->tags))
<div class="mt-8 flex flex-wrap gap-2">
@foreach ($tool->tags as $tag)
<span class="rounded-full bg-neutral-100 px-3 py-1 text-sm text-neutral-700">#{{ $tag }}</span>
@endforeach
</div>
@endif
@if ($related->isNotEmpty())
<div class="mt-12 border-t border-neutral-200 pt-8">
<h2 class="text-lg font-semibold">More {{ $tool->category_label }} tools</h2>
<div class="mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2">
@foreach ($related as $relatedTool)
<x-tool-card :tool="$relatedTool" />
@endforeach
</div>
</div>
@endif
</x-layouts.app>