114 Commits

Author SHA1 Message Date
Trey t
79a16fb476 Fix UI tests: remove tab content accessibility identifiers that override child identifiers
The .accessibilityIdentifier() on TabView tab content propagated to ALL child views
in the accessibility tree, overriding identifiers like mood_header and settings_header.
Tab buttons are already accessible via labels (Day, Month, etc.) so these aren't needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:42:23 -06:00
Trey t
7f27446b94 Fix 8 audit items: remove force-unwraps, improve accessibility and concurrency
- Replace force-unwrap HK types with modern HKQuantityType(_:) initializer
- Replace Calendar.date force-unwraps with guard/let in HealthService, HeaderPercView, MoodStreakActivity, DayViewViewModel, MonthTotalTemplate
- Extract DayViewViewModel.countEntries into testable static method with safe flatMap
- Replace DispatchQueue.main.asyncAfter with Task.sleep in CelebrationAnimations
- Add .minimumScaleFactor(0.5) to SmallRollUpHeaderView for Dynamic Type
- Add VoiceOver accessibility labels to HeaderPercView mood percentages
- Fix @testable import iFeel → Feels in Tests_iOS.swift
- Add 4 unit tests for countEntries (TDD)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 11:42:16 -06:00
Trey t
277e277750 Add XCUITest suite with 27 test files covering unmapped P1 test cases
- Add 8 new test files: HeaderMoodLogging (TC-002), DayViewGrouping (TC-019),
  AllDayViewStyles (TC-021), MonthViewInteraction (TC-030), PaywallGate
  (TC-032/039/048), AppTheme (TC-070), IconPack (TC-072),
  PremiumCustomization (TC-075)
- Add accessibility IDs for paywall overlays, icon packs, app theme cards,
  and day view section headers
- Add --expire-trial launch argument to UITestMode for paywall gate testing
- Update QA test plan spreadsheet with XCUITest names for 14 test cases
- Include existing test infrastructure: screen objects, helpers, base class,
  and 19 previously written test files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:37:54 -06:00
Trey t
7639f881da Add debug bypass subscription toggle, tests, and data layer improvements
- Add runtime toggle in Settings (DEBUG only) to bypass subscription/hide trial banner
- IAPManager.bypassSubscription is now a @Published var persisted via UserDefaults
- Hide upgrade banner in SettingsTabView and trial warnings when bypass is enabled
- Add FeelsTests directory with integration tests
- Update DataController, DataControllerGET, DataControllerUPDATE
- Update Xcode project and scheme configuration
- Update localization strings and App Store screen docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:12:56 -06:00
Trey t
7c142568be Fix boundary bugs, route side effects through MoodLogger, add data listeners
- Fix ExtensionDataProvider <= boundary to < in date queries (prevented cross-day leaks)
- Replace force-unwraps with guards and add error logging in DataControllerGET and ExtensionDataProvider
- Route DayViewViewModel update/delete through MoodLogger.shared (was duplicating side effects)
- Add data listeners to InsightsViewModel and YearViewModel for cross-tab refresh
- Add HealthKitManager.deleteMood(for:) for single-date cleanup
- Add SharedModelContainer.isUsingInMemoryFallback flag with critical logging
- Add analytics events: entryDeleted, allDataCleared, duplicatesRemoved, storageFallbackActivated

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 23:34:09 -06:00
Trey t
f1cd81c395 Fix 7 data mutation layer risks identified in audit
- save()/saveAndRunDataListeners() now return @discardableResult Bool;
  listeners only fire on successful save
- MoodLogger.updateMood() now recalculates streak, updates Live Activity,
  and notifies watch (was missing these side effects)
- CSV import uses new addBatch()/importMoods() for O(1) side effects
  instead of O(n) per-row widget reloads and streak calcs
- Foreground task ordering: fillInMissingDates() now runs before
  removeDuplicates() so backfill-created duplicates are caught same cycle
- WidgetMoodSaver deletes ALL entries for date (was fetchLimit=1, leaving
  CloudKit sync duplicates behind)
- cleanupPhotoIfNeeded logs warning on failed photo deletion instead of
  silently orphaning files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 23:09:11 -06:00
