name('landing'); Route::get('/manifest.webmanifest', function () { return response()->json([ 'name' => Settings::get('company_name'), 'short_name' => Settings::get('company_name'), 'start_url' => '/', 'scope' => '/', 'display' => 'standalone', 'background_color' => '#f3f5fe', 'theme_color' => Settings::accentColor(), 'lang' => 'pl', 'icons' => [ ['src' => asset('pwa-icons/icon-192.png'), 'sizes' => '192x192', 'type' => 'image/png', 'purpose' => 'any'], ['src' => asset('pwa-icons/icon-512.png'), 'sizes' => '512x512', 'type' => 'image/png', 'purpose' => 'any'], ['src' => asset('pwa-icons/icon-192-maskable.png'), 'sizes' => '192x192', 'type' => 'image/png', 'purpose' => 'maskable'], ['src' => asset('pwa-icons/icon-512-maskable.png'), 'sizes' => '512x512', 'type' => 'image/png', 'purpose' => 'maskable'], ], ])->header('Content-Type', 'application/manifest+json'); })->name('manifest'); Route::get('/login', Login::class)->middleware('guest')->name('login'); Route::post('/logout', function () { Auth::logout(); request()->session()->invalidate(); request()->session()->regenerateToken(); return redirect('/'); })->middleware('auth')->name('logout'); Route::middleware(['auth', 'role:client'])->prefix('client')->name('client.')->group(function () { Route::get('/', ClientDashboard::class)->name('dashboard'); Route::get('/new', ClientNewTicket::class)->name('new'); Route::get('/tickets/{ticket}', ClientTicketShow::class)->name('ticket'); }); Route::middleware(['auth', 'role:operator'])->prefix('operator')->name('operator.')->group(function () { Route::get('/', OperatorQueue::class)->name('queue'); Route::get('/new', OperatorNewTicket::class)->name('new'); Route::get('/stats', OperatorStats::class)->name('stats'); Route::get('/tickets/{ticket}', OperatorTicketShow::class)->name('ticket'); // Fired via navigator.sendBeacon on tab/browser close (see the // MONITOR CZASU PRACY widget in ticket-show.blade.php) — a plain // Livewire call can't be relied on to complete once the page is // actually unloading, and sendBeacon needs a normal endpoint to hit. // Excluded from CSRF verification in bootstrap/app.php since a beacon // request can't carry the token header. Route::post('/tickets/{ticket}/stop-timer', function (Ticket $ticket) { $ticket->stopTimer(); return response()->noContent(); })->name('ticket.stop-timer'); }); Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () { Route::get('/', AdminPanel::class)->name('panel'); }); Route::middleware(['auth', 'role:operator,admin'])->prefix('settings')->name('settings.')->group(function () { Route::get('/notifications', NotificationPreferences::class)->name('notifications'); });