toolbarBackground/toolbarColorScheme von jedem einzelnen Tab auf das
TabView selbst verschoben. Per-Tab-Modifikatoren verursachten beim
Tab-Wechsel ein weißes Aufblitzen, da die Styles nur für den jeweils
aktiven Tab galten und beim Wechsel kurz verloren gingen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Die KI-Karte (aiAnalysisCard) wurde vollständig aus LogbuchView ausgebaut.
KI Insights sind weiterhin über den Sparkles-Button im Kontakt-Header
zugänglich. Sektionsüberschrift in PersonDetailView von
"Verlauf & KI Insights zu [Name]" auf "Verlauf" vereinfacht.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sektionsüberschrift und Sheet-Titel enthalten jetzt den Vornamen der Person
für mehr Kontext. Englische Format-Keys in xcstrings ergänzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Treffen-Momente warten in pendingFadeAfterSurvey bis momentForRating
wieder auf nil wechselt (Survey abgeschlossen oder geskipped). Erst dann
startet der 5-s-Timer. Notizen und Vorhaben starten den Timer weiterhin
sofort. Eingeblendet werden alle neuen Logbuch-Momente bereits beim
Schließen des Sheets.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Neue Logbuch-Momente (vergangene Treffen, Notizen) erscheinen nach dem
Speichern 5 Sekunden mit 45 % Deckkraft in der Momente-Sektion und wandern
dann animiert in den Verlauf. Aktive Momente (offene Vorhaben, Zukunfts-
treffen) bleiben dauerhaft in der Momente-Sektion. Der Verlauf zeigt nur
noch abgeschlossene/vergangene Einträge.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ProBadge und MaxBadge verstecken sich intern via StoreManager (eiserne Regel: nie extern mit !isPro/!isMax wrappen)
- AddMomentView und TodayView: MaxBadge nicht mehr bei isMax anzeigen
- ThemePickerView: Inline-PRO-Text durch ProBadge() ersetzt
- IchView: Geschlecht aus Leseansicht entfernt, Picker im Bearbeitungsformular erhalten
- Geschlecht-Picker: Duplikat "Keine Angabe" entfernt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- #22: Dedizierte Kontakt-Sektion mit Telefon (Action Sheet) und E-Mail (mailto + Fallback-Alert mit Kopieren)
- #28: Nudge-Intervall-Chip im Header mit Farb-Dot, relativem Zeitstempel und direktem Menu zur Anpassung; NudgeStatus-Enum + Tests
- #31: KI-Analyse-Button im Kontakt-Header (oben rechts) mit MaxBadge; AIAnalysisSheet mit Auto-Start, Consent-Flow und allen Zuständen (idle/loading/result/error)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TodayView: Begrüßung zeigt Vornamen aus UserProfileStore
- TodayView: Leerer Zustand mit zwei CTA-Buttons (Moment / Todo)
- TodayView: Untertitel auf "Lass uns mit der Beziehungspflege starten." geändert
- Tour: Neue Schritte highlighten +Moment und +Todo in PersonDetailView
- Tour: PeopleListView navigiert automatisch zum ersten Kontakt beim Tour-Schritt
- Tour: App-Touren-Sektion in Einstellungen deaktiviert
- Schriftgrößen: Alle Überschriften um 2pt verkleinert (34→32, etc.)
- ContentView Preview: TourCoordinator-Environment ergänzt
- Lokalisierung: Neue Strings für Gruß, Leerzustand und Tour
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Tour-Spotlight-System: Overlay transparent, Hintergrund bleibt sichtbar
- Tour startet nach Splash-Screen im ContentView-Kontext (nicht mehr im fullScreenCover)
- Splash-Screen: UI-Präsentation (Onboarding, CallWindow-Setup) wartet auf Splash-Ende
- TodayView: Leerer Zustand mit zwei separaten CTAs (Moment erfassen / Todo hinzufügen)
- OnboardingCoordinator: 3 Schritte (profile, contacts, complete), Tour separat
- PeopleListView: .tourTarget() für addContactButton und contactCardFirst
- SettingsView: resetSeenTours() bei App-Reset
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TourCatalog.swift: Technische Keys (tour.onboarding.*) durch deutschen
Klartext ersetzt (konform mit Projekt-xcstrings-Konvention)
- TourCardView.swift: Ternary-Ausdrucks-Bug behoben (String statt
LocalizedStringKey); Button-Labels mit deutschen Strings
- SettingsView.swift: settings.tours.* durch deutsche Keys ersetzt
- Localizable.xcstrings: Technische Keys entfernt, alle Tour-Strings als
deutsche Keys mit EN-Übersetzungen hinzugefügt (19 neue Einträge)
- TourCatalogTests: import Foundation ergänzt (LocalizedStringResource)
- TourCoordinatorTests: import CoreGraphics ergänzt (CGRect)
- StoreTests: Closure-Argument-Fehler behoben (_ in)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- PersonalityModels: Alle 30 QuizQuestion-Strings in String(localized:) gewrappt
→ Quiz nutzt jetzt korrekt die Lokaliserungsstrings (vorher: stale in xcstrings)
- PersonalityQuizView: "Überspringen"-Button in allen 3 Screens vereinheitlicht
→ .subheadline.weight(.medium) + .secondary statt caption/tertiary
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- PersonalityEngine: callWindowCopy() + aftermathCopy() zentralisieren
alle Notification-Texte (bisher verstreut und teils unlokalisiert)
- CallWindowManager: 3 Varianten nach Profil (high E / high N / default),
String(localized:) + Error-Logging ergänzt
- AftermathNotificationManager: Titel "Nachwirkung: %@" → "Wie war's mit %@?",
Body via PersonalityEngine.aftermathCopy()
- Todo- und Vorhaben-Erinnerungen: subtitle "Dein Vorhaben" für
persönlicheren Kontext (AddTodoView, EditTodoView, AddMomentView)
- AddMomentView: Logging + Error-Callback nachgezogen (wie AddTodoView)
- 9 neue Tests in NahbarPersonalityTests (NotificationCopyTests)
- Lokalisierung: 4 neue Strings inkl. bisher unlokalisierter Texte
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AppDelegate mit UNUserNotificationCenterDelegate: Notifications werden
jetzt auch angezeigt wenn die App im Vordergrund läuft (.banner + .sound)
- scheduleReminder: Fehler-Logging bei abgelehnter Berechtigung und
center.add-Fehler hinzugefügt (analog zu AftermathNotificationManager)
- userInfo mit todoID in Notification-Content aufgenommen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kapselt die gesamte Abo-Logik in einem testbaren `FeatureGate` Value-Type.
`refreshStatus()` nutzt nun `FeatureGate.from(foundPro:foundMax:)` als
zentrale Factory — die "Max implies Pro"-Invariante ist so nicht mehr
implizit im StoreManager vergraben, sondern explizit und durch 18 neue
Unit-Tests abgesichert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TextEditor auf minHeight 120 verkleinert, VStack in ScrollView
eingebettet – KI-Vorschläge schieben den Editierbereich nicht
mehr aus dem Sichtfeld.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Jede der drei Vorschlags-Sektionen hat jetzt einen kleinen Button
(Pfeil-Icon), der den jeweiligen Text ins Notizfeld übernimmt.
Kurzes Checkmark-Feedback zeigt die erfolgreiche Übernahme an.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Die KI gibt gelegentlich **fett** formatierten Text zurück. Da die
Vorschläge als Plain Text dargestellt werden, werden verbleibende
** nach der Sektion-Extraktion jetzt bereinigt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Neues Max-Plan-Feature: Beim Anlegen eines Treffens können KI-gestützte
Gesprächsvorschläge abgerufen werden. Die Vorschläge umfassen Themen-
vorschläge, Gesprächsretter (bei Stockungen) und Tipps um Smalltalk
in bedeutsame Gespräche zu verwandeln.
- AIAnalysisService: ConversationSuggestionResult, CachedConversationSuggestion,
suggestConversation(person:), parseConversationResult (internal),
buildPrompt auf PromptType-Enum umgestellt
- SettingsView: AppLanguage.conversationInstruction (DE + EN)
- AddMomentView: KI-Sektion (idle/loading/result/error) nur bei Treffen-Typ
- PaywallView: Gesprächsvorschläge in Max-Feature-Liste
- Localizable.xcstrings: 10 neue DE/EN-Strings
- Tests: 8 neue Unit-Tests für Parsing und Codable Round-Trip
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Der Speichern-Button am Ende des Flows ersetzt den Abbrechen-Button
in der Toolbar für beide Fragebögen (Meeting + Nachwirkung).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Statt Fragen einzeln zu ersetzen, werden sie jetzt nacheinander von
unten eingeblendet und bleiben sichtbar:
- Tippen auf einen Dot zeigt die nächste Frage darunter an
- "Überspringen" blendet ebenfalls die nächste Frage ein
- Beantwortete Fragen bleiben sichtbar und können angepasst werden
- Nach der letzten Frage erscheint ein "Speichern"-Button
- Gilt für Sofort-Bewertung (MeetingRatingFlowView) und
Nachwirkung (AftermathRatingFlowView)
- Neuer QuestionCard-Component in RatingQuestionView.swift
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- LogEntryType.todoCompleted hinzugefügt (checkmark.square.fill, grün)
- Abgehakte Todos erzeugen jetzt automatisch einen Logbuch-Eintrag
(sowohl aus PersonDetailView als auch TodayView)
- Verlauf-Vorschau in PersonDetailView zeigt jetzt eine gemischte
Timeline aus Momenten + Logeinträgen statt nur LogEntries
- Verlauf-Abschnitt erscheint sobald Momente oder Logeinträge vorhanden
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Buchsymbol in der NavBar öffnet LogbuchView unabhängig davon, ob
bereits Logeinträge vorhanden sind (vorheriger Fix griff nur wenn der
Verlauf-Abschnitt sichtbar war).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
"Alle"-Link im Verlauf-Header zeigt LogbuchView unabhängig von der
Eintragsanzahl (vorher nur bei >5 Einträgen sichtbar).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1. Kalender-Einstellungen: Picker für Standard-Kalender in Settings
2. Swipe-Gesten: Sensitivität reduziert (minimumDistance 50, Snap ×1.5)
3. Momente: Gespräch → Gespräch/Chat; Unternehmung aus Picker entfernt
(Enum-Case bleibt für Rückwärtskompatibilität)
4. Onboarding: maximal 3 Kontakte auswählbar
5. Herkunft: kultureller Hintergrund auf Personenprofil + AI-Prompt
6. Planung: Erinnerung und Kalendereintrag unabhängig für alle Typen
außer Gedanke; kein Survey bei zukünftigem Treffen
7. Heute-Ansicht: Erinnerungen für Treffen und Gespräch erscheinen
in "Anstehende Erinnerungen"; Platzhalter passt sich Planungsstatus an
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>