// ── Global User State ── var currentUser = null; // ── App Init ── document.addEventListener('DOMContentLoaded', async () => { // Auth-Check: Eingeloggt? var user = await apiMe(); if (!user) { await navigateTo('login', {}, { replace: true }); return; } currentUser = user; loadClaudeStatus(); const { page, id } = parseHash(); var target = page === 'login' ? 'dashboard' : page; await navigateTo(target, { id }, { replace: true }); }); async function loadClaudeStatus() { const statusBar = document.getElementById('claudeStatusBar'); if (!statusBar) return; // Schließen-Button const closeBtn = statusBar.querySelector('.status-close'); if (closeBtn) { closeBtn.addEventListener('click', () => { statusBar.hidden = true; }); } try { const res = await fetch('https://status.claude.com/api/v2/status.json'); if (!res.ok) return; const data = await res.json(); const indicator = data.status?.indicator || 'none'; const description = data.status?.description || ''; if (indicator === 'none') return; statusBar.classList.add(`status-${indicator}`); statusBar.querySelector('.status-text').textContent = description; statusBar.hidden = false; } catch { // Status-Abruf fehlgeschlagen – still ignorieren } } // Browser Zurück/Vor-Button window.addEventListener('popstate', async (e) => { var page, id; if (e.state && e.state.page) { page = e.state.page; id = e.state.params ? e.state.params.id : null; } else { const parsed = parseHash(); page = parsed.page; id = parsed.id; } // Login-Seite immer erlauben, alles andere nur wenn eingeloggt if (page !== 'login') { var user = await apiMe(); if (!user) { await navigateTo('login', {}, { replace: true }); return; } } await navigateTo(page, { id }, { replace: true }); });