Files
obs-config/webapp/routes/web.php
Jakub Zych 4ceff4015a webapp: add /onboard wizard — web equivalent of php artisan rig:loading
Browser-based Project Loading manifest builder at http://127.0.0.1:1118/onboard.
Reuses the existing terminal/CRT styling (hud.css palette + scanlines +
phosphor glow) so it doesn't feel like a separate UI:

 - GET  /onboard           — the wizard, seeded from current loading.json
 - GET  /onboard/search?q= — type-ahead Twitch search/categories proxy
 - POST /onboard           — writes storage/data/loading.json, optionally
                              pushes the title + category via TwitchHelix

UX: prompt-line inputs, ↑/↓/Enter on the search dropdown, stepper for the
countdown, ENABLED/DISABLED toggles for camera + microphone, a live
right-pane preview that renders the same lines the loading overlay's
terminal will type. CSRF-exempt POST so the page can submit JSON without
a token round-trip.

Falls back gracefully when TWITCH_CLIENT_ID / TWITCH_TOKEN are absent —
the search is disabled and the manifest still saves locally.
2026-05-21 13:49:19 +02:00

42 lines
1.8 KiB
PHP

<?php
use App\Http\Controllers\AudioController;
use App\Http\Controllers\DataController;
use App\Http\Controllers\MusicCommandController;
use App\Http\Controllers\OnboardController;
use App\Http\Controllers\Overlays\DesktopController;
use App\Http\Controllers\Overlays\GameController;
use App\Http\Controllers\Overlays\GoodbyeController;
use App\Http\Controllers\Overlays\LandingController;
use App\Http\Controllers\Overlays\LoadingController;
use App\Http\Controllers\Overlays\MusicBoxController;
use App\Http\Controllers\Overlays\MusicDaemonController;
use Illuminate\Support\Facades\Route;
Route::view('/', 'index');
Route::get('/landing', [LandingController::class, 'show']);
Route::get('/loading', [LoadingController::class, 'show']);
Route::get('/game', [GameController::class, 'show']);
Route::get('/desktop', [DesktopController::class, 'show']);
Route::get('/goodbye', [GoodbyeController::class, 'show']);
Route::get('/music-daemon', [MusicDaemonController::class, 'show']);
Route::prefix('music-box')->controller(MusicBoxController::class)->group(function () {
Route::get('/', 'box');
Route::get('widget', 'widget');
Route::get('cover', 'cover');
Route::get('nc', 'nc');
});
Route::get('/data/playlist.js', [DataController::class, 'playlist']);
Route::get('/cover.jpg', [DataController::class, 'coverImage']);
Route::get('/track', [AudioController::class, 'stream']);
Route::post('/cmd/{type}', [MusicCommandController::class, 'send'])
->whereIn('type', ['skip', 'prev', 'pause', 'resume']);
Route::get('/onboard', [OnboardController::class, 'show']);
Route::get('/onboard/search', [OnboardController::class, 'search']);
Route::post('/onboard', [OnboardController::class, 'submit']);