+ {{-- Dekorativer Hintergrund-Glow --}}
+
+
+ {{-- Kopfleiste --}}
+
+
+ {{-- Hero --}}
+
+ {{ __('KI-Assistent') }}
+
+
+ {{ __('EINUNDZWANZIG mit Claude verbinden') }}
+
+
+
+ {{ __('Verwalte deine Meetups, Termine und Kurse ganz einfach per Chat – mit der KI von claude.ai. Ganz ohne Technikwissen.') }}
+
+
+
+
+ {{ __('Einrichtung starten') }}
+
+
+ {{ __('Zur API-Dokumentation') }}
+
+
+
+
+ {{-- Was ist das? --}}
+
+
+
+
+
+
+
+
{{ __('Was ist der EINUNDZWANZIG-Connector?') }}
+
+ {{ __('Ein Connector verbindet die KI claude.ai mit dem EINUNDZWANZIG-Portal. Du schreibst Claude einfach in normaler Sprache, was du möchtest – zum Beispiel »Füge mein Meetup hinzu« – und Claude erledigt es für dich im Portal. Alles geschieht in deinem Namen und nur mit deiner ausdrücklichen Erlaubnis.') }}
+
+
+
+
+
+
+ {{-- Voraussetzungen --}}
+
+ {{ __('Das brauchst du') }}
+
+ @foreach ([
+ ['icon' => 'user-circle', 'text' => __('Ein kostenloses Konto bei claude.ai')],
+ ['icon' => 'identification', 'text' => __('Ein Konto im EINUNDZWANZIG-Portal')],
+ ['icon' => 'clock', 'text' => __('Etwa 5 Minuten Zeit')],
+ ] as $req)
+
+
+
+
+
{{ $req['text'] }}
+
+ @endforeach
+
+
+
+ {{-- Connector-Adresse --}}
+
+
+
+
+ {{ __('Die Adresse des Connectors') }}
+
+
+ {{ __('Diese Adresse brauchst du in Schritt 2. Du kannst sie hier kopieren:') }}
+
+
+ {{ $this->mcpUrl }}
+
+ {{ __('Adresse kopieren') }}
+
+
+
+
+
+ {{-- Schritt-für-Schritt --}}
+
+
+ {{-- Beispiele --}}
+
+
+
{{ __('Das kannst du Claude sagen') }}
+
+ {{ __('Sprich oder schreibe mit Claude wie mit einem Menschen. Hier ein paar Beispiele:') }}
+
+
+ @foreach ($this->examples as $example)
+
+
+ „{{ __($example) }}"
+
+ @endforeach
+
+
+
+
+ {{-- Sicherheit --}}
+
+
+ {{ __('Sicher und in deinem Namen') }}
+
+ {{ __('Claude handelt ausschließlich mit deiner Erlaubnis und im Kontext deines eigenen Kontos. Du kannst die Verbindung jederzeit in claude.ai unter »Connectors« wieder trennen.') }}
+
+
+
+
+ {{-- Für Entwickler --}}
+
+
+
+
+
+
+
+
{{ __('Du bist Entwickler?') }}
+
+ {{ __('Du möchtest die Daten direkt über die Schnittstelle nutzen? In der API-Dokumentation findest du alle Endpunkte – inklusive Authentifizierung per persönlichem Token.') }}
+
+
+
+
+ {{ __('API-Dokumentation öffnen') }}
+
+
+
+
diff --git a/routes/web.php b/routes/web.php
index 1ab4af1..3f4a440 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -33,6 +33,9 @@ Route::get('/img-public/{path}', ImageController::class)
// Welcome page route using Volt component
Route::livewire('/welcome', 'welcome')->name('welcome');
+// Public guide explaining the MCP/AI connector and the claude.ai setup
+Route::livewire('/ki-assistent', 'ki-assistent')->name('ki-assistent');
+
// Stream calendar route to download meetup calendar as ICS file
Route::get('stream-calendar', DownloadMeetupCalendar::class)
->name('ics')
diff --git a/tests/Feature/Smoke/PublicRoutesTest.php b/tests/Feature/Smoke/PublicRoutesTest.php
index 07c21e5..ea85003 100644
--- a/tests/Feature/Smoke/PublicRoutesTest.php
+++ b/tests/Feature/Smoke/PublicRoutesTest.php
@@ -24,6 +24,7 @@ it('returns a successful response for the listed public route', function (string
$this->get($path)->assertSuccessful();
})->with([
'welcome' => '/welcome',
+ 'ki-assistent' => '/ki-assistent',
'login' => '/login',
'forgot password' => '/forgot-password',
'meetups index' => '/de/meetups',
@@ -41,6 +42,17 @@ it('redirects / to /welcome', function () {
$this->get('/')->assertRedirect('/welcome');
});
+it('renders the KI-Assistent guide with the connector URL and all setup screenshots', function () {
+ $response = $this->get('/ki-assistent');
+
+ $response->assertSuccessful()
+ ->assertSee(__('EINUNDZWANZIG mit Claude verbinden'))
+ ->assertSee(url('/mcp'))
+ ->assertSee('storage/screenshots/Screenshot_20260608_084046.png')
+ ->assertSee('storage/screenshots/Screenshot_20260608_123314.png')
+ ->assertSee(route('scramble.docs.ui'));
+});
+
it('returns 404 for /register because public registration is disabled', function () {
$this->get('/register')->assertNotFound();
});