diff --git a/.gitignore b/.gitignore
index 67a03a9..68182b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,10 @@
# unterscheidet sich zwischen Dev-/Live-Umgebung und gehört daher nicht ins Repo)
/hifi/api/config/db.php
+# Einmalpasswort für den Ersteinrichtungs-Assistenten (siehe setup.php.example) -
+# pro Umgebung unterschiedlich und darf nicht öffentlich einsehbar sein
+/hifi/api/config/setup.php
+
# Claude-Code-Tooling (Skills/lokale Einstellungen) - gehört nicht zum Website-Projekt
/hifi/.claude/
/hifi/.agents/
diff --git a/hifi-src/src/App.jsx b/hifi-src/src/App.jsx
index 8a168b7..81c3a9a 100644
--- a/hifi-src/src/App.jsx
+++ b/hifi-src/src/App.jsx
@@ -1,5 +1,6 @@
import { Routes, Route, Navigate } from 'react-router-dom';
import ScrollToTop from './components/ScrollToTop.jsx';
+import SetupGate from './components/SetupGate.jsx';
import PublicLayout from './components/PublicLayout.jsx';
import AdminLayout from './components/AdminLayout.jsx';
import ProtectedRoute from './components/ProtectedRoute.jsx';
@@ -14,6 +15,7 @@ import ContactPage from './pages/public/ContactPage.jsx';
import Impressum from './pages/public/Impressum.jsx';
import Datenschutz from './pages/public/Datenschutz.jsx';
import AGB from './pages/public/AGB.jsx';
+import SetupWizard from './pages/public/SetupWizard.jsx';
import Login from './pages/admin/Login.jsx';
import Dashboard from './pages/admin/Dashboard.jsx';
@@ -37,7 +39,10 @@ export default function App() {
return (
<>
Lädt…
} + + {phase === 'locked' && ( ++ Diese Seite wurde bereits vollständig eingerichtet. Der Assistent ist deshalb gesperrt. +
+ + Zum Login + ++ Die Datenbankverbindung funktioniert. Jetzt legen wir die benötigten Tabellen an. +
+ {migrateActions && ( +{error}
} + ++ Die Ersteinrichtung ist abgeschlossen. Du kannst dich jetzt mit deinem neuen Admin-Account anmelden. +
+ + Zum Login + +