Trey t
9c4e0a35a6 Add privacy policy and EULA pages, update settings URLs
- Create landing_page/privacy.html and landing_page/eula.html matching site design
- Add app icon to nav/footer/favicon across all landing pages
- Update settings EULA and privacy links to feels.88oakapps.com

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:50:53 -06:00
Trey t
e0330dbc8d Replace EventLogger with typed AnalyticsManager using PostHog
Complete analytics overhaul: delete EventLogger.swift, create Analytics.swift
with typed event enum (~45 events), screen tracking, super properties
(theme, icon pack, voting layout, etc.), session replay with kill switch,
autocapture, and network telemetry. Replace all 99 call sites across 38 files
with compiler-enforced typed events in object_action naming convention.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:12:33 -06:00
Trey t
65460c63b3 Add app icon asset, screenshot exporter, and misc updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 09:31:01 -06:00
Trey t
bfef0a4472 Add sharing style picker for design variation selection
Users can now swipe between design variations (e.g. Gradient vs Color Block)
when sharing from month/year views and the sharing templates list. Removes
#if DEBUG wrappers from variation files and disables auto-start demo animation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 09:26:21 -06:00
Trey t
5d1b0b60fa Add insights screenshot export and improve promo video phone frames
- Add ExportableInsightsViews with sample AI insights data
- Add InsightsExporter service for light/dark mode screenshots
- Add export insights button to Settings debug section
- Update ConceptB promo to use insights_light.png in privacy scene
- Fix phone frame clipping with overflow hidden and borderRadius 64
- Add timeline voting widget images for promo video

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 00:56:32 -06:00
Trey t
36ceff32ca Add watch view export and update promo video watch display
- Add ExportableWatchViews.swift with exportable versions of watch app views
- Add WatchExporter.swift service to export all watch view variations
- Add export watch screenshots button to Settings (DEBUG)
- Update ConceptB promo: use watch_voting_light.png inside watch frame at 1.2x size

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 10:50:48 -06:00
Trey t
6cb9406b22 Replace video components with image sequences for smoother playback
- Export month.mov and year.mov to PNG image sequences
- Replace Video components with Img sequences in scenes 2 and 3
- Add previous frame layering to prevent flashing during transitions
- Update CTAScene: 2x sizing, white background, new text colors
- Add LiveActivityPreviewView for exporting 365 activity frames
- Enlarge background icons to 1.2x across all scenes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 23:33:20 -06:00
Trey t
15ff52d043 Demo animation improvements: grid visibility, smooth scroll, fluid fill
- Fix grid visibility: show gray background cells always, animate mood
  colors on top with scale 2x->1x effect
- Add smooth auto-scroll for MonthView: starts after first month is 50%
  filled, scrolls at constant speed to match fill rate
- Remove pause between months for fluid continuous animation
- Add currentAnimatingMonthIndex tracking to DemoAnimationManager

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:46:57 -06:00
Trey t
8e0f69c29a wip 2026-01-29 11:17:20 -06:00
Trey t
810ac2d649 Update signing configuration to use 88oakapps.feels identifiers
- Update App Group IDs from group.com.tt.feels to group.com.88oakapps.feels
- Update iCloud container IDs from iCloud.com.tt.feels to iCloud.com.88oakapps.feels
- Sync code constants with entitlements across all targets (iOS, Watch, Widget)
- Update documentation in CLAUDE.md and PROJECT_OVERVIEW.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 10:01:49 -06:00
Trey t
406d9ee4fd Add debug widget/live activity export and competitor research
Debug features (DEBUG builds only):
- WidgetExporter: Export all widget variants to PNG (light/dark modes)
- Live Activity lock screen export with configurable streak
- Test notifications button to preview all personality packs
- Settings buttons for export and notification testing

Research:
- Competitor analysis docs (Daylio, Bearable, Reflectly, etc.)
- App Store screenshot reference materials

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 09:46:03 -06:00
Trey t
e5656f47fd Rename iFeels to Feels across entire codebase
- Bundle IDs: com.tt.ifeel* → com.tt.feels*
- App Groups: group.com.tt.ifeel* → group.com.tt.feels*
- iCloud containers: iCloud.com.tt.ifeel* → iCloud.com.tt.feels*
- IAP product IDs: com.tt.ifeel.IAP.* → com.tt.feels.IAP.*
- URLs: ifeels.app → feels.app
- Logger subsystems and dispatch queues
- Product names and display names

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:57:44 -06:00
Trey t
37fdb4db29 Fix small widget layout and settings light mode contrast
- Remove prompt text from small widget before voting
- Show date instead of "Logged!" after voting on small widget
- Fix light mode settings: section=gray, inner rows=white for contrast
- Remove redundant backgrounds from Browse Themes and subscription banner

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 13:39:25 -06:00
Trey t
e78e848951 Fix Month view showing fake data and show all 5 moods in exports
- Fix critical bug in generateObjectNotInArray() that ignored the mood
  parameter and generated random moods instead of placeholders, causing
  Month view to display fake colored entries for days without real data
- Update Month and Year shareableView exports to show all 5 mood types
  even when some have 0 entries (previously filtered out empty moods)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 20:49:28 -06:00
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
51c5777c03 Add dynamic text contrast for mood colors and make theme preview full screen
- Add WCAG-compliant luminance calculation to Color extension
- Add contrastingTextColor method to MoodTints for automatic black/white text
- Update 12+ entry styles to use dynamic text colors instead of hardcoded white
- Change theme preview sheet to full screen presentation

Text now automatically switches between black and white based on background
brightness, fixing readability issues on light mood colors like yellow (Good).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 10:31:31 -06:00
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
Trey t
e98142c72e Fix memory leaks and add debug tools, remove ControlCenterTip
Memory optimization:
- Add onDisappear cleanup for repeatForever animations in LockScreenView
- Add onDisappear cleanup for animations in FeelsSubscriptionStoreView
- Add onDisappear cleanup in AddMoodHeaderView and PaywallPreviewSettingsView

Debug improvements:
- Add test data and clear data buttons to Settings (debug builds only)

TipKit changes:
- Remove ControlCenterTip (unused)
- Add TipKit-Tips.md documentation

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 21:07:22 -06:00
Trey t
c4e013763a Fix theme selection bug and update onboarding with AppTheme picker
- Change Theme enum from Int to String raw values to fix theme selection bug
- Replace OnboardingStyle icon/color pickers with unified AppTheme grid
- Remove visible text labels from voting layouts while keeping accessibility labels (WCAG 2.1 AA compliant)
- Update widget voting views to use icons only with proper accessibility support
- Consolidate app icons to single unified icon set

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 00:03:34 -06:00
Trey t
8fab566724 Fix LockScreenView to support style override for previews
- Add optional style parameter to LockScreenView for preview/debug use
- Update all 13 lock screen previews to use style override
- Fixes previews showing the same style due to AppStorage timing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 23:56:33 -06:00
Trey t
a0b30d8bae Add 12 cohesive app themes with matching subscription and lock screens
- Create AppTheme enum bundling color tint, icon pack, entry style, voting layout, paywall style, and lock screen style into unified themes
- Add AppThemePickerView for selecting themes with preview cards and detail sheets
- Extend PaywallStyle to 12 variants (celestial, garden, neon, minimal, zen, editorial, mixtape, heartfelt, luxe, forecast, playful, journal)
- Add LockScreenStyle enum with 13 variants including aurora default
- Create themed subscription paywalls with unique backgrounds, decorative elements, and typography for each style
- Create themed lock screens with unique backgrounds, central elements, and unlock buttons
- Update FeelsSubscriptionStoreView to read style from AppStorage so it auto-matches current theme
- Update PaywallPreviewSettingsView to support all 12 paywall styles

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 23:53:35 -06:00
Trey t
53eb953b77 Add Neon/Synthwave style and 4 paywall themes
- Add 4 distinct paywall themes (Celestial, Garden, Neon, Minimal) with
  preview/switcher in debug settings
- Add Neon voting layout with synthwave equalizer bar design
- Upgrade Neon entry style with grid background, cyan/magenta gradients,
  scanline effects, and mini equalizer visualization
- Add PaywallPreviewSettingsView for testing different paywall styles
- Use consistent synthwave color palette (cyan #00FFD0, magenta #FF00CC)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 23:05:45 -06:00
Trey t
f45f52ccbf Add Orbit style for voting layout and entry views
- Add orbit case to VotingLayoutStyle enum with celestial design
- Create OrbitVotingView with center core and orbiting mood planets
- Add orbit case to DayViewStyle enum for entry list
- Create OrbitEntryView with mood icon center and orbiting day number
- Add orbit icons to voting and entry style pickers in CustomizeView

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 22:33:53 -06:00
Trey t
16af463569 Add celebration animations when voting on mood
- Create 10 full-view celebration animations (vortex, explosion, flip, shatter, pulse wave, fireworks, confetti, morph, tunnel, gravity)
- Play random animation when user votes in-app
- Add Animation Lab debug view to preview and test animations
- Animations complete before saving mood to prevent view flash

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 11:59:09 -06:00
Trey t
cc9f9f9427 Improve subscription UI and fix trial date handling
Lock Screen:
- Add light/dark mode support with adaptive colors
- Make passcode text tappable to trigger authentication

Trial Date Fixes:
- Fix IAPManager to read firstLaunchDate directly from UserDefaults
- Add expiration date check (> Date()) before showing "expires in" text
- Show "Trial expired" when trial end date is in the past
- Disable subscription bypass in DEBUG mode for testing

Month/Year Subscribe Prompts:
- Redesign with gradient icons and compelling copy
- Add fade mask (100% at top to 0% at 50%) for content behind
- Position subscribe overlay on bottom half of screen
- Month: purple/pink theme with calendar icon
- Year: orange/pink theme with chart icon

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 10:54:01 -06:00
Trey t
745e226ecb Redesign lock screen with Emotional Aurora theme
Replace basic lock screen with immersive mood-themed design featuring:
- Animated aurora gradient background using mood colors
- Floating mood-colored particles with gentle animation
- Central breathing orb with rotating angular gradients
- Glassmorphic unlock button with pulse animation
- Elegant serif typography ("Your Feelings are safe here")
- Smooth entrance animations

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 10:34:49 -06:00
Trey t
be84825aba Fix widget layout clipping and add comprehensive widget previews
- Fix LargeVotingView mood icons getting clipped at edges by using
  flexible HStack spacing with maxWidth: .infinity
- Fix VotingView medium layout with smaller icons and even distribution
- Add comprehensive #Preview macros for all widget states:
  - Vote widget: small/medium, voted/not voted, all mood states
  - Timeline widget: small/medium/large with various data states
- Reduce icon sizes and padding to fit within widget bounds
- Update accessibility labels and hints across views

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 09:53:40 -06:00
Trey t
086f8b8807 Add comprehensive WCAG 2.1 AA accessibility support
- Add VoiceOver labels and hints to all voting layouts, settings, widgets,
  onboarding screens, and entry cells
- Add Reduce Motion support to button animations throughout the app
- Ensure 44x44pt minimum touch targets on widget mood buttons
- Enhance AccessibilityHelpers with Dynamic Type support, ScaledValue wrapper,
  and VoiceOver detection utilities
- Gate premium features (Insights, Month/Year views) behind subscription
- Update widgets to show subscription prompts for non-subscribers

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 23:26:21 -06:00
Trey t
a6a6912183 Fix MoodBarChart to show all 5 mood categories
Removed filter that hid moods with zero count, ensuring all mood
options display even when user hasn't logged that mood in the period.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 14:27:43 -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
0cd09a5f51 wip 2025-12-22 14:07:42 -06:00
Trey t
2e9e28d00b Pass raw health metrics to AI instead of hardcoded correlations
- Replace HealthService.analyzeCorrelations() with computeHealthAverages()
- Remove hardcoded threshold-based correlation analysis (8k steps, 7hrs sleep, etc.)
- Pass raw averages (steps, exercise, sleep, HRV, HR, mindfulness, calories) to AI
- Let Apple Intelligence find nuanced multi-variable patterns naturally
- Update MoodDataSummarizer to format raw health data for AI prompts
- Simplifies code by ~200 lines while improving insight quality

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 09:42:45 -06:00
Trey t
742b7b00d4 Fix HealthKit authorization and sync issues
- Consolidate permissions into single dialog (1 write + 5 read types)
- Add retry logic to wait for iOS authorization status update
- Show real-time sync status feedback in settings
- Reduce batch size from 100 to 50 for smoother progress updates

Fixes: toggle appearing to do nothing, only one permission showing,
past moods not syncing to State of Mind

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 09:23:04 -06:00
Trey t
2a703a8969 Add 4 new mood icon styles and improve widget layouts
New mood icon styles:
- Weather (☀️⛈️)
- Garden (🌸🥀)
- Hearts (💖💔)
- Cosmic (🕳️)

Widget improvements:
- Small vote widget: 3-over-2 grid layout
- Medium vote widget: single horizontal row
- Redesigned voted stats view with checkmark badge
- Fixed text truncation on non-subscriber view
- Added comprehensive previews for all widget types

Bug fix:
- Voting header now updates when mood image style changes

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 19:06:05 -06:00
Trey t
af2975a33c Enable iCloud sync by default, remove user toggle
- CloudKit sync is now always enabled for all users
- Remove useCloudKit setting and toggle from Settings
- Remove CloudKitSyncMonitor usage (package can be removed)
- Remove container switching logic since sync is always on
- Update SharedModelContainer defaults to enable CloudKit

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 10:32:14 -06:00
Trey t
75921732ea Remove 3D DayViewStyle
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 01:30:34 -06:00
Trey t
15eea92b79 Add 3 new DayViewStyles: 3D, Motion, and Micro
- **3D Style**: Cards with layered shadows and perspective depth,
  floating icons with highlights, and 3D text shadows

- **Motion Style**: Accelerometer-driven parallax effect using
  CoreMotion. Floating orbs and elements shift as device tilts

- **Micro Style**: Ultra compact single-line entries for maximum
  density. Tiny dots, abbreviated dates, and minimal spacing

Each style includes:
- Entry view implementation in EntryListView.swift
- Section header in DayView.swift
- Preview icon in CustomizeView.swift

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 01:26:52 -06:00
Trey t
4fbefd86fb Fix HealthKit sync progress layout overlapping
Changed ZStack to VStack so progress indicator appears below the
toggle row instead of overlapping it.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 00:59:23 -06:00
Trey t
373d481613 Add HealthKit backfill to sync all existing moods
When user enables HealthKit integration, automatically syncs all
previously recorded mood entries to Apple Health. Features:
- Progress tracking with visual indicator in Settings
- Batched saves with throttling to avoid overwhelming HealthKit
- Success/failure logging with EventLogger

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 00:55:25 -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
e123df1790 Improve pattern theme with visible mood icon backgrounds
- Remove pattern from month section header for cleaner look
- Fix entry rows to show mood icon as repeating background
- Add ultraThinMaterial behind text for better readability

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 13:45:34 -06:00
Trey t
f57e8da4ff Add Aura voting layout and 12 new day view styles
New voting layout style with atmospheric glowing orb design.
New day view styles: Aura, Chronicle, Neon, Ink, Prism, Tape,
Morph, Stack, Wave, Pattern, Leather, and Glass. Updated style
pickers to use horizontal ScrollView for better navigation.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 12:36:51 -06:00
Trey t
920aaee35c Add premium features and reorganize Settings tab
Premium Features:
- Journal notes and photo attachments for mood entries
- Data export (CSV and PDF reports)
- Privacy lock with Face ID/Touch ID
- Apple Health integration for mood correlation
- 4 new personality packs (Motivational Coach, Zen Master, Best Friend, Data Analyst)

Settings Tab Reorganization:
- Combined Customize and Settings into single tab with segmented control
- Added upgrade banner with trial countdown above segment
- "Why Upgrade?" sheet showing all premium benefits
- Subscribe button opens improved StoreKit 2 subscription view

UI Improvements:
- Enhanced subscription store with feature highlights
- Entry detail view for viewing/editing notes and photos
- Removed duplicate subscription banners from tab content

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 12:22:06 -06:00