v1.1: Rebrand Hinterstein Immobilien + echtes Auth-System

- Rebrand: Kunden-Logo, Joseph-Hinterstein-Portrait, Kontakt-Banner, Texte
- Login-Pflicht auf /login (Route-Guard), Gruppen Verwaltung/Mieter
- Mieter-Registrierung per einmaligem Registrierungscode
- Benutzerverwaltung als 6. Modul (/benutzer, nur Verwaltung)
- Demo-Zugänge mit Passwort 0815 (j.hinterstein, a.berger, m.wolf)
- Mail-Server-API: Token-Auth (/send, X-Api-Token), Mail-Stack live auf Server
- Store-Key hinterstein-mieterportal-v2, Doku (kimi.md, README) nachgeführt
This commit is contained in:
2026-10-02 12:11:43 +02:00
parent ccfe08ad24
commit fbe033ebd6
22 changed files with 1067 additions and 179 deletions
+25 -4
View File
@@ -1,5 +1,5 @@
import { Routes, Route } from 'react-router'
import { StoreProvider } from './store/store'
import { Routes, Route, Navigate } from 'react-router'
import { StoreProvider, useStore } from './store/store'
import AppLayout from './components/AppLayout'
import Login from './pages/Login'
import Dashboard from './pages/Dashboard'
@@ -7,19 +7,40 @@ import Payments from './pages/Payments'
import Tickets from './pages/Tickets'
import Documents from './pages/Documents'
import Messages from './pages/Messages'
import BenutzerVerwaltung from './pages/BenutzerVerwaltung'
function RequireAuth({ children }: { children: React.ReactElement }) {
const { me } = useStore()
if (!me) return <Navigate to="/login" replace />
return children
}
function LoginGate() {
const { me } = useStore()
if (me) return <Navigate to="/" replace />
return <Login />
}
export default function App() {
return (
<StoreProvider>
<Routes>
<Route path="/login" element={<Login />} />
<Route element={<AppLayout />}>
<Route path="/login" element={<LoginGate />} />
<Route
element={
<RequireAuth>
<AppLayout />
</RequireAuth>
}
>
<Route path="/" element={<Dashboard />} />
<Route path="/mietkonto" element={<Payments />} />
<Route path="/schadensmeldungen" element={<Tickets />} />
<Route path="/dokumente" element={<Documents />} />
<Route path="/nachrichten" element={<Messages />} />
<Route path="/benutzer" element={<BenutzerVerwaltung />} />
</Route>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</StoreProvider>
)