# 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`).
