# Profile Page — Detail Design Spec Stand: 2026-05-07 Owner: rebreak-native-ui Phase: 1 (Detail-Plan, kein Code). Quellen: `memory/project_profile_page_design.md`, `memory/feedback_anonymity_nickname.md`, `memory/project_llm_per_plan.md`, `ops/UI_MIGRATION_PLAN.md`. Profile-Page ist das UI-Showpiece. Streak-Tab entfällt komplett und wandert dezent in die Profile-Page. Settings ist parallel und funktional, aber kein Showpiece. --- ## 0. Routing & Datenmodell-Übersicht Zwei Views, scharf getrennt: - `/(app)/profile` (eigenes Profil, Hero-Tab in Tab-Bar). Volle Sicht. - `/profile/[userId]` (fremdes Profil). Anonymisiert: nur nickname, avatar, plan-tier (keine Email, keine Demographics, keine Cooldowns, keine SOS-Stats, keine Liste der blockierten Domains). Beide laden via `apiFetch` aus eigenen Endpoints — kein client-side Filtern. --- ## 1. Visual Mock (ASCII-Wireframe) Eigenes Profil — vertikal scrollbar, ein Screen, sechs Sektionen: ``` +------------------------------------------------------------+ | [<-- back] Profil [icon: cog] | <- minimal top bar +------------------------------------------------------------+ | | | +------------------+ | | | | <- Avatar 96x96, runder | | | avatar | Rahmen, plan-Akzent | | | | (free=gray, pro=orange, | | +------------------+ legend=gold) | | [icon: camera-edit] | | | | Jonas_42 [icon: pencil] | <- nickname, inline-edit | chahinebrini@gmail.com | <- email read-only, | | subdued grau, klein | [pill: legend] Mitglied seit 12.04.2026 | | | +------------------------------------------------------------+ STATS [icon: info] +------------------------------------------------------------+ | +-------+ +-------+ +-------+ +-----------+ | | | 12 | | 47 | | 134 | | 8 | | | | Posts | | Folg- | | gebl. | | Approved | | | | | | ower | | Dom. | | Domains > | | | +-------+ +-------+ +-------+ +-----------+ | | tap tap tap tap (highlight) | +------------------------------------------------------------+ STREAK [icon: chevron] <- collapsible +------------------------------------------------------------+ | 23 Tage geschützt | | seit 14. April 2026 | | | | longest streak: 41 Tage | | | | COOLDOWN-VERLAUF | | ----------------------------------- | | | timeline-rail (1px line, vertical) | | | | o 18.04. 16h Cooldown beendet | | | | | "Stress nach Arbeit" | | | | o 02.05. 4h Cooldown abgebr. | | | | | ohne Reason | | | | o 06.05. 24h aktiv | [pill: aktiv] | | ----------------------------------- | | [load more — last 30 days] | +------------------------------------------------------------+ LYRA INSIGHTS <- SOS stats, dezent +------------------------------------------------------------+ | Letzte 30 Tage | | | | 5 SOS-Sessions, 4 davon bewältigt [80% bar] | | | | Was hat am meisten geholfen? | | [#] Atemübung ......... 3 Sessions | | [#] Spiel ......... 1 Session | | [#] Reden ......... 1 Session | | | | Häufigste Emotion: Stress | +------------------------------------------------------------+ ANONYMER BEITRAG ZUR FORSCHUNG [icon: chevron] <- collapsed default +------------------------------------------------------------+ | Optional. Hilft DiGA-Wirksamkeit zu belegen. | | Nur aggregiert, nie personenbezogen. | | [link: Mehr erfahren] | | | | ----- expanded state ----- | | Geburtsjahr 1989 [icon: pencil] | | Geschlecht divers [icon: pencil] | | Familienstand ledig [icon: pencil] | | Beruf Angestellt [icon: pencil] | | Bundesland Bayern [icon: pencil] | | Stadt (nicht angeg) [icon: pencil] | | | | [button: Einwilligung widerrufen] | +------------------------------------------------------------+ ``` Fremdes Profil — drastisch reduziert: ``` +------------------------------------------------------------+ | [avatar 96px] | | Jonas_42 [pill: legend] | | Mitglied seit April 2026 | | [button: Folgen] [button: DM senden] | +------------------------------------------------------------+ | +-------+ +-------+ +-----------+ | | | 12 | | 47 | | 8 | | | | Posts | | Folg- | | Approved | | | | | | ower | | Domains | | | +-------+ +-------+ +-----------+ | +------------------------------------------------------------+ | Letzte Posts (5) ... | +------------------------------------------------------------+ ``` UX-Notizen: - Edit-Icons stehen rechts neben dem editierbaren Wert, nicht in einem zentralen "Edit-Mode". Inline-Tap öffnet Bottom-Sheet mit Input. - Collapse-Chevron rechts oben in Section-Header, animated 180-Grad-Rotation. - Keine Tier/Score-Kacheln (alte Nuxt-Logik), nur "Mitglied seit"-Datum + Plan-Pill. - Plan-Pill nutzt Plan-Akzentfarbe (free=neutral-300, pro=brandOrange, legend=Goldverlauf). --- ## 2. Component-Tree Routen (neu): - `app/(app)/profile.tsx` → eigenes Profil. Wird Tab-Bar-Eintrag, ersetzt Streak-Tab. - `app/profile/[userId].tsx` → fremdes Profil. Modal/Stack-Push. Komponenten (neu): ``` (top-level page, owns scroll + section refs) (avatar + nickname + email + plan-pill + member-since) (preset-grid + custom-upload trigger) (Bottom-Sheet mit Crop-UI für Custom-Photo) (Bottom-Sheet, valibot-validiert) (4 stat-cards horizontal, tappable) (number + label, optional onPress) (Bottom-Sheet mit Liste der approved domains) (analog, custom + global summary) (collapsible, owns streak + cooldown queries) (currentDays + startDate + longest) (vertikale Liste, virtualisiert, paginiert) (SOS-Stats: 30-Tage-Trend + helped-by-Bar) (atemuebung/spiel/reden mit Anteils-Balken) (label + value + edit-icon) ``` Komponenten (shared, reuse): - `` — vorhanden in components/Card.tsx - `