# Run migrations and seeders
php artisan migrate --seed
# Create the admin user id 1, required for the system lists
php artisan user:create-admin --email=admin@example.com --password=secure_password --force
# Create monthly game lists for the current year
php artisan games:lists:create-monthly --year=2026
# Populate db with games
php artisan igdb:upcoming:update --start-date=2026-01-06 --days=10 # dump prod db
mysqldump -h xxx.db.laravel.cloud -P 3306 -u <user> -p --single-transaction main > dump-go-main.sql
# import DB
mysql -u root -p games_outbreak < /usr/dumps/dump-go-main.sql
After initial setup, create an admin user to access admin features:
Interactive Mode (Recommended):
php artisan user:create-adminThe command will prompt for:
- Email address
- Password (hidden input)
- Password confirmation (hidden input)
Non-Interactive Mode:
php artisan user:create-admin --email=admin@example.com --password=secure_password --forceSecurity Notes:
- Use strong passwords (minimum 8 characters enforced)
- Never commit admin credentials to git
- Run command directly on server via SSH for production
- Password is automatically hashed using Laravel's bcrypt
This project is a web application for managing game lists and tracking game statuses.
- Track your game collection and statuses (Playing, Beaten, Completed, etc.)
- Organize games into custom lists
- Backlog: a dedicated list for games you plan to play
- Wishlist: a dedicated list for games you want to buy
- Quickly add/remove games to/from Backlog and Wishlist with one-click icons on each game card
- Admin panel for managing users, games, and lists
Each user can have:
- Multiple
regularlists (custom named lists) - One
backloglist (automatically created if missing) - One
wishlistlist (automatically created if missing)
| Type | Description | Unique per user |
|---|---|---|
| regular | User-created custom lists | No |
| backlog | Games the user plans to play | Yes |
| wishlist | Games the user wants to buy | Yes |
- The backlog is a special list with
type = 'backlog'. - It is created automatically when the user visits My Games.
- Users can add/remove games to/from their backlog.
- Displayed under the Backlog tab on
/my-games.
- The wishlist is a special list with
type = 'wishlist'. - It is created automatically when the user visits My Games.
- Users can add/remove games to/from their wishlist.
- Displayed under the Wishlist tab on
/my-games. - Useful for tracking games you want to buy or try in the future.
Monthly game lists are system lists that showcase games releasing in a specific month. These lists are automatically created and managed by administrators.
- Type: System lists (
is_system = true) - Visibility: Public (
is_public = true) - Active Status: Controlled by
is_activeflag and date ranges (start_at,end_at) - Slug: Auto-generated from month name (e.g.,
january-2026) - Access: Viewable by all users via
/list/{slug}route
Create monthly lists for a specific year using the Artisan command:
php artisan games:lists:create-monthly --year=2026This creates 12 lists (one for each month) with:
- Start date: First day of the month
- End date: Last day of the month
- Auto-generated unique slugs
- Public and active flags set
- Homepage: The active monthly list (within current date range) is displayed as "Featured Games"
- Monthly Releases Page: Full list view at
/monthly-releases - Public Slug View: Accessible at
/list/{slug}for any active/public list
- Lists are created by admin user (user_id = 1)
- Games are added manually by admin or via seeders
- Lists can be activated/deactivated via
is_activeflag - Date ranges control when lists appear on the homepage
The homepage features seasonal event banners displayed at the top of the page, above the Featured Games section.
Location: Place banner images in public/images/ directory
Recommended Sizes:
- Aspect Ratio: 16:9 (rectangular)
- Two Banners Side-by-Side:
- Minimum: 1200px × 675px
- Optimal: 1600px × 900px
- Maximum: 1920px × 1080px (Full HD)
- Single Banner (Full Width):
- Optimal: 1920px × 1080px (Full HD)
File Format: JPG or WebP (optimized for web, < 500KB per image recommended)
Usage: Update banner data in resources/views/homepage/index.blade.php:
<x-seasonal-banners :banners="[
[
'image' => '/images/seasonal-event-1.jpg',
'link' => route('monthly-releases'),
'title' => 'January Releases',
'description' => 'Discover the best games releasing this month',
'alt' => 'January Releases Banner'
],
[
'image' => '/images/seasonal-event-2.jpg',
'link' => route('upcoming'),
'title' => 'Upcoming Games',
'description' => 'See what\'s coming soon',
'alt' => 'Upcoming Games Banner'
]
]" />Layout Behavior:
- 2 Banners: Displayed side-by-side on desktop, stacked on mobile
- 1 Banner: Spans full width on all screen sizes
- Responsive: Automatically adapts to screen size
Note: For retina/high-DPI displays, use 2x resolution (e.g., 1920px × 1080px for standard, 3840px × 2160px for retina).
Games can have multiple release dates per platform, each with a different status (e.g., Early Access, Full Release, Advanced Access).
- Detailed Release Information: See all release dates for each platform, not just the earliest
- Status Badges: Color-coded status indicators show the type of release:
- 🟢 Full Release - The official 1.0 release
- 🟣 Advanced Access - Early access for pre-orders or special editions
- 🔵 Early Access - Public testing/beta release
- 🟡 Alpha / 🟠 Beta - Development builds
- 🔴 Cancelled - Cancelled releases
- 📱 Digital Comp. - Backward compatible digital releases
- ⚡ Next-Gen Patch - Performance optimization updates
- Platform Colors: Each platform group has its own color (PlayStation = Blue, Xbox = Green, Nintendo = Red, PC = Gray)
- Expandable View: Click a platform to see all its release dates when there are multiple
Release date statuses are fetched from IGDB and stored locally for better performance:
php artisan igdb:sync-release-date-statuses
This command:
- Fetches all release date status types from IGDB
- Stores them in the
release_date_statusestable with abbreviations - Caches the data for fast lookups
- Should be run once during setup (statuses rarely change)
On the game details page, release dates are grouped by platform and show:
- Platform name with colored border
- Earliest release date prominently displayed
- Badge showing count of additional releases (if any)
- Expandable list showing all releases with dates and status badges
Example:
PC 15/10/2025 [+2]
• 15/10/2025 [Adv. Access]
• 30/10/2025 [Full Release]
• 15/11/2025 [Next-Gen Patch]