96 lines
4.9 KiB
Markdown
96 lines
4.9 KiB
Markdown
# GUI, Informationsarchitektur, Admin & Navigation (Abnahme 2026-04-05)
|
||
|
||
> **Zweck:** Einheitliche Referenz für Menschen und Code-Agents (Cursor, Claude Code, …).
|
||
> **Gitea:** Teilaspekte zu [#30 Responsive UI](http://192.168.2.144:3000/Lars/mitai-jinkendo/issues/30); Admin-Layout kein separates Issue.
|
||
> **Branch-Realität:** Umsetzung auf `develop`, Deploy nach `main` wie üblich.
|
||
|
||
---
|
||
|
||
## Kurzüberblick
|
||
|
||
| Thema | Kern |
|
||
|-------|------|
|
||
| **Admin** | Eigener Bereich mit Shell wie KI-Analyse: Gruppen-Chips (mobil) / Sidebar (Desktop), Hub `/admin/g/:groupId`, Route-Guard `RequireAdmin` |
|
||
| **Ziele** | Eigener Hauptnav-Punkt `/goals`; nicht mehr primär unter Analyse; Dashboard + Einstellungen als Sekundär-Einstiege |
|
||
| **Einstellungen / Profil** | Nur **aktives** Profil inline; E-Mail-Self-Service; neue Profile nur **Admin → Benutzerverwaltung** |
|
||
| **KI-Analyse** | Neue Ergebnis-Karte im **rechten** Spalt der `analysis-split`, damit Kategorie-Nav nicht verdrängt wird |
|
||
| **PWA / iPhone** | Bottom-Nav: Safe Area auf **`.bottom-nav`**, kein Clipping durch `overflow-y` + `safe-area` auf Items |
|
||
| **Deploy Prod** | Workflow: `git fetch` + `git reset --hard origin/<branch>` statt `pull` bei schmutziger `package-lock` |
|
||
| **#14 Icon Picker** | Erledigt (`EmojiIconPicker`); Gitea geschlossen |
|
||
|
||
---
|
||
|
||
## Dateien (Single Source of Truth im Code)
|
||
|
||
| Bereich | Pfade |
|
||
|---------|--------|
|
||
| Hauptnavigation | `frontend/src/config/appNav.js` (`getMainNavItems`) |
|
||
| Active-State Bottom + Sidebar | `frontend/src/App.jsx` (`navItemActive`), `frontend/src/components/DesktopSidebar.jsx` |
|
||
| Admin Shell & Routing | `frontend/src/layouts/AdminShell.jsx`, `frontend/src/layouts/RequireAdmin.jsx`, `frontend/src/config/adminNav.js` (`ADMIN_GROUPS`, Hubs) |
|
||
| Admin-Seiten | `frontend/src/pages/AdminHomePage.jsx`, `AdminGroupHubPage.jsx`, `AdminUsersPage.jsx`, `AdminSystemPage.jsx`, … |
|
||
| Einstellungen Profil | `frontend/src/pages/SettingsPage.jsx`, `.settings-page__field` in `app.css` |
|
||
| KI-Analyse Layout | `frontend/src/pages/Analysis.jsx` + `.analysis-split*` in `app.css` |
|
||
| Admin-Zugriff verweigert | `frontend/src/pages/Dashboard.jsx` (`adminDenied` State aus `location.state`) |
|
||
| Bottom-Nav / Safe Area | `frontend/src/app.css` (`--nav-h`, `--nav-pad-top`, `.bottom-nav`, `.app-main` padding-bottom) |
|
||
| Deploy | `.gitea/workflows/deploy-prod.yml`, `deploy-dev.yml` |
|
||
| Backend Profil E-Mail | `backend/models.py` (`ProfileUpdate.email`), `backend/routers/profiles.py` (`update_profile` + Eindeutigkeit / Verifikation) |
|
||
| .gitignore Fix | `frontend/package-lock.json` eigene Zeile (war mit `settings.local` verklebt) |
|
||
|
||
---
|
||
|
||
## Navigation: Reihenfolge (Mobile & Desktop)
|
||
|
||
Übersicht → Erfassen → Verlauf → **Ziele** → Analyse → Einstellungen → **[Admin]**
|
||
|
||
- **Ziele:** `NavLink` mit `end: true` (exakt `/goals`).
|
||
- **Admin:** nur wenn `session.role === 'admin'`; Highlight bei `pathname.startsWith('/admin')`.
|
||
|
||
---
|
||
|
||
## Admin-Bereich (IA)
|
||
|
||
1. **Shell** nutzt dieselben UI-Klassen wie die Analyse: `.analysis-split`, `.analysis-split__nav-wrap`, `.analysis-split__main`.
|
||
2. **Nur Gruppen** in der Shell-Nav (inkl. Zähler pro Gruppe).
|
||
3. Konkrete Seiten: Karten auf **`/admin/g/:groupId`** (z. B. `features`, `prompts`, `system`).
|
||
4. **KI-Prompts** eigene Gruppe; **Basiseinstellungen** = SMTP + Placeholder-Export (`/admin/system`).
|
||
5. Kein Admin-Block mehr in den **Einstellungen** (nur Admin-Hinweis-Link zu Benutzerverwaltung).
|
||
|
||
---
|
||
|
||
## Backend-Hinweis Profil
|
||
|
||
`PUT /api/profile` akzeptiert `email`; Änderung setzt `email_verified` u. a. zurück (siehe `profiles.py`).
|
||
|
||
---
|
||
|
||
## Gitea / Issues (manuell oder `scripts/gitea/gitea_api.py`)
|
||
|
||
| Issue | Empfehlung |
|
||
|-------|------------|
|
||
| **#30** | Offen lassen oder TEILWEISE: Desktop-Sidebar existiert; ergänzt um Admin-Shell, scrollable Bottom-Nav, iOS Safe-Area. Kommentar mit Link **auf dieses Dokument**. |
|
||
| **#14** | Bereits geschlossen (Icon-Picker). |
|
||
| **Kein eigenes Admin-IA-Issue** | Optional: Sub-Issue „Admin Shell P7“ schließen oder mit #30 verknüpfen. |
|
||
|
||
Schließe **kein** großes #30 ohne Abnahme „volle Responsive-Spec“ – diese Session liefert nur einen **abgegrenzten** GUI-Stand.
|
||
|
||
---
|
||
|
||
## Checks für Folge-Agents
|
||
|
||
1. `frontend`: `npm run build`
|
||
2. Admin-Route als Nicht-Admin: Redirect `/`, Dashboard-Hinweis
|
||
3. iPhone PWA: Bottom-Nav nicht beschnitten; Content nicht hinter Home-Indicator
|
||
4. `develop` → nach Abnahme `main` + Deploy (siehe aktualisierte Workflows)
|
||
|
||
---
|
||
|
||
## Changelog-Kurz
|
||
|
||
- Admin: Shell, Hub-Routen, `RequireAdmin`, entfernt aus Settings.
|
||
- Ziele: `appNav`, Dashboard, Settings, Analyse nur noch Hinweis-Link.
|
||
- Settings: Mein Profil, E-Mail, keine Profilliste.
|
||
- Analyse: `newResult` in `analysis-split__main`.
|
||
- CSS: Bottom-Nav scroll + Safe Area + `--nav-pad-top`.
|
||
- Deploy: `reset --hard` auf Runner-Arbeitskopie.
|
||
- Review-Liste: #14 erledigt (siehe `REVIEW_OPEN_ISSUES_2026-04-04.md`).
|