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.
42 lines
1.8 KiB
PHP
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']);
|