From 24f60c0a6d024c4dbeb986757968cbf6a215062c Mon Sep 17 00:00:00 2001 From: Lars Date: Sun, 5 Apr 2026 12:25:28 +0200 Subject: [PATCH] feat: Update documentation for GUI, Admin navigation, and responsive UI integration --- CLAUDE.md | 7 ++ docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md | 95 ++++++++++++++++++++ docs/issues/PHASE_PLAN_RESPONSIVE_UI.md | 6 +- docs/issues/REVIEW_OPEN_ISSUES_2026-04-04.md | 8 +- scripts/gitea/README.md | 1 + scripts/gitea/gitea_api.py | 11 ++- 6 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md diff --git a/CLAUDE.md b/CLAUDE.md index 4945c22..6f9408c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,6 +6,7 @@ > | Architektur-Regeln | `.claude/rules/ARCHITECTURE.md` | > | Coding-Regeln | `.claude/rules/CODING_RULES.md` | > | Lessons Learned | `.claude/rules/LESSONS_LEARNED.md` | +> | **GUI / IA / Admin / Nav / PWA-Leiste** | **`docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md`** | ## Claude Code Verantwortlichkeiten @@ -69,6 +70,8 @@ backend/ frontend/src/ ├── App.jsx # Root, Auth-Gates, Navigation ├── app.css # CSS-Variablen + globale Styles +├── config/ # appNav.js · adminNav.js (Single Source für Main/Admin-Nav) +├── layouts/ # AdminShell · RequireAdmin ├── context/ # AuthContext · ProfileContext ├── pages/ # Alle Screens └── utils/ @@ -90,6 +93,10 @@ frontend/src/ **Branch:** develop **Nächster Schritt:** Frontend Chart Integration → Testing → Prod Deploy v0.9i +### GUI / Informationsarchitektur (Abnahme dieser Iteration, 2026-04-05) + +Admin-Bereich (`AdminShell`, Hub-Routen), Hauptnavigation inkl. **Ziele** (`config/appNav.js`), Einstellungen nur aktives Profil + E-Mail, KI-Analyse Ergebnis in rechter Spalte, **PWA** Bottom-Nav inkl. iOS Safe Area. Zentrale Agent-Doku: **`docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md`**. Responsive-Epic **Gitea #30:** Phasenplan `docs/issues/PHASE_PLAN_RESPONSIVE_UI.md` — **P7 Kern erledigt**, **P8** (Regression/Abnahme) ausstehend; Issue bewusst **nicht** geschlossen. + ### Updates (28.03.2026 - Phase 0c Multi-Layer Architecture Complete) 🆕 #### Phase 0c: Multi-Layer Data Architecture ✅ **COMPLETED** diff --git a/docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md b/docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md new file mode 100644 index 0000000..c96fccf --- /dev/null +++ b/docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md @@ -0,0 +1,95 @@ +# 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/` 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`). diff --git a/docs/issues/PHASE_PLAN_RESPONSIVE_UI.md b/docs/issues/PHASE_PLAN_RESPONSIVE_UI.md index 42542f3..4a121ef 100644 --- a/docs/issues/PHASE_PLAN_RESPONSIVE_UI.md +++ b/docs/issues/PHASE_PLAN_RESPONSIVE_UI.md @@ -3,7 +3,7 @@ > **Gitea:** [#30 – Responsive UI](http://192.168.2.144:3000/Lars/mitai-jinkendo/issues/30) > **Spec:** `.claude/docs/functional/RESPONSIVE_UI.md` > **Breakpoint:** `<1024px` = Mobile (Bottom-Nav, bestehendes Verhalten), `≥1024px` = Desktop (Sidebar 220px) -> **Letzte Plan-Aktualisierung:** 2026-04-04 (P6; P7 Admin bewusst offen) +> **Letzte Plan-Aktualisierung:** 2026-04-05 (P7 Admin-Shell umgesetzt; Doku `GUI_IA_ADMIN_NAV_2026-04-05.md`; P8 ausstehend) --- @@ -18,7 +18,7 @@ | P4 | Verlauf (Tabs links / Content rechts) | ☑ erledigt | `History.jsx` + `.history-*` in `app.css`; Tab-State bei `location.state.tab` | | P5 | Analyse (Prompts links / Ergebnis rechts) | ☑ erledigt | `Analysis.jsx` + `.analysis-split*` in `app.css` | | P6 | Erfassung / Capture & Formularseiten | ☑ erledigt | `.capture-page` + `--capture-content-max` (eine Desktop-Breite); CaptureShell-Navigation | -| P7 | Admin & restliche Vollbreiten-Seiten | ⏸ Konzeption | Layout nach Abstimmung; nicht mit P6 mitgezogen | +| P7 | Admin & restliche Vollbreiten-Seiten | ☑ erledigt (Kern) | **2026-04-05:** `AdminShell` + Hub-Routen + `adminNav`; Tabellen/„volle Breite“ weiter iterativ laut Spec §5.5 | | P8 | Abschluss, Regression, Spec-Pflege | ☐ pending | | **Status-Legende:** `☐ pending` · `◐ in Arbeit` · `☑ erledigt` · `⏸ blockiert` @@ -202,6 +202,8 @@ Spec **§5.4**: Desktop Formulare **zentriert**, **max-width ~600px** im Content ## Phase P7 – Admin & übrige Seiten +**Stand 2026-04-05:** Admin nutzt **dedizierte Shell** mit Gruppen-Navigation und Hubs (`AdminShell`, `adminNav.js`, `RequireAdmin`) — IA- und Routing-Grundlage erledigt. Tabellen „mehr Breite“ / feinere Layout-Tuning gemäß §5.5 können weiterlaufen ohne Shell-Refactor. Doku: `GUI_IA_ADMIN_NAV_2026-04-05.md`. + ### Ziel Spec **§5.5**: Admin-Tabellen nutzen auf Desktop **mehr Breite**; Mobile weiterhin horizontales Scrollen wo nötig. diff --git a/docs/issues/REVIEW_OPEN_ISSUES_2026-04-04.md b/docs/issues/REVIEW_OPEN_ISSUES_2026-04-04.md index 30d23d5..4168188 100644 --- a/docs/issues/REVIEW_OPEN_ISSUES_2026-04-04.md +++ b/docs/issues/REVIEW_OPEN_ISSUES_2026-04-04.md @@ -24,7 +24,7 @@ | 26 | Charts erweitern | TEILWEISE | Phase-0c API + History/NutritionCharts | | 27 | Korrelationen & Insights | TEILWEISE | C-Charts + offene Data-Layer-TODOs | | 29 | Abilities-Matrix UI | TEILWEISE | Admin/ProfileBuilder, UX offen | -| 30 | Responsive UI Sidebar | OFFEN | Weiterhin Bottom-Nav-fokussiert | +| 30 | Responsive UI Sidebar | **TEILWEISE** | P1–P6 + **P7 Admin-Shell** + iOS Bottom-Nav Safe-Area; SSoT-Doku: **`GUI_IA_ADMIN_NAV_2026-04-05.md`**; #30 bleibt offen bis P8/Abnahme | | 32 | Version-System (inkl. ehem. #33) | OFFEN | Gitea: Body/Titel 2026-04-04 aktualisiert; Runner/Build-Git bewusst später | | 33 | — | GESCHLOSSEN | In #32 konsolidiert (superseded) | | 34 | External Volumes Doku | PRÜFEN | Gegen Compose abgleichen | @@ -112,11 +112,11 @@ ### #30 – [FEAT] Responsive UI – Desktop Sidebar + 2-spaltig -**Code-Stand:** Weiterhin stark **Mobile-first** (z. B. `bottom-nav` in `App.jsx`); keine ausgebaute Desktop-Sidebar wie im klassischen Admin-Dashboard. +**Code-Stand (2026-04-05):** **Desktop-Sidebar** (`DesktopSidebar`, `config/appNav.js`) und **Mobile Bottom-Nav** mit horizontalem Scroll + **Safe Area** (`app.css`); **Admin** eigener Bereich **`AdminShell`** mit Gruppen-Hub wie Analyse (`adminNav.js`, `/admin/g/:groupId`, `RequireAdmin`). Siehe **`docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md`** (Dateipfade, IA, Deploy-Hinweis). -**Umsetzungsplan:** `docs/issues/PHASE_PLAN_RESPONSIVE_UI.md` (Phasen P0–P8, Abnahmekriterien & Tests, Fortschrittstabelle). +**Umsetzungsplan:** `docs/issues/PHASE_PLAN_RESPONSIVE_UI.md` (Phasen P0–P8). **P7** Kern umgesetzt; **P8** (Regression, finale Abnahme) stehen noch aus – Issue **nicht** schließen ohne P8-Checkliste. -**Vorschlag:** `OFFEN`. +**Vorschlag:** `TEILWEISE` – Gitea-Kommentar mit Link auf die GUI-Doku; Titel/Beschreibung optional um „Admin-Shell / Ziele-Nav / iOS PWA-Leiste“ ergänzen. --- diff --git a/scripts/gitea/README.md b/scripts/gitea/README.md index bfa8853..e5aae90 100644 --- a/scripts/gitea/README.md +++ b/scripts/gitea/README.md @@ -34,6 +34,7 @@ python scripts/gitea/gitea_api.py issues create --title "Fix: …" --body-file p # Kommentar python scripts/gitea/gitea_api.py issues comment 42 --body "…" +python scripts/gitea/gitea_api.py issues comment 42 --body-file path/to/comment.md # Schließen / wieder öffnen python scripts/gitea/gitea_api.py issues close 42 diff --git a/scripts/gitea/gitea_api.py b/scripts/gitea/gitea_api.py index b85d21b..5f4367f 100644 --- a/scripts/gitea/gitea_api.py +++ b/scripts/gitea/gitea_api.py @@ -71,8 +71,14 @@ def cmd_issues_create(args: argparse.Namespace, base: str, token: str, owner: st def cmd_issues_comment(args: argparse.Namespace, base: str, token: str, owner: str, repo: str) -> None: + body = args.body or "" + if getattr(args, "body_file", None): + body = Path(args.body_file).read_text(encoding="utf-8") + if not body.strip(): + sys.stderr.write("issues comment: --body oder --body-file mit Inhalt erforderlich\n") + sys.exit(2) status, payload = issues_comment( - base, token, owner, repo, args.number, args.body + base, token, owner, repo, args.number, body ) print(json.dumps(payload, indent=2, ensure_ascii=False)) if status >= 400: @@ -149,7 +155,8 @@ def main() -> None: p_co = i_sub.add_parser("comment", help="Add comment") p_co.add_argument("number", type=int) - p_co.add_argument("--body", required=True) + p_co.add_argument("--body", default="") + p_co.add_argument("--body-file", help="Kommentar aus Datei (UTF-8); überschreibt --body wenn gesetzt") p_co.set_defaults(_handler=cmd_issues_comment) p_cl = i_sub.add_parser("close", help="Close issue")