Add reviews, search autocomplete, SEO meta/schema, user lists

- Review system: ReviewController (store/update/destroy), ReviewPolicy, Review model boot() hooks, review form with Alpine.js (spoiler toggle, edit/delete UX)
- Search autocomplete: Alpine.js searchWidget in nav with 300ms debounce, keyboard navigation, 6-result dropdown
- SEO: og:image, twitter:card in layout; og sections + Schema.org VideoGame JSON-LD on game show pages
- Custom lists: UserList/UserListGame models, ListController, ListPolicy, lists index/show views, Add-to-List button on game pages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Mark
2026-05-30 02:50:34 +03:00
co-authored by Claude Sonnet 4.6
parent 93d869cf8c
commit 5c6ba86e15
14 changed files with 795 additions and 39 deletions
+7 -3
View File
@@ -44,12 +44,16 @@ class GameController extends Controller
{
$game->load(['genres', 'platforms', 'companies', 'screenshots', 'reviews.user']);
$userGame = null;
$userGame = null;
$userReview = null;
$userLists = collect();
if (auth()->check()) {
$userGame = $game->userGames()->where('user_id', auth()->id())->first();
$userGame = $game->userGames()->where('user_id', auth()->id())->first();
$userReview = $game->reviews()->where('user_id', auth()->id())->first();
$userLists = auth()->user()->lists()->get(['id', 'title']);
}
return view('games.show', compact('game', 'userGame'));
return view('games.show', compact('game', 'userGame', 'userReview', 'userLists'));
}
public function search(Request $request)