Admins can toggle maintenance mode from the admin dashboard (new
"Wartung" tab). When active, all non-admin users see a full-page
maintenance screen instead of the app.
- Backend: GET /api/config/service-mode endpoint (authenticated)
- Backend: stores state in app_settings key 'service_mode'
- Frontend: ServiceModeGuard wraps all ProtectedRoutes
- Frontend: ServiceModePage full-screen maintenance UI
- Frontend: ServiceModeTab in admin dashboard with toggle + message
- Admins (dashboard_admin group) always bypass the guard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- fix(auth): guard extractNames() against Authentik sending full name in
given_name field (e.g. "Matthias Hochmeister" + family_name "Hochmeister");
detect by checking given_name ends with family_name suffix, fall through
to name-splitting so Vorname/Nachname display correctly in Profile
- fix(db): add migration 018 to repair broken BEFORE UPDATE triggers on
veranstaltungen and veranstaltung_kategorien; old triggers called
update_updated_at_column() which references NEW.updated_at, but both
tables use aktualisiert_am, causing every category/event edit to fail
- feat(booking): open vehicle booking creation to all authenticated users;
only dashboard_admin / dashboard_moderator can change the Buchungsart
(type select disabled for regular members); edit and cancel still
restricted to WRITE_GROUPS
- feat(vehicles): VehicleDashboardCard now fetches equipment warnings via
equipmentApi.getVehicleWarnings() in parallel and shows an alert when
any vehicle equipment is not einsatzbereit
- fix(ui): add MuiTextField defaultProps (InputLabelProps.shrink=true) and
MuiOutlinedInput notch legend font-size override to theme to eliminate
floating-label / border conflict on click
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>