# Custom Tips System Documentation This document describes all tips implemented in the Reflect app, including their display conditions and locations. ## Overview Tips are displayed as themed modal sheets that match the user's chosen app theme. The system is managed by `ReflectTipsManager` (singleton) and configured with: - **Display Frequency**: One tip per app session - **Global Toggle**: `tipsEnabled` boolean in UserDefaults - **Persistence**: Shown tip IDs stored in UserDefaults --- ## Tips ### 1. CustomizeLayoutTip **Title**: "Personalize Your Experience" **Message**: "Customize mood icons, colors, and layouts to make the app truly yours." **Icon**: `paintbrush.fill` **Display Conditions**: Always eligible (no rules) **Location**: CustomizeContentView (via `.customizeLayoutTip()`) --- ### 2. AIInsightsTip **Title**: "Discover AI Insights" **Message**: "Get personalized insights about your mood patterns powered by Apple Intelligence." **Icon**: `brain.head.profile` **Display Conditions**: - User has logged at least **7 moods** **Parameter**: `moodLogCount: Int` (incremented via `ReflectTipsManager.shared.onMoodLogged()`) **Location**: InsightsView (via `.aiInsightsTip()`) --- ### 3. SiriShortcutTip **Title**: "Use Siri to Log Moods" **Message**: "Say 'Hey Siri, log my mood as great in Reflect' for hands-free logging." **Icon**: `mic.fill` **Display Conditions**: - User has logged at least **3 moods** **Parameter**: `moodLogCount: Int` (incremented via `ReflectTipsManager.shared.onMoodLogged()`) **Location**: SettingsContentView (Features section header, via `.siriShortcutTip()`) --- ### 4. HealthKitSyncTip **Title**: "Sync with Apple Health" **Message**: "Connect to Apple Health to see your mood data alongside sleep, exercise, and more." **Icon**: `heart.fill` **Display Conditions**: - User has viewed the Settings screen **Parameter**: `hasSeenSettings: Bool` (set via `ReflectTipsManager.shared.onSettingsViewed()`) **Location**: SettingsContentView (Health Kit toggle, via `.healthKitSyncTip()`) --- ### 5. WidgetVotingTip **Title**: "Vote from Your Home Screen" **Message**: "Add the Mood Vote widget to quickly log your mood without opening the app." **Icon**: `square.grid.2x2.fill` **Display Conditions**: - User has been using the app for at least **2 days** **Parameter**: `daysUsingApp: Int` **Location**: DayView (via `.widgetVotingTip()`) --- ### 6. TimeViewTip **Title**: "View Your History" **Message**: "Switch between Day, Month, and Year views to see your mood patterns over time." **Icon**: `calendar` **Display Conditions**: Always eligible (no rules) **Location**: DayView (via `.timeViewTip()`) --- ### 7. MoodStreakTip **Title**: "Build Your Streak!" **Message**: "Log your mood daily to build a streak. Consistency helps you understand your patterns." **Icon**: `flame.fill` **Display Conditions**: - User has a current streak of at least **3 days** **Parameter**: `currentStreak: Int` (updated via `ReflectTipsManager.shared.updateStreak(_:)`) **Location**: DayView (via `.moodStreakTip()`) --- ## ReflectTipsManager API ```swift // Reset session flag (call on app launch) ReflectTipsManager.shared.resetSession() // Reset all tips (for testing) ReflectTipsManager.shared.resetAllTips() // Update parameters ReflectTipsManager.shared.onMoodLogged() // Increments mood log count ReflectTipsManager.shared.onSettingsViewed() // Marks settings as viewed ReflectTipsManager.shared.updateDaysUsingApp(_:) // Updates days using app ReflectTipsManager.shared.updateStreak(_:) // Updates current streak // Global toggle ReflectTipsManager.shared.tipsEnabled = true/false ``` --- ## View Modifiers Tips can be attached to views using these convenience modifiers: ```swift .customizeLayoutTip() .aiInsightsTip() .siriShortcutTip() .healthKitSyncTip() .widgetVotingTip() .timeViewTip() .moodStreakTip() // Or use the generic modifier with custom gradient colors: .reflectTip(ReflectTips.customizeLayout, gradientColors: [.purple, .blue]) ``` --- ## Modal Design Tips are displayed as themed modal sheets with: - Gradient header (130pt) matching tip-specific colors - SF Symbol icon (44pt, white) - Title and message with theme text color - "Got it" dismiss button with gradient background - Spring animation on appearance --- ## Files - **Tips & Manager**: `Shared/ReflectTips.swift` - **Modal View**: `Shared/Views/TipModalView.swift` - **Configuration**: `ReflectTipsManager.shared.resetSession()` called in `ReflectApp.swift`