diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index ae4f62a..5d004e4 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -21,6 +21,8 @@ export default function App() {
const [health, setHealth] = useState(null)
const [healthError, setHealthError] = useState(null)
const [setup, setSetup] = useState(null)
+ const [setupLoading, setSetupLoading] = useState(true)
+ const [setupError, setSetupError] = useState(null)
const [authMode, setAuthMode] = useState('login')
const [token, setToken] = useState(() => localStorage.getItem(TOKEN_KEY) || '')
const [email, setEmail] = useState('')
@@ -42,13 +44,33 @@ export default function App() {
.then(setHealth)
.catch((err) => setHealthError(err.message))
- fetch('/api/auth/setup-status')
- .then((res) => res.json())
- .then((data) => {
- setSetup(data)
- if (data.registration_open) setAuthMode('register')
- })
- .catch(() => setSetup({ registration_open: false, has_users: true }))
+ async function loadSetupStatus() {
+ setSetupLoading(true)
+ setSetupError(null)
+ try {
+ const res = await fetch('/api/auth/setup-status')
+ const body = await res.json().catch(() => ({}))
+ if (!res.ok) {
+ throw new Error(
+ res.status === 404
+ ? 'Endpoint /api/auth/setup-status nicht gefunden — Backend neu deployen?'
+ : parseError(body, `Setup-Status fehlgeschlagen (HTTP ${res.status})`),
+ )
+ }
+ if (typeof body.registration_open !== 'boolean') {
+ throw new Error('Ungültige Antwort vom Setup-Status — Backend-Version prüfen')
+ }
+ setSetup(body)
+ if (body.registration_open) setAuthMode('register')
+ } catch (err) {
+ setSetup(null)
+ setSetupError(err.message)
+ } finally {
+ setSetupLoading(false)
+ }
+ }
+
+ loadSetupStatus()
}, [])
const loadSession = useCallback(async (activeToken) => {
@@ -155,6 +177,7 @@ export default function App() {
}
const registrationOpen = setup?.registration_open === true
+ const registrationClosedBecauseUsersExist = setup?.has_users === true && !registrationOpen
return (
Prüfe Ersteinrichtung …
+ )} + + {!token && setupError && ( +{setupError}
+ )} + + {!token && registrationClosedBecauseUsersExist && ( +
+ Es existiert bereits mindestens ein Benutzer ({setup.user_count ?? '≥1'}).
+ Registrierung ist nur für die Ersteinrichtung vorgesehen — bitte anmelden.
+ Falls der Admin per KAIRO_BOOTSTRAP_* in der .env angelegt
+ wurde, nutzen Sie diese Zugangsdaten.
+