Skip to content

Mobile-PWA + Beta-Stack: 8 Commits aus development - #1

Merged
bemany merged 8 commits into
mainfrom
development
May 19, 2026
Merged

Mobile-PWA + Beta-Stack: 8 Commits aus development#1
bemany merged 8 commits into
mainfrom
development

Conversation

@bemany

@bemany bemany commented May 19, 2026

Copy link
Copy Markdown
Owner

Summary

Bringt 8 Commits aus development nach main. Schwerpunkt: komplettes Mobile-PWA-Set mit iOS-Anmutung sowie zwei Backend-Fixes.

Was drin ist

Mobile-PWA (komplett neu)

  • 8 Screens nach Design-Handoff: Heute, Neue Aufgabe, Detail, Fokus-Timer, Foto→KI, Wochenboard, Profil, Lockscreen
  • Aktivierung über Viewport <768px oder ?mobile=1 (sessionStorage-Override)
  • Apple-Style Bottom-Sheets mit Detents (medium ~52vh ↔ large ~88vh)
  • Drag-Handle, Swipe-Down-To-Dismiss (Threshold + Velocity-Tracking), Spring-Snap mit iOS-Easing cubic-bezier(0.32, 0.72, 0, 1)
  • Semi-transparenter Backdrop mit blur(8px) saturate(140%), Backdrop-Tap schließt
  • Tab-Wechsel mit 240ms Fade+Slide-In über key-change-Remount
  • Touch-Feedback (:active Scale 0.88–0.97) auf Buttons, Cards, Chips, Tabs
  • iOS-Tap-Highlight versteckt, viewport-meta user-scalable=no, viewport-fit=cover
  • Status-Wechsel im Detail-Sheet je nach Rolle (Zur Review / Erledigt / Zurück / Wieder öffnen)
  • Tab-Bar nach iOS-HIG (49pt height + safe-area-inset-bottom)
  • Cards links/rechts mit Header gleichbreit (Scroll-Container padding-horizontal: 20px)
  • Review-Aufgaben rausgefiltert aus Heute (liegen beim Projektleiter)
  • Volle Dark-Mode-Unterstützung

Backend-Fixes

  • dev-pin auth: signiertes __Secure--Cookie auf HTTPS (vorher kam getSession() nicht durch)
  • MAIL_DISABLED=true ENV blockiert Versand global (für Staging/Beta)

