- .gitignore: .claude/docs, rules, commands tracken; settings.local weiter ignorieren - DOCUMENTATION.md: verbindliche Ablage functional/technical/working/issues - .claude/README.md: Agent-Einstieg; GITEA_ISSUES_INDEX aus MCP (Stand 2026-04-08) - Arbeitspapiere von docs/ nach .claude/docs/working/ verschoben - docs/MEMBERSHIP_SYSTEM.md als Stub; kanonisch technical/MEMBERSHIP_SYSTEM.md - CLAUDE.md Pflichtlektüre und Links angepasst; docs/README.md vereinfacht Made-with: Cursor
228 lines
9.1 KiB
Markdown
228 lines
9.1 KiB
Markdown
# Fachliche Anforderungen: Responsive UI
|
||
**Modul:** parallel zu Features (kein festes Versions-Label)
|
||
**Status:** Fachlich freigegeben, technische Implementierung ausstehend
|
||
**Letzte Aktualisierung:** März 2026
|
||
|
||
---
|
||
|
||
## 1. Überblick
|
||
|
||
Die App soll vollständig responsive sein und auf allen Bildschirmgrößen optimal
|
||
funktionieren – vom iPhone über iPad bis zum Desktop-Browser. Die PWA-Funktionalität
|
||
auf dem iPhone bleibt vollständig erhalten.
|
||
|
||
---
|
||
|
||
## 2. Breakpoints
|
||
|
||
| Bereich | Breite | Layout |
|
||
|---------|--------|--------|
|
||
| Mobile | < 1024px | Bottom Navigation (wie jetzt) |
|
||
| Desktop | ≥ 1024px | Sidebar Navigation links, Content rechts |
|
||
|
||
Ein separates Tablet-Layout (768px) wird **nicht** eingeführt – unterhalb
|
||
1024px verhält sich alles wie Mobile.
|
||
|
||
---
|
||
|
||
## 3. Mobile Layout (< 1024px) – unverändert
|
||
|
||
Das bestehende Mobile-Layout bleibt exakt so wie es ist:
|
||
- Bottom Navigation mit Icons + Labels
|
||
- Volle Breite, 16px seitliches Padding
|
||
- 80px Bottom-Padding für Navigation
|
||
- PWA auf iPhone funktioniert wie bisher
|
||
|
||
---
|
||
|
||
## 4. Desktop Layout (≥ 1024px)
|
||
|
||
### 4.1 Grundstruktur
|
||
|
||
```
|
||
┌─────────────────────────────────────────────┐
|
||
│ Sidebar (220px) │ Content (flex 1) │
|
||
│ │ │
|
||
│ [Logo] │ Seiteninhalt │
|
||
│ │ (max-width: 1200px, │
|
||
│ Dashboard │ zentriert) │
|
||
│ Erfassung │ │
|
||
│ Verlauf │ │
|
||
│ Analyse │ │
|
||
│ Einstellungen │ │
|
||
│ Admin │ │
|
||
│ │ │
|
||
│ [Avatar + Name] │ │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 4.2 Sidebar
|
||
|
||
**Position:** Fixed links, volle Höhe (100vh)
|
||
**Breite:** 220px
|
||
**Farben:** `var(--surface)` Hintergrund, `var(--border)` rechte Trennlinie
|
||
|
||
**Inhalt von oben nach unten:**
|
||
|
||
```
|
||
┌──────────────────┐
|
||
│ [Ensō-Logo] │ ← Icon (40px) + "Mitai Jinkendo" Text
|
||
│ Mitai Jinkendo │
|
||
├──────────────────┤
|
||
│ │
|
||
│ 🏠 Dashboard │ ← Icons + Text (gleiche Nav-Items wie Bottom Nav)
|
||
│ ✏️ Erfassung │ ← Aktive Seite: var(--accent) Hintergrund (leicht)
|
||
│ 📊 Verlauf │ + var(--accent) Text + linke Akzent-Linie (3px)
|
||
│ 🧠 Analyse │
|
||
│ ⚙️ Einstellungen│
|
||
│ 👑 Admin │ ← nur sichtbar wenn role='admin'
|
||
│ │
|
||
├──────────────────┤
|
||
│ [Avatar] │ ← Nutzer-Avatar (32px) + Name + Tier-Badge
|
||
│ Lars │
|
||
│ selfhosted │
|
||
└──────────────────┘
|
||
```
|
||
|
||
**Aktive Seite hervorheben:**
|
||
```css
|
||
/* Aktiver Nav-Item Desktop */
|
||
background: var(--accent-light); /* #E1F5EE leicht grüner Hintergrund */
|
||
color: var(--accent); /* #1D9E75 grüner Text */
|
||
border-left: 3px solid var(--accent); /* linke Akzent-Linie */
|
||
border-radius: 0 8px 8px 0;
|
||
```
|
||
|
||
### 4.3 Content-Bereich
|
||
|
||
- `margin-left: 220px` (Sidebar-Breite)
|
||
- `padding: 24px 32px`
|
||
- `max-width: 1200px` (zentriert innerhalb des verfügbaren Raums)
|
||
- Kein Bottom-Padding für Navigation (Sidebar ersetzt Bottom Nav)
|
||
|
||
---
|
||
|
||
## 5. Seiten-spezifische Desktop-Layouts
|
||
|
||
### 5.1 Dashboard
|
||
|
||
**Mobile:** Alle Karten untereinander
|
||
**Desktop:** 2-spaltig oder 4-spaltig je nach Kartentyp
|
||
|
||
```
|
||
┌──────────────────────────────────────────────┐
|
||
│ Hallo Lars 👋 Mo, 20. März 2026 │
|
||
├──────────┬──────────┬──────────┬─────────────┤
|
||
│ Gewicht │ KF │ Mager- │ Kalorien │
|
||
│ 86,1 kg │ 19,9% │ masse │ 1.447 kcal │
|
||
├──────────┴──────────┴──────────┴─────────────┤
|
||
│ Ziele [Details →] │
|
||
│ ████████░░ Gewicht: 27% ████░░░░ KF: 45% │
|
||
├──────────────────────────────────────────────┤
|
||
│ Kalorien + Gewicht (Chart – volle Breite) │
|
||
└──────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.2 Verlauf
|
||
|
||
**Mobile:** Tabs oben, Chart/Tabelle darunter
|
||
**Desktop:** Tabs links als vertikale Liste, Chart/Tabelle rechts
|
||
|
||
```
|
||
┌────────────┬─────────────────────────────────┐
|
||
│ Gewicht ← │ Chart + Tabelle │
|
||
│ Körperfett │ (nimmt volle rechte Breite) │
|
||
│ Umfänge │ │
|
||
│ Ernährung │ │
|
||
│ Aktivität │ │
|
||
└────────────┴─────────────────────────────────┘
|
||
```
|
||
|
||
### 5.3 Analyse
|
||
|
||
**Mobile:** Prompt-Liste, dann Ergebnis darunter
|
||
**Desktop:** Prompt-Liste links (300px), Ergebnis rechts
|
||
|
||
```
|
||
┌──────────────────┬──────────────────────────┐
|
||
│ Prompts │ Ergebnis / Verlauf │
|
||
│ ───────────── │ │
|
||
│ 🔍 Gesamt │ [Letzte Analyse] │
|
||
│ 🫧 Körper ← │ [Text der Analyse...] │
|
||
│ 🍽️ Ernährung │ │
|
||
│ 🏋️ Training │ [Ältere Analysen] │
|
||
│ ───────────── │ │
|
||
│ Pipeline ▶ │ │
|
||
└──────────────────┴──────────────────────────┘
|
||
```
|
||
|
||
### 5.4 Erfassung
|
||
|
||
**Mobile:** Formular volle Breite
|
||
**Desktop:** Formular zentriert, max-width 600px
|
||
|
||
```
|
||
┌──────────────────────────────────────────────┐
|
||
│ Gewicht erfassen │
|
||
│ │
|
||
│ ┌─────────────────────────────┐ │
|
||
│ │ Datum [20.03.2026] │ │
|
||
│ │ Gewicht [86,1 ] kg │ │
|
||
│ │ Notiz [ ] │ │
|
||
│ │ │ │
|
||
│ │ [Speichern] │ │
|
||
│ └─────────────────────────────┘ │
|
||
└──────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.5 Admin-Panel
|
||
|
||
**Mobile:** Tabellen horizontal scrollbar
|
||
**Desktop:** Tabellen nutzen volle Breite, mehr Spalten sichtbar
|
||
|
||
---
|
||
|
||
## 6. Übergangsverhalten
|
||
|
||
### Fenster-Resize
|
||
- Beim Verkleinern unter 1024px: Sidebar verschwindet, Bottom Nav erscheint
|
||
- Beim Vergrößern über 1024px: Bottom Nav verschwindet, Sidebar erscheint
|
||
- Kein Flackern – CSS media queries, kein JavaScript-Resize-Listener nötig
|
||
|
||
### Aktiver Zustand synchronisiert
|
||
- Aktive Seite wird in Sidebar UND Bottom Nav korrekt hervorgehoben
|
||
- (Technisch: gleiche State-Variable, unterschiedliches Rendering)
|
||
|
||
---
|
||
|
||
## 7. Was sich nicht ändert
|
||
|
||
- Farben, CSS-Variablen, Design-Tokens bleiben identisch
|
||
- Alle Funktionen bleiben auf Desktop verfügbar
|
||
- PWA auf iPhone bleibt vollständig funktionsfähig
|
||
- Keine externen CSS-Frameworks (kein Tailwind, kein Bootstrap)
|
||
- Inline-Styles + CSS-Variablen-Ansatz bleibt erhalten
|
||
|
||
---
|
||
|
||
## 8. Abgrenzung & offene Fragen
|
||
|
||
### In diesem Modul enthalten:
|
||
- Sidebar Navigation Desktop
|
||
- Content-Bereich mit max-width
|
||
- Dashboard 4-spaltig
|
||
- Verlauf 2-spaltig (Tabs + Chart)
|
||
- Analyse 2-spaltig (Prompts + Ergebnis)
|
||
- Erfassung zentriert schmal
|
||
- Admin-Panel breite Tabellen
|
||
|
||
### Nicht in diesem Modul:
|
||
- Dark Mode – separates Feature
|
||
- Animationen / Transitions – optional später
|
||
- Collapsed Sidebar (Icon-only Modus) – optional später
|
||
|
||
### Offene Fragen für technische Planung:
|
||
1. Wird AppLayout als neue Wrapper-Komponente eingeführt oder App.jsx direkt angepasst?
|
||
2. CSS Media Queries in app.css oder CSS-in-JS (Inline-Style mit window.innerWidth)?
|
||
3. Wie wird der aktive Nav-Item-State zwischen Sidebar und Bottom Nav geteilt?
|
||
4. Verlauf-Tabs: werden sie zu einer vertikalen Liste refactored oder per CSS umgestaltet? |