lobby now run in filament

This commit is contained in:
2025-09-03 21:23:25 +02:00
parent 3abe1244a0
commit 6e212db8e1
16 changed files with 314 additions and 79 deletions

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\User\Pages;
use Filament\Pages\Page;
class Lobby extends Page
{
protected static ?string $navigationIcon = 'heroicon-o-home';
protected static string $view = 'filament.user.pages.lobby';
}

View File

@@ -0,0 +1,59 @@
<?php
namespace App\Providers\Filament;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
class UserPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->id('user')
->path('user')
->login()
->colors([
'primary' => Color::Green, // Neon green accents
])
->discoverResources(in: app_path('Filament/User/Resources'), for: 'App\\Filament\\User\\Resources')
->discoverPages(in: app_path('Filament/User/Pages'), for: 'App\\Filament\\User\\Pages')
->pages([
Pages\Dashboard::class, # Lobby as dashboard
])
->discoverWidgets(in: app_path('Filament/User/Widgets'), for: 'App\\Filament\\User\\Widgets')
->widgets([
Widgets\AccountWidget::class,
])
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class,
])
->navigationGroups([
'Casino' # Group for games, deposits, transactions
]);
}
}

View File

@@ -3,4 +3,6 @@
return [
App\Providers\AppServiceProvider::class,
App\Providers\Filament\AdminPanelProvider::class,
App\Providers\Filament\UserPanelProvider::class,
];

52
package-lock.json generated
View File

@@ -6,6 +6,7 @@
"": {
"devDependencies": {
"@tailwindcss/forms": "^0.5.2",
"@tailwindcss/typography": "^0.5.16",
"@tailwindcss/vite": "^4.0.0",
"alpinejs": "^3.4.2",
"autoprefixer": "^10.4.2",
@@ -1271,6 +1272,36 @@
"node": ">= 10"
}
},
"node_modules/@tailwindcss/typography": {
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
"integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
"dev": true,
"license": "MIT",
"dependencies": {
"lodash.castarray": "^4.4.0",
"lodash.isplainobject": "^4.0.6",
"lodash.merge": "^4.6.2",
"postcss-selector-parser": "6.0.10"
},
"peerDependencies": {
"tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
}
},
"node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
"version": "6.0.10",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@tailwindcss/vite": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.12.tgz",
@@ -2663,6 +2694,27 @@
"dev": true,
"license": "MIT"
},
"node_modules/lodash.castarray": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
"integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true,
"license": "MIT"
},
"node_modules/lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",

View File

@@ -8,6 +8,7 @@
},
"devDependencies": {
"@tailwindcss/forms": "^0.5.2",
"@tailwindcss/typography": "^0.5.16",
"@tailwindcss/vite": "^4.0.0",
"alpinejs": "^3.4.2",
"autoprefixer": "^10.4.2",

View File

@@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ $title ?? 'Skunk Lounge' }}</title>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Arial&display=swap" rel="stylesheet">
<!-- Bootstrap (for grid/responsiveness) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
<!-- Tailwind CSS -->
@vite('resources/css/app.css')
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
</head>
<body class="bg-dark text-white font-sans antialiased">
<!-- Top Bar -->
<header class="bg-gray_900 shadow-neon p-4 fixed top-0 left-0 right-0 z-50">
<div class="container mx-auto flex justify-between items-center">
<a href="/lobby" class="text-2xl font-bold text-neon_green text-glow">Skunk Lounge</a>
<div class="flex items-center">
<span class="mr-4 text-lg">Balance: ${{ auth()->user()->balance ?? 0 }}</span>
<a href="/deposits" class="btn btn-neon">Deposit</a>
</div>
</div>
</header>
<!-- Left Sidebar Menu -->
<nav class="fixed top-16 left-0 bottom-0 w-64 bg-gray_900 p-4 shadow-neon z-40 overflow-y-auto">
<div class="mb-4">
<!-- Logo -->
<img src="{{ asset('images/logo.png') }}" alt="Logo" class="w-full mb-4"> <!-- Add logo to public/images if needed -->
</div>
<ul>
<li><a href="/lobby" class="block py-2 px-4 hover:bg-gray_800 rounded text-white hover:text-neon_green text-glow">Lobby</a></li>
<li><a href="/profile" class="block py-2 px-4 hover:bg-gray_800 rounded text-white hover:text-neon_green text-glow">Profile</a></li>
<li><a href="/deposits" class="block py-2 px-4 hover:bg-gray_800 rounded text-white hover:text-neon_green text-glow">Deposits</a></li>
<li><a href="/transactions" class="block py-2 px-4 hover:bg-gray_800 rounded text-white hover:text-neon_green text-glow">Transactions</a></li>
<li><a href="/vip" class="block py-2 px-4 hover:bg-gray_800 rounded text-white hover:text-neon_green text-glow">VIP</a></li>
<li><a href="/about" class="block py-2 px-4 hover:bg-gray_800 rounded text-white hover:text-neon_green text-glow">About Us</a></li>
</ul>
</nav>
<!-- Main Content -->
<main class="ml-64 pt-16 p-4 min-h-screen">
{{ $slot }}
</main>
<!-- Footer -->
<footer class="bg-gray_900 p-4 text-center text-gray-500">
Fake casino for entertainment only. No real money.
</footer>
</body>
</html>