Test plan

  • npm run build ohne TypeScript-Errors
  • Beta-Deploy lief 1 Woche stabil (https://btm-beta.bethesna.org)
  • Login mit Dev-PIN funktioniert (esref@bemany.de + 123456)
  • Mail-Versand auf Beta deaktiviert verifiziert (POST /me/digest/send-now loggt aber sendet nicht)
  • Mobile-Sheets manuell auf iPhone-PWA getestet (Drag, Detents, Backdrop-Tap)
  • Auf Prod nach Merge: Mobile-Layout greift erst bei <768px oder ?mobile=1 — Desktop-User sehen keine Änderung
  • Prod-.env braucht keinen Eintrag für MAIL_DISABLED (Default false)

Risiken

  • Mobile-Set wird neu für Prod-User sichtbar — Desktop-Layout ist nicht betroffen
  • dev-pin-Route bleibt durch DEV_PIN_AUTH=true gated, auf Prod nicht aktiv

🤖 Generated with Claude Code

bemany added 8 commits May 17, 2026 22:21
MobileApp komplett neu nach claude.ai/design-Bundle aufgebaut.
Aktiviert wenn Viewport < 768px (oder ?mobile=1 Override).

Screens:
1. Heute — Greeting, Live-Hero, Ueberfaellig, Heute-Liste
2. Neue Aufgabe — FAB-Sheet mit Titel/Desc/Projekt/Faellig/Aufwand/Prio
3. Aufgaben-Detail — Bottom-Sheet mit Meta/Subtasks/Checklist
4. Fokus-Timer — Pomodoro-Ring, Block-Dots, Stop/Toggle
5. Foto/KI — Text-Extraktion via /api/ai/extract + Pick-Liste
6. Wochenboard — Spalten-Tabs + Touch-Swipe + Fortschrittsbalken
7. Profil — Stats, Push-Toggle, Pomodoro/Tagesziel-Links, Logout
8. Lockscreen-Preview — Push-Notification-Mockup

iOS-Chrome: StatusBar (Uhr/Signal/WLAN/Akku), HomeBar.
Bottom-Tab-Bar: Heute / Board / [+FAB] / KI / Profil.
Dark-Mode komplett, Glass-Themes inkludiert.

CSS aus prototype/btm.css portiert (1133 Zeilen) als
styles/mobile-shell.css. Sheet-Layer-Overlay fuer Modals.
?mobile=1 Override im useIsMobile-Hook (sessionStorage).

i18n: ~70 neue mobile.*-Keys in de.ts + en.ts.

Deploy: btm-beta.bethesna.org (DB-Migrationen 0023+0024
auf btm_beta angewendet).
5 Feedbacks aus Beta-Test:
1. Fake StatusBar (Uhr/Akku) + HomeBar entfernt — MobileChrome no-op,
   Safe-Area-Padding regelt das in CSS via env(safe-area-inset-*)
2. Skalierung auf iOS-Standard hochgezogen — Touch-Targets min 44pt,
   Body 15-16px, Bottom-Tab-Icons 24px statt 18px, FAB 56x56
3. Bottom-Bar + Sheet-Footer haben jetzt max(env(safe-area-inset-bottom), 12px)
   damit sie nicht mit iPhone-Home-Indicator kollidieren
4. Slide-In-Animation fuer Sheets (cubic-bezier 320ms) + Backdrop-Fade
5. iOS-Zoom-on-Focus verhindert: Inputs auf font-size: 16px gezwungen,
   viewport-meta auf maximum-scale=1, user-scalable=no, viewport-fit=cover
4 konkrete Issues aus Beta-Test gefixt:

1. Scrolling auf Heute-Seite tot:
   - .mob-scroll: overflow:hidden -> overflow-y:auto
   - min-height: 0 auf .mob-screen + .mob-scroll fuer flex shrink
   - -webkit-overflow-scrolling: touch fuer iOS-Momentum
   - overscroll-behavior: contain (kein Page-Bounce)

2. Buttons abgeschnitten in Sheets:
   - Inline overflowY:auto + maxHeight aus MobScreenDetail entfernt
   - Neue Drei-Zonen-Struktur: head (fix) / scroll (flex) / foot (fix)
   - Footer-Buttons immer sichtbar mit safe-area-bottom Padding

3. Sheet-Backdrop deckend weiss:
   - Alte .mob-sheet-layer + .mob-screen-sheet entfernt
   - Neue MobBottomSheet-Komponente: semi-transparenter Backdrop
     (rgba + blur 8px saturate 140%) + separate weisse Card mit Detents
   - Backdrop-Click schliesst, Heute-Liste blurred sichtbar

4. PowerPoint-Feeling -> App-Feeling:
   - Apple-Style Detents: medium (52vh) <-> large (88vh) mit Drag
   - Swipe-Down ueber 120px ODER Flick (velocity > 0.6 px/ms) schliesst
   - Spring-Snap mit iOS-Easing cubic-bezier(0.32, 0.72, 0, 1)
   - Velocity-Tracking via 6-Sample-Buffer (~100ms)
   - Tab-Wechsel: 240ms Fade+Slide-In ueber key-change-Remount
   - Touch-Feedback (:active scale 0.88-0.97) auf allen Buttons,
     Cards, Chips, Tabs - mit -webkit-tap-highlight-color: transparent
   - Timer/Lockscreen jetzt als .mob-fullscreen-overlay (kein
     Sheet-Backdrop noetig, slidet rein)

Neue Komponente: src/components/mobile/MobBottomSheet.tsx
Restruktur: MobScreenDetail, MobScreenCreate, MobScreenTimer,
MobScreenLock, MobileApp - StatusBar/HomeBar/sheet-backdrop-Mockups raus
Status-Wechsel-Buttons im Detail-Footer je nach Spalte + Rolle:
- col=todo/planned/doing + assignee=me: "Zur Review" + "Timer starten"
- col=review + Projektleiter (proj.ownerId): "Zurück" + "Erledigt"
- col=review + nicht Projektleiter: nur "Schließen"
- col=done: "Wieder öffnen"

UI-Spacing nach iOS-HIG:
- Tab-Bar: 49pt height (vorher 56pt) + 6pt min padding-bottom (vorher 12pt)
  Total nun ~83pt mit safe-area-inset statt 90+pt
- Task-Cards margin: 0 (war 16px) + Scroll-Container padding-horizontal: 20px
  damit Karten gleichbreit mit Header (.mob-h-greeting padding 20px) abschliessen
- Section-Heads + Live-Card-Margins entsprechend auf 20px ausgerichtet
@bemany
bemany merged commit 4c67043 into main May 19, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant