Commit Graph

78 Commits

Author SHA1 Message Date
Trey t
bea2d3bbc9 Update Neon colors and show color circles in theme picker
- Update NeonMoodTint to use synthwave colors matching Neon voting style
  (cyan, lime, yellow, orange, magenta)
- Replace text label with 5 color circles in theme preview Colors row
- Remove unused textColor customization code and picker views
- Add .id(moodTint) to Month/Year views for color refresh
- Clean up various unused color-related code

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 00:08:01 -06:00
Trey t
1105383e07 Replace ChartsPackage with native Swift Charts
- Rewrite HeaderStatsView using SwiftUI Charts framework
- Delete unused GraphView.swift (only used in previews)
- Remove unused `import Charts` from DayView.swift
- Remove ChartsPackage SPM dependency from project
- Native Swift Charts is simpler and has no external dependencies

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:18:07 -06:00
Trey t
f7da61d6ca Consolidate extension data providers and add side effects catch-up
- Create unified ExtensionDataProvider for Widget and Watch targets
- Remove duplicate WatchDataProvider and WatchConnectivityManager from Watch App
- Add side effects catch-up mechanism in MoodLogger for widget votes
- Process pending side effects on app launch and midnight background task
- Reduce ~450 lines of duplicated code across targets

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 22:50:23 -06:00
Trey t
224c00423a Add Apple Watch companion app with complications and WCSession sync
- Add watchOS app target with mood voting UI (5 mood buttons)
- Add WidgetKit complications (circular, corner, inline, rectangular)
- Add WatchConnectivityManager for bidirectional sync between iOS and watch
- iOS app acts as central coordinator - all mood logging flows through MoodLogger
- Watch votes send to iPhone via WCSession, iPhone logs and notifies watch back
- Widget votes use openAppWhenRun=true to run MoodLogger in main app process
- Add #if !os(watchOS) guards to Mood.swift and Random.swift for compatibility
- Update SKStoreReviewController to AppStore.requestReview (iOS 18 deprecation fix)
- Watch reads user's moodImages preference from GroupUserDefaults for emoji style

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:19:17 -06:00
Trey t
d902694cdd Migrate to String Catalog (xcstrings) for localization
Replace legacy .lproj/Localizable.strings files with modern Localizable.xcstrings format. All 118 strings now have translations for 7 languages: English, German, Spanish, French, Japanese, Korean, and Brazilian Portuguese.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 15:36:57 -06:00
Trey t
356ce9ea62 Fix build errors, resolve all warnings, and improve code quality
Widget Extension Fixes:
- Create standalone WidgetDataProvider for widget data isolation
- Add WIDGET_EXTENSION compiler flag for conditional compilation
- Fix DataController references in widget-shared files
- Sync widget version numbers with main app (23, 1.0.2)
- Add WidgetBackground color to asset catalog

Warning Resolutions:
- Fix UIScreen.main deprecation in BGView and SharingListView
- Fix Text '+' concatenation deprecation in PurchaseButtonView and SettingsTabView
- Fix exhaustive switch in BiometricAuthManager (add .none case)
- Fix var to let in ExportService (3 instances)
- Fix unused result warning in NoteEditorView
- Fix ForEach duplicate ID warnings in MonthView and YearView

Code Quality Improvements:
- Wrap bypassSubscription in #if DEBUG for security
- Rename StupidAssCustomWidgetObservableObject to CustomWidgetStateViewModel
- Add @MainActor to IconViewModel
- Replace fatalError with graceful fallback in SharedModelContainer
- Add [weak self] to closures in DayViewViewModel
- Add OSLog-based AppLogger for production logging
- Add ImageCache with NSCache for memory efficiency
- Add AccessibilityHelpers with Reduce Motion support
- Create DataControllerProtocol for dependency injection
- Update .gitignore with secrets exclusions

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 00:48:35 -06:00
Trey t
440b04159e Add Apple platform features and UX improvements
- Add HealthKit State of Mind sync for mood entries
- Add Live Activity with streak display and rating time window
- Add App Shortcuts/Siri integration for voice mood logging
- Add TipKit hints for feature discovery
- Add centralized MoodLogger for consistent side effects
- Add reminder time setting in Settings with time picker
- Fix duplicate notifications when changing reminder time
- Fix Live Activity streak showing 0 when not yet rated today
- Fix slow tap response in entry detail mood selection
- Update widget timeline to refresh at rating time
- Sync widgets when reminder time changes

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 17:21:55 -06:00
Trey t
5974002a82 Add AI-powered insights using Apple Foundation Models
- Replace static insights with on-device AI generation via FoundationModels framework
- Add @Generable AIInsight model for structured LLM output
- Create FoundationModelsInsightService with session-per-request for concurrent generation
- Add MoodDataSummarizer to prepare mood data for AI analysis
- Implement loading states with skeleton UI and pull-to-refresh
- Add AI availability badge and error handling
- Support default (supportive) and rude (sarcastic) personality modes
- Optimize prompts to fit within 4096 token context limit
- Bump iOS deployment target to 26.0 for Foundation Models support

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 10:20:11 -06:00
Trey t
f822927e98 Add interactive widget voting and fix warnings/bugs
Widget Features:
- Add inline voting to timeline widget when no entry exists for today
- Show random prompt from notification strings in voting mode
- Update vote widget to use simple icon style for selection
- Make stats bar full width in voted state view
- Add Localizable.strings to widget extension target

Bug Fixes:
- Fix inverted date calculation in InsightsViewModel streak logic
- Replace force unwraps with safe optional handling in widgets
- Replace fatalError calls with graceful error handling
- Fix CSV import safety in SettingsView

Warning Fixes:
- Add @retroactive to Color and Date extension conformances
- Update deprecated onChange(of:perform:) to new syntax
- Replace deprecated applicationIconBadgeNumber with setBadgeCount
- Replace deprecated UIApplication.shared.windows API
- Add @preconcurrency for Swift 6 protocol conformances
- Add missing widget family cases to switch statement
- Remove unused variables and #warning directives

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 16:23:12 -06:00
Trey t
aaaf04f05e Migrate from Core Data to SwiftData
- Replace Core Data with SwiftData for iOS 18+
- Create MoodEntryModel as @Model class replacing MoodEntry entity
- Create SharedModelContainer for App Group container sharing
- Create DataController with CRUD extensions replacing PersistenceController
- Update all views and view models to use MoodEntryModel
- Update widget extension to use SwiftData
- Remove old Core Data files (Persistence*.swift, .xcdatamodeld)
- Add EntryType enum with all entry type cases
- Fix widget label truncation with proper spacing and text scaling

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 15:08:05 -06:00
Trey t
f2565678be wip 2025-12-09 23:37:04 -06:00
Trey t
f2c510de50 Refactor StoreKit 2 subscription system and add interactive vote widget
## StoreKit 2 Refactor
- Rewrote IAPManager with clean enum-based state model (SubscriptionState)
- Added native SubscriptionStoreView for iOS 17+ purchase UI
- Subscription status now checked on every app launch
- Synced subscription status to UserDefaults for widget access
- Simplified PurchaseButtonView and IAPWarningView
- Removed unused StatusInfoView

## Interactive Vote Widget
- New FeelsVoteWidget with App Intents for mood voting
- Subscribers can vote directly from widget, shows stats after voting
- Non-subscribers see "Tap to subscribe" which opens subscription store
- Added feels:// URL scheme for deep linking

## Firebase Removal
- Commented out Firebase imports and initialization
- EventLogger now prints to console in DEBUG mode only

## Other Changes
- Added fallback for Core Data when App Group unavailable
- Added new localization strings for subscription UI
- Updated entitlements and Info.plist

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 23:07:16 -06:00
Trey t
4274ab02d4 updates
fix spelling
update version
2023-01-06 19:33:26 -06:00
Trey t
49e3812659 iap warning view 2022-12-21 10:19:03 -06:00
Trey t
bd238e5743 iap - wip 2022-07-17 10:26:00 -05:00
Trey t
6c239c5e26 MISC
added new icon
put notifications in strings files
started IAPManager
populate data goes to 1000 entires
take out fixweeday button
2022-07-07 18:13:36 -05:00
Trey t
8fc887e390 xcode .. i hate xcode 2022-04-05 23:53:14 -05:00
Trey t
9bf6190bab add customize onboarding views
make tab bar text color selected text color
2022-04-05 23:46:01 -05:00
Trey t
682f62fa4a separate all customize views into their own files
make corner radius a constant
create the views in the main app file and pass through so they dont get re-drawn when changing UI things
2022-04-02 10:53:04 -05:00
Trey t
bdd0b0ce59 filtering days in customize will filter views 2022-03-31 14:45:08 -05:00
Trey t
9e4cfd2775 add filter days to cusomize page 2022-03-31 11:44:44 -05:00
Trey t
544d4821be add back in 1x images for widgets 2022-03-24 15:40:10 -05:00
Trey t
c5651ab4dd add single scale pdf instead of pngs 2022-03-24 14:30:02 -05:00
Trey t
f4e307bfbd put 1x images in widget image assets 2022-03-24 11:37:23 -05:00
Trey t
198858ebeb change name to iFeels 2022-03-23 22:51:26 -05:00
Trey t
e85e6be7c0 update to 88oakapps 2022-03-23 15:08:47 -05:00
Trey t
36a688084c add shape picker for backgrounds 2022-03-20 02:45:51 -05:00
Trey t
d064cdb3d9 update build number 2022-03-17 14:57:53 -05:00
Trey t
d46ad53e1e Merge branch 'main' into develop
# Conflicts:
#	Feels.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
2022-03-17 11:08:54 -05:00
Trey t
ef365d5dba update build number 2022-03-17 11:08:32 -05:00
Trey t
f3542117a7 add logging 2022-03-13 20:06:26 -05:00
Trey t
8d3e9a7c6e export to png for memory 2022-03-12 19:21:50 -06:00
Trey t
055b3f4bbd closed #111 - Make grid image picker for widget eyes and mouth 2022-03-12 11:32:00 -06:00
Trey t
215ad5bb6d add in firebase logging 2022-03-11 10:32:12 -06:00
Trey t
7692f455c8 customize text color 2022-03-06 11:25:05 -06:00
Trey t
6ec0a9bb99 rls 21 2022-03-05 14:15:26 -06:00
Trey t
d56e74053e hopefully fix issue where voting is filled in with missing when its time to vote 2022-03-05 11:28:29 -06:00
Trey t
fca4b3cb02 rename HomeViewTwo to MonthView 2022-02-27 15:37:23 -06:00
Trey t
5357b4ffb8 sovled #100 2022-02-24 21:25:53 -06:00
Trey t
83060e8353 closed #89 make custom widgets codable 2022-02-21 11:36:45 -06:00
Trey t
0035f61204 everything changed 2022-02-20 14:33:58 -06:00
Trey t
1cf38cb854 wip 2022-02-18 18:58:38 -06:00
Trey t
065b7bcac1 create home view that is the main tab view 2022-02-18 14:19:37 -06:00
Trey t
675e44bca9 fix issue with two votes on the same date
fix issue with header not showing correct vote date
split logic for Persistence into different files
create class that deals with voting time, existing votes, and what should be shown based on that
2022-02-17 14:46:11 -06:00
Trey t
7bcad65419 move / tweak sharing templates 2022-02-17 09:19:22 -06:00
Trey t
649180dbb5 WIP - custom widget icon 2022-02-13 22:15:53 -06:00
Trey t
56d7e40c27 Merge branch 'sharing' into develop
# Conflicts:
#	Feels.xcodeproj/project.pbxproj
2022-02-13 17:17:27 -06:00
Trey t
868b747291 WIP - icon generator 2022-02-13 17:16:13 -06:00
Trey t
1e7199337f WIP - custom widget creator 2022-02-13 13:34:41 -06:00
Trey t
b878d908c4 WIP - Sharing 2022-02-13 10:20:43 -06:00