feat: Update documentation for GUI, Admin navigation, and responsive UI integration
This commit is contained in:
parent
fdaf4471da
commit
24f60c0a6d
|
|
@ -6,6 +6,7 @@
|
||||||
> | Architektur-Regeln | `.claude/rules/ARCHITECTURE.md` |
|
> | Architektur-Regeln | `.claude/rules/ARCHITECTURE.md` |
|
||||||
> | Coding-Regeln | `.claude/rules/CODING_RULES.md` |
|
> | Coding-Regeln | `.claude/rules/CODING_RULES.md` |
|
||||||
> | Lessons Learned | `.claude/rules/LESSONS_LEARNED.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
|
## Claude Code Verantwortlichkeiten
|
||||||
|
|
||||||
|
|
@ -69,6 +70,8 @@ backend/
|
||||||
frontend/src/
|
frontend/src/
|
||||||
├── App.jsx # Root, Auth-Gates, Navigation
|
├── App.jsx # Root, Auth-Gates, Navigation
|
||||||
├── app.css # CSS-Variablen + globale Styles
|
├── app.css # CSS-Variablen + globale Styles
|
||||||
|
├── config/ # appNav.js · adminNav.js (Single Source für Main/Admin-Nav)
|
||||||
|
├── layouts/ # AdminShell · RequireAdmin
|
||||||
├── context/ # AuthContext · ProfileContext
|
├── context/ # AuthContext · ProfileContext
|
||||||
├── pages/ # Alle Screens
|
├── pages/ # Alle Screens
|
||||||
└── utils/
|
└── utils/
|
||||||
|
|
@ -90,6 +93,10 @@ frontend/src/
|
||||||
**Branch:** develop
|
**Branch:** develop
|
||||||
**Nächster Schritt:** Frontend Chart Integration → Testing → Prod Deploy v0.9i
|
**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) 🆕
|
### Updates (28.03.2026 - Phase 0c Multi-Layer Architecture Complete) 🆕
|
||||||
|
|
||||||
#### Phase 0c: Multi-Layer Data Architecture ✅ **COMPLETED**
|
#### Phase 0c: Multi-Layer Data Architecture ✅ **COMPLETED**
|
||||||
|
|
|
||||||
95
docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md
Normal file
95
docs/issues/GUI_IA_ADMIN_NAV_2026-04-05.md
Normal file
|
|
@ -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/<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`).
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
> **Gitea:** [#30 – Responsive UI](http://192.168.2.144:3000/Lars/mitai-jinkendo/issues/30)
|
> **Gitea:** [#30 – Responsive UI](http://192.168.2.144:3000/Lars/mitai-jinkendo/issues/30)
|
||||||
> **Spec:** `.claude/docs/functional/RESPONSIVE_UI.md`
|
> **Spec:** `.claude/docs/functional/RESPONSIVE_UI.md`
|
||||||
> **Breakpoint:** `<1024px` = Mobile (Bottom-Nav, bestehendes Verhalten), `≥1024px` = Desktop (Sidebar 220px)
|
> **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` |
|
| 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` |
|
| 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 |
|
| 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 | |
|
| P8 | Abschluss, Regression, Spec-Pflege | ☐ pending | |
|
||||||
|
|
||||||
**Status-Legende:** `☐ pending` · `◐ in Arbeit` · `☑ erledigt` · `⏸ blockiert`
|
**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
|
## 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
|
### Ziel
|
||||||
Spec **§5.5**: Admin-Tabellen nutzen auf Desktop **mehr Breite**; Mobile weiterhin horizontales Scrollen wo nötig.
|
Spec **§5.5**: Admin-Tabellen nutzen auf Desktop **mehr Breite**; Mobile weiterhin horizontales Scrollen wo nötig.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
| 26 | Charts erweitern | TEILWEISE | Phase-0c API + History/NutritionCharts |
|
| 26 | Charts erweitern | TEILWEISE | Phase-0c API + History/NutritionCharts |
|
||||||
| 27 | Korrelationen & Insights | TEILWEISE | C-Charts + offene Data-Layer-TODOs |
|
| 27 | Korrelationen & Insights | TEILWEISE | C-Charts + offene Data-Layer-TODOs |
|
||||||
| 29 | Abilities-Matrix UI | TEILWEISE | Admin/ProfileBuilder, UX offen |
|
| 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 |
|
| 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) |
|
| 33 | — | GESCHLOSSEN | In #32 konsolidiert (superseded) |
|
||||||
| 34 | External Volumes Doku | PRÜFEN | Gegen Compose abgleichen |
|
| 34 | External Volumes Doku | PRÜFEN | Gegen Compose abgleichen |
|
||||||
|
|
@ -112,11 +112,11 @@
|
||||||
|
|
||||||
### #30 – [FEAT] Responsive UI – Desktop Sidebar + 2-spaltig
|
### #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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ python scripts/gitea/gitea_api.py issues create --title "Fix: …" --body-file p
|
||||||
|
|
||||||
# Kommentar
|
# Kommentar
|
||||||
python scripts/gitea/gitea_api.py issues comment 42 --body "…"
|
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
|
# Schließen / wieder öffnen
|
||||||
python scripts/gitea/gitea_api.py issues close 42
|
python scripts/gitea/gitea_api.py issues close 42
|
||||||
|
|
|
||||||
|
|
@ -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:
|
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(
|
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))
|
print(json.dumps(payload, indent=2, ensure_ascii=False))
|
||||||
if status >= 400:
|
if status >= 400:
|
||||||
|
|
@ -149,7 +155,8 @@ def main() -> None:
|
||||||
|
|
||||||
p_co = i_sub.add_parser("comment", help="Add comment")
|
p_co = i_sub.add_parser("comment", help="Add comment")
|
||||||
p_co.add_argument("number", type=int)
|
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_co.set_defaults(_handler=cmd_issues_comment)
|
||||||
|
|
||||||
p_cl = i_sub.add_parser("close", help="Close issue")
|
p_cl = i_sub.add_parser("close", help="Close issue")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user