Add public token-gated kitchen display for POS devices.
Deploy Ladill POS / deploy (push) Successful in 46s

Kitchen display devices open a full-screen KDS without staff login,
with feed/stream/bump over the device token. Shared kitchen board
logic is extracted so the signed-in Kitchen page stays in sync.
This commit is contained in:
isaacclad
2026-07-15 22:52:28 +00:00
parent c01518b0ee
commit ede4aaa10c
8 changed files with 425 additions and 78 deletions
+18
View File
@@ -19,6 +19,7 @@ use App\Http\Controllers\Pos\TableController;
use App\Http\Controllers\Pos\TicketController;
use App\Http\Controllers\NotificationController;
use App\Http\Controllers\Public\CustomerDisplayController as PublicCustomerDisplayController;
use App\Http\Controllers\Public\KitchenDisplayController as PublicKitchenDisplayController;
use App\Http\Controllers\Public\TableOrderController;
use App\Http\Controllers\WalletBalanceController;
use Illuminate\Support\Facades\Route;
@@ -61,6 +62,23 @@ Route::post('/customer-display/{token}/action', [PublicCustomerDisplayController
->where('token', '[A-Za-z0-9]{32,64}')
->name('pos.customer-display.action');
// Token-gated kitchen display (unattended tablet; no operator chrome).
Route::get('/kitchen-display/{token}', [PublicKitchenDisplayController::class, 'show'])
->where('token', '[A-Za-z0-9]{32,64}')
->name('pos.kitchen-display.show');
Route::get('/kitchen-display/{token}/feed', [PublicKitchenDisplayController::class, 'feed'])
->middleware('throttle:120,1')
->where('token', '[A-Za-z0-9]{32,64}')
->name('pos.kitchen-display.feed');
Route::get('/kitchen-display/{token}/stream', [PublicKitchenDisplayController::class, 'stream'])
->middleware('throttle:60,1')
->where('token', '[A-Za-z0-9]{32,64}')
->name('pos.kitchen-display.stream');
Route::post('/kitchen-display/{token}/lines/{line}/bump', [PublicKitchenDisplayController::class, 'bump'])
->middleware('throttle:120,1')
->where('token', '[A-Za-z0-9]{32,64}')
->name('pos.kitchen-display.bump');
Route::middleware(['auth', 'platform.session'])->group(function () {
Route::get('/wallet/balance', [WalletBalanceController::class, 'balance'])->name('wallet.balance');