Files
memefast/app/Http/Controllers/FrontHomeController.php
2025-07-17 03:28:02 +08:00

102 lines
4.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\BackgroundMedia;
use App\Models\MemeMedia;
use App\Services\MemeMediaService;
use Artesaos\SEOTools\Facades\JsonLd;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Cache;
use Inertia\Inertia;
class FrontHomeController extends Controller
{
public function __construct(
private MemeMediaService $memeMediaService
) {}
public function index()
{
if (App::environment('production') && env('COMING_SOON_ENABLED', true)) {
return Inertia::render('comingsoon');
}
// Cache the counts for 1 day to reduce server calls
$stats = Cache::remember('home_stats', 60 * 60 * 24, function () {
return [
'meme_count' => MemeMedia::count(),
'background_count' => BackgroundMedia::count(),
];
});
// Get FAQ data
$faqData = $this->getFaqData();
// Get popular keywords for search suggestions
$popularKeywords = $this->memeMediaService->getPopularKeywords(10);
// Add FAQ JSON-LD structured data
$this->addFaqJsonLd($faqData);
return Inertia::render('home/home', [
'stats' => $stats,
'faqData' => $faqData,
'popularKeywords' => $popularKeywords,
]);
}
private function getFaqData()
{
return [
[
'q' => 'How can I create a meme video?',
'a' => 'Use the video editor on top to start making your meme!<br><br>Edit your caption, background and meme. Once satisfied, press the Export button to download your video!',
],
[
'q' => 'Why is video export slow for me?',
'a' => 'Video processing happens entirely in your browser using advanced web technology.<br><br> Export speed depends on your video content complexity and device performance. High-end devices export quickly, while older/slower devices may take longer or even crash. <br><br>If your phone is too slow, it\'s probably a potato. Try using a faster device like a desktop computer for better performance.',
],
[
'q' => 'What is a potato device?',
'a' => 'Potato devices are old, dated computers, laptops, phones or tablets with little RAM and CPU power - typically devices from before '.(now()->year - 6).' (pre-'.(now()->year - 6).').<br><br>These devices are usually too weak for the modern web and may not work properly with our video editor, or may crash during video processing.',
],
[
'q' => 'What video format do you export?',
'a' => 'We export high-quality MP4 videos optimized for all social media platforms in 9:16 format.<br><br>This is compatible for TikTok, Youtube Shorts, Instagram Reels, and more.',
],
[
'q' => 'Is there a mobile app?',
'a' => 'Our web app is fully responsive and works perfectly on mobile devices.<br><br>Do you want a mobile app? We\'ll see what can be done. Let us know in our Discord group.',
],
[
'q' => 'How often do you add new content?',
'a' => 'We just started building this platform and will gradually add more meme templates and backgrounds over time, so everyone can continue using it for free with fresh content!<br><br>Want a certain content? Let us know in our Discord group.',
],
[
'q' => 'I found a bug!',
'a' => 'Great, report it into the Discord group and we\'ll fix it as soon as possible!',
],
[
'q' => 'I have more questions!',
'a' => 'Great! Join our Discord group and ask away!',
],
];
}
private function addFaqJsonLd($faqData)
{
JsonLd::addValue('@type', 'FAQPage');
JsonLd::addValue('mainEntity', collect($faqData)->map(function ($faq) {
return [
'@type' => 'Question',
'name' => $faq['q'],
'acceptedAnswer' => [
'@type' => 'Answer',
'text' => strip_tags(str_replace('<br><br>', ' ', $faq['a'])),
],
];
})->toArray());
}
}