Files
toolvana/app/Views/home.php
T
deepseek beaf0e1f37 Toolvana: production-ready media tools platform (CodeIgniter 4)
- 134-tool registry with programmatic SEO (unique titles/H1/descriptions,
  JSON-LD graphs, sitemap index, canonical 301 enforcement via required filter)
- DB-backed job queue (SKIP LOCKED) with drivers: Ffmpeg, Images (GD),
  Pdf (qpdf/gs/poppler), Youtube (thumbnails), Qr (server-side PNG)
- Security: SSRF guard, MIME validation, rate limits, API-key auth,
  bcrypt admin login, security headers
- Admin panel: dashboard, tools/categories/guides CRUD, SEO audit,
  analytics, job inspector with retry, system health, feature flags
- Docker deployment (nginx + web/api FPM pools + scalable workers),
  PHPUnit suite (19 tests / 1139 assertions), PWA manifest + service worker
2026-08-23 07:10:30 +00:00

111 lines
5.4 KiB
PHP

<section class="hero">
<span class="badge" style="background:#ffffff22;color:#fff"><?= $toolCount ?> free tools</span>
<h1>Free Online Video, YouTube &amp; Image Tools</h1>
<p class="tagline">Fast, simple and free tools for downloading, converting, compressing and editing media online.</p>
<form class="hero-search" action="/search" method="get" role="search">
<input type="search" name="q" placeholder="Search a tool… e.g. “youtube mp3”" aria-label="Search tools"
autocomplete="off" data-suggest>
<button type="submit">Search</button>
</form>
<div class="hero-stats">No signup · No watermarks · Files deleted automatically</div>
</section>
<div class="wrap">
<section class="block">
<h2 class="section-title">Popular tools <a class="see-all" href="/tools/popular">See all →</a></h2>
<div class="grid cols-4">
<?php foreach ($popular as $tool): ?>
<?= view('partials/tool_card', ['tool' => $tool]) ?>
<?php endforeach ?>
</div>
</section>
<section class="block tight">
<h2 class="section-title">Browse by category</h2>
<div class="grid cols-4">
<?php foreach ($categories as $category): ?>
<a class="card cat-card" href="/<?= esc($category['slug']) ?>">
<span class="icon-wrap"><?= icon($category['icon']) ?></span>
<h3><?= esc($category['name']) ?></h3>
<p><?= esc($category['tagline']) ?></p>
<span class="count">
<?= count(service('finder')->toolsInCategory($category['slug'])) ?> tools →
</span>
</a>
<?php endforeach ?>
</div>
</section>
<section class="block tight">
<h2 class="section-title">Most used this week</h2>
<div class="grid cols-4">
<?php foreach ($mostUsed as $tool): ?>
<?= view('partials/tool_card', ['tool' => $tool]) ?>
<?php endforeach ?>
</div>
</section>
<section class="block tight">
<h2 class="section-title">Recently added</h2>
<div class="grid cols-3">
<?php foreach ($recently as $tool): ?>
<?= view('partials/tool_card', ['tool' => $tool]) ?>
<?php endforeach ?>
</div>
</section>
<section class="block tight">
<h2 class="section-title">Why use our tools?</h2>
<div class="grid cols-3">
<div class="card">
<span class="icon-wrap"><?= icon('shield') ?></span>
<h3>Private by design</h3>
<p>Files are processed on isolated workers and deleted automatically. Text utilities run entirely in your browser.</p>
</div>
<div class="card">
<span class="icon-wrap"><?= icon('swap') ?></span>
<h3>No installation</h3>
<p>Everything runs in the browser or on our servers — nothing to download, install or update.</p>
</div>
<div class="card">
<span class="icon-wrap"><?= icon('sparkles') ?></span>
<h3>Genuinely fast</h3>
<p>Lightweight pages, no ad bloat, no fake buttons. Tools start working the moment you arrive.</p>
</div>
</div>
</section>
<section class="block tight">
<h2 class="section-title">How it works</h2>
<ol class="steps">
<li><strong>Paste or upload</strong> Drop a file onto the upload area, or paste a link — whatever the tool asks for.</li>
<li><strong>Choose your output</strong> Pick format and quality when it matters; sensible defaults are preselected.</li>
<li><strong>Download the result</strong> Processing happens on dedicated servers with live progress, then you save the file.</li>
</ol>
</section>
<?= view('partials/faq', ['faqs' => [
['q' => 'Are these tools really free?', 'a' => 'Yes. Every tool on ' . config('Site')->name . ' is free to use without an account. Heavy processing is rate-limited to keep the service fast for everyone.'],
['q' => 'What can I do with these online media tools?', 'a' => 'Convert videos between MP4, WebM, MOV and more, extract audio as MP3 or WAV, compress oversized files, convert and optimize images, merge PDFs, generate QR codes and much more — ' . $toolCount . ' tools in total.'],
['q' => 'Do you store my files?', 'a' => 'Only temporarily. Uploads and results live in temporary storage for a short retention window (typically two hours) and are then deleted automatically along with all job metadata links.'],
['q' => 'Can I convert videos without installing software?', 'a' => 'That is the whole point — every conversion runs server-side through FFmpeg, so your device only needs a browser.'],
['q' => 'Is it legal to download YouTube videos?', 'a' => 'It depends on the content and your jurisdiction: your own uploads and properly licensed material are fine; commercial content generally requires permission from the rights holder or YouTube Premium\'s official offline mode. Our documentation explains how we handle platform terms.'],
]]) ?>
<section class="block tight">
<h2 class="section-title">Latest guides <a class="see-all" href="/blog">All guides →</a></h2>
<div class="grid cols-2">
<?php foreach ($guides as $guide): ?>
<a class="card" href="/blog/<?= esc($guide['slug']) ?>">
<span class="badge">Guide · <?= (int) $guide['reading_minutes'] ?> min</span>
<h3 style="margin-top:.5rem"><?= esc($guide['title']) ?></h3>
<p><?= esc(mb_substr((string) $guide['excerpt'], 0, 130)) ?>…</p>
</a>
<?php endforeach ?>
</div>
</section>
</div>