exists('web.'.$theme)) { return view('web.'.$theme); } // Fallback to the default home view return view('web.home'); })->name('home'); // Willkommensseite Route::get('/welcome', function () { return view('web.welcome'); })->name('welcome'); // Weitere gemeinsame Webseiten hier... Route::get('/about', function () { return view('web.about'); })->name('about'); Route::get('/ecosystem', function () { return redirect('/partner', 301); })->name('ecosystem'); Route::get('/immobilien', function () { return view('web.immobilien'); })->name('immobilien'); Route::get('/netzwerk', function () { return view('web.netzwerk'); })->name('netzwerk'); Route::get('/interior', function () { return redirect('/netzwerk', 301); })->name('interior'); Route::get('/immobilien/{slug}', function (string $slug) { $cmsProject = CmsProject::query()->published()->where('slug', $slug)->first(); if ($cmsProject) { $project = $cmsProject->toFrontendArray(); return view('web.immobilien-show', compact('project')); } $theme = config('app.theme', 'b2in'); $immobilienProjects = cms_theme_section('immobilien_projects', $theme); $project = is_array($immobilienProjects) ? data_get($immobilienProjects, "projects.{$slug}") : null; abort_unless($project, 404); return view('web.immobilien-show', compact('project')); })->name('immobilien.show'); Route::get('/partner', function () { return redirect('/netzwerk', 301); })->name('partner'); Route::get('/magazin', function () { return view('web.magazin'); })->name('magazin'); Route::get('/magazin/{id}', function ($id) { return view('web.magazin-detail', compact('id')); })->name('magazin.detail'); Route::get('/contact', function () { return view('web.contact'); })->name('contact'); Route::get('/service', function () { return view('web.service'); })->name('service'); Route::get('/portfolio', function () { return view('web.portfolio'); })->name('portfolio'); Route::get('/faq', function () { return view('web.faq'); })->name('faq'); // Rechtliche Seiten Route::get('/impressum', function () { return view('web.impressum'); })->name('impressum'); Route::get('/privacy', function () { return view('web.privacy'); })->name('privacy'); Route::get('/terms', function () { return view('web.terms'); })->name('terms'); Route::get('/cookie-policy', function () { return view('web.cookie-policy'); })->name('cookie-policy'); // Theme Demo Route Route::get('/theme-demo', function () { return view('web.theme-demo'); })->name('theme-demo'); // Dev: Sitemap & Archiv-Versionen Route::prefix('dev')->group(function () { Route::get('/sitemap', fn () => view('web.dev.sitemap'))->name('dev.sitemap'); Route::get('/immobilien-v1', fn () => view('web.dev.immobilien-v1'))->name('dev.immobilien-v1'); Route::get('/immobilien-azizi', function () { $content = json_decode( file_get_contents(resource_path('lang/de/immobilien-azizi.json')), true, 512, JSON_THROW_ON_ERROR, ); return view('web.dev.immobilien-azizi', compact('content')); })->name('dev.immobilien-azizi'); Route::get('/immobilien-azizi/{slug}', function (string $slug) { $content = json_decode( file_get_contents(resource_path('lang/de/immobilien-azizi.json')), true, 512, JSON_THROW_ON_ERROR, ); $project = collect($content['projects'] ?? [])->firstWhere('slug', $slug); abort_unless($project, 404); return view('web.dev.immobilien-azizi-show', compact('content', 'project')); })->name('dev.immobilien-azizi.show'); Route::get('/interior-v1', fn () => view('web.dev.interior-v1'))->name('dev.interior-v1'); Route::get('/partner-v1', fn () => view('web.dev.partner-v1'))->name('dev.partner-v1'); }); // Pfad-basierte Theme-Routen für lokale Entwicklung wurden entfernt // Die Themensauswahl wird nun über den ThemeServiceProvider gesteuert (Domain oder ?theme=... GET-Parameter) Route::get('/partner/invitation/expired/{token}', function (string $token) { $invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail(); return view('partner.invitation-expired', compact('invitation')); })->name('partner.invitation.expired'); Route::get('/partner/invitation/used/{token}', function (string $token) { $invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail(); return view('partner.invitation-used', compact('invitation')); })->name('partner.invitation.used'); Volt::route('/partner/invitation/{token}', 'partner.invitation-accept') ->name('partner.invitation.accept'); Volt::route('/partner/create-account', 'partner.create-account') ->name('partner.create.account'); // Öffentliche Registrierung per QR-/Code (Landing, code-check) Volt::route('/reg/{role}', 'reg.landing') ->name('registration.landing'); Volt::route('/registration/thank-you', 'reg.thank-you') ->name('registration.thank-you'); // Partner Setup Wizard & Daten Route::middleware('auth')->group(function () { Volt::route('/partner/setup', 'partner.setup-wizard') ->name('partner.setup.wizard'); }); // Cabinet Quick-Status – key-geschützte Mini-App für schnellen Statuswechsel Route::get('/info/status', QuickStatus::class)->name('cabinet.quick-status'); // Authentifizierungs-Routen werden in domains.php eingebunden // require __DIR__ . '/auth.php';