Files
Reflect/docs/TipKit-Tips.md
Trey t c59f215535 Replace TipKit with custom themed tips modal system
- Add TipModalView with gradient header, themed styling, and spring animations
- Create FeelsTipsManager with global toggle, session tracking, and persistence
- Define FeelsTip protocol and convert all 7 tips to new system
- Add convenience view modifiers (.customizeLayoutTip(), .aiInsightsTip(), etc.)
- Remove TipKit dependency from all views
- Add Tips Preview debug screen in Settings to test all tip modals
- Update documentation for new custom tips system

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:33:36 -06:00

4.4 KiB

Custom Tips System Documentation

This document describes all tips implemented in the Feels 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 FeelsTipsManager (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 FeelsTipsManager.shared.onMoodLogged())

Location: InsightsView (via .aiInsightsTip())


3. SiriShortcutTip

Title: "Use Siri to Log Moods" Message: "Say 'Hey Siri, log my mood as great in Feels' for hands-free logging." Icon: mic.fill

Display Conditions:

  • User has logged at least 3 moods

Parameter: moodLogCount: Int (incremented via FeelsTipsManager.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 FeelsTipsManager.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 FeelsTipsManager.shared.updateStreak(_:))

Location: DayView (via .moodStreakTip())


FeelsTipsManager API

// Reset session flag (call on app launch)
FeelsTipsManager.shared.resetSession()

// Reset all tips (for testing)
FeelsTipsManager.shared.resetAllTips()

// Update parameters
FeelsTipsManager.shared.onMoodLogged()           // Increments mood log count
FeelsTipsManager.shared.onSettingsViewed()       // Marks settings as viewed
FeelsTipsManager.shared.updateDaysUsingApp(_:)   // Updates days using app
FeelsTipsManager.shared.updateStreak(_:)         // Updates current streak

// Global toggle
FeelsTipsManager.shared.tipsEnabled = true/false

View Modifiers

Tips can be attached to views using these convenience modifiers:

.customizeLayoutTip()
.aiInsightsTip()
.siriShortcutTip()
.healthKitSyncTip()
.widgetVotingTip()
.timeViewTip()
.moodStreakTip()

// Or use the generic modifier with custom gradient colors:
.feelsTip(FeelsTips.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/FeelsTips.swift
  • Modal View: Shared/Views/TipModalView.swift
  • Configuration: FeelsTipsManager.shared.resetSession() called in FeelsApp.swift