View File

@@ -1,37 +1,22 @@
<div class="container mx-auto mt-4 bg-gray-900 text-white p-4 rounded shadow-lg">
<h1 class="text-2xl font-bold mb-4 glow">Skunk Lounge Lobby</h1>
<div class="flex justify-between mb-4">
<span class="text-lg">Balance: ${{ auth()->user()->balance }}</span>
<div>
@auth
<form method="POST" action="{{ route('logout') }}" class="inline">
@csrf
<button type="submit" class="btn-neon">Logout</button>
</form>
@if(auth()->user()->role === 'admin')
<a href="/admin" class="btn-neon ml-2">Admin</a>
@endif
@else
<a href="{{ route('login') }}" class="btn-neon">Login</a>
<a href="{{ route('register') }}" class="btn-neon ml-2">Register</a>
@endauth
</div>
</div>
<x-layout title="Lobby">
<div class="container mx-auto mt-4">
<h1 class="text-2xl font-bold mb-4 text-neon_green text-glow">Casino Lobby</h1>
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="card bg-gray-800 p-4 rounded shadow-neon">
<div class="card bg-gray_800 p-4 rounded shadow-neon">
<h3 class="text-lg mb-2">Slots</h3>
<p>Pragmatic-style reels and animations.</p>
<a href="/games/slots" class="btn-neon mt-2">Play</a>
<a href="/games/slots" class="btn btn-neon mt-2">Play</a>
</div>
<div class="card bg-gray-800 p-4 rounded shadow-neon">
<div class="card bg-gray_800 p-4 rounded shadow-neon">
<h3 class="text-lg mb-2">Plinko</h3>
<p>Physics-based drop with multipliers.</p>
<a href="/games/plinko" class="btn-neon mt-2">Play</a>
<a href="/games/plinko" class="btn btn-neon mt-2">Play</a>
</div>
<div class="card bg-gray-800 p-4 rounded shadow-neon">
<div class="card bg-gray_800 p-4 rounded shadow-neon">
<h3 class="text-lg mb-2">Wheel Spin</h3>
<p>Fortune wheel with prizes.</p>
<a href="/games/wheel" class="btn-neon mt-2">Play</a>
<a href="/games/wheel" class="btn btn-neon mt-2">Play</a>
</div>
</div>
</div>
</x-layout>

View File

@@ -0,0 +1,3 @@
<x-filament-panels::page>
</x-filament-panels::page>

View File

@@ -1,36 +1,58 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<title>{{ $title ?? 'Skunk Lounge' }}</title>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Arial&display=swap" rel="stylesheet">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
<!-- Scripts -->
@vite(['resources/css/app.css', 'resources/js/app.js'])
<script src="{{ asset('js/app.js') }}" defer></script>
</head>
<body class="font-sans antialiased">
<div class="min-h-screen bg-gray-100">
@include('layouts.navigation')
<!-- Page Heading -->
@isset($header)
<header class="bg-white shadow">
<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
{{ $header }}
<body class="bg-dark text-white font-sans antialiased">
<!-- Top Bar -->
<header class="bg-gray-900 shadow-neon p-4 fixed top-0 left-0 right-0 z-50">
<div class="container mx-auto flex justify-between items-center">
<a href="/lobby" class="text-2xl font-bold glow">Skunk Lounge</a>
<div class="flex items-center">
<span class="mr-4">Balance: ${{ auth()->user()->balance ?? 0 }}</span>
<a href="/deposits" class="btn-neon">Deposit</a>
</div>
</div>
</header>
@endisset
<!-- Page Content -->
<main>
<!-- Left Sidebar Menu -->
<nav class="fixed top-16 left-0 bottom-0 w-64 bg-gray-900 p-4 shadow-neon z-40 overflow-y-auto">
<div class="mb-4">
<img src="{{ asset('images/logo.png') }}" alt="Logo" class="w-full mb-4"> <!-- Add logo asset if needed -->
</div>
<ul>
<li><a href="/lobby" class="block py-2 px-4 hover:bg-gray-800 rounded glow">Lobby</a></li>
<li><a href="/profile" class="block py-2 px-4 hover:bg-gray-800 rounded glow">Profile</a></li>
<li><a href="/deposits" class="block py-2 px-4 hover:bg-gray-800 rounded glow">Deposits</a></li>
<li><a href="/transactions" class="block py-2 px-4 hover:bg-gray-800 rounded glow">Transactions</a></li>
<li><a href="/vip" class="block py-2 px-4 hover:bg-gray-800 rounded glow">VIP</a></li>
<li><a href="/about" class="block py-2 px-4 hover:bg-gray-800 rounded glow">About Us</a></li>
</ul>
</nav>
<!-- Main Content -->
<main class="ml-64 pt-16 p-4 min-h-screen">
{{ $slot }}
</main>
</div>
<!-- Footer -->
<footer class="bg-gray-900 p-4 text-center text-gray-500">
Fake casino for entertainment only. No real money.
</footer>
</body>
</html>

View File

@@ -0,0 +1,4 @@
<x-layout title="About Us">
<h1 class="text-2xl font-bold mb-4 glow">About Us</h1>
<p>Skunk Lounge is a fake casino for entertainment only. No real money involved.</p>
</x-layout>

View File

@@ -0,0 +1,4 @@
<x-layout title="Deposits">
<h1 class="text-2xl font-bold mb-4 glow">Deposits</h1>
<p>Claim promo codes for fake currency. Claim history below. (Coming soon)</p>
</x-layout>

View File

@@ -0,0 +1,4 @@
<x-layout title="Profile">
<h1 class="text-2xl font-bold mb-4 glow">Profile</h1>
<p>Change password, profile picture, email, add 2FA, etc. (Coming soon)</p>
</x-layout>

View File

@@ -0,0 +1,4 @@
<x-layout title="Transactions">
<h1 class="text-2xl font-bold mb-4 glow">Transactions</h1>
<p>View deposits, withdrawals, wins/losses. (Coming soon)</p>
</x-layout>

View File

@@ -0,0 +1,4 @@
<x-layout title="VIP">
<h1 class="text-2xl font-bold mb-4 glow">VIP</h1>
<p>Subscribe with casino money for VIP status. (Coming soon)</p>
</x-layout>

View File

@@ -20,6 +20,11 @@ Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
Route::get('/profile', function () { return view('pages.profile'); })->name('profile');
Route::get('/deposits', function () { return view('pages.deposits'); })->name('deposits');
Route::get('/transactions', function () { return view('pages.transactions'); })->name('transactions');
Route::get('/vip', function () { return view('pages.vip'); })->name('vip');
Route::get('/about', function () { return view('pages.about'); })->name('about');
});
require __DIR__.'/auth.php';

View File

@@ -1,21 +1,34 @@
import defaultTheme from 'tailwindcss/defaultTheme';
import forms from '@tailwindcss/forms';
/** @type {import('tailwindcss').Config} */
export default {
module.exports = {
content: [
'./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
'./storage/framework/views/*.php',
'./resources/views/**/*.blade.php',
'./resources/**/*.blade.php',
'./vendor/filament/**/*.blade.php',
],
theme: {
extend: {
fontFamily: {
sans: ['Figtree', ...defaultTheme.fontFamily.sans],
colors: {
dark: '#111',
neon_green: '#00ff00',
neon_pink: '#ff00de',
gray_800: '#1f2937',
gray_900: '#111827',
},
boxShadow: {
neon: '0 0 15px rgba(0, 255, 0, 0.5)',
},
textShadow: {
glow: '0 0 10px rgba(0, 255, 0, 0.7)',
},
},
},
plugins: [forms],
plugins: [
require('@tailwindcss/forms'),
require('@tailwindcss/typography'),
function ({ addUtilities }) {
addUtilities({
'.text-glow': {
textShadow: '0 0 10px rgba(0, 255, 0, 0.7)',
},
});
},
],
};