Commit Graph

457 Commits

Author SHA1 Message Date
Trey t
bb9b6bb381 Bump version and build number to 1.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:08:19 -05:00
Trey t
7d49f1808a Merge branch '1.1' 2026-03-11 15:56:02 -05:00
Trey t
452f941b83 Add .DS_Store and .claude/ to gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:55:28 -05:00
Trey t
5bd8f8076a Add guided reflection flow with mood-adaptive CBT/ACT questions
Walks users through 3-4 guided questions based on mood category:
positive (great/good) gets gratitude-oriented questions, neutral
(average) gets exploratory questions, and negative (bad/horrible)
gets empathetic questions. Stored as JSON in MoodEntryModel,
integrated into PDF reports, AI summaries, and CSV export.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:52:56 -05:00
Trey t
19b4c8b05b Add AI mood report feature with PDF export for therapist sharing
Adds a Reports tab to the Insights view with date range selection, two report
types (Quick Summary / Detailed), Foundation Models AI generation with batched
concurrent processing, and clinical PDF export via WKWebView HTML rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:13:54 -05:00
Trey t
31fb2a7fe2 Add weather feature with WeatherKit integration for mood entries
Fetch and display weather data (temp, condition, hi/lo, humidity) when
users log a mood. Weather is stored as JSON on MoodEntryModel and shown
as a card in EntryDetailView. Premium-gated with location permission
prompt. Includes BGTask retry for failed fetches and full analytics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 00:16:26 -05:00
treyt
75a3d7b448 Bump version to 1.0.1 for TestFlight submission 2026-03-11 00:08:14 -05:00
Trey t
a1340b4deb Disable autocapture and debug analytics per PostHog SwiftUI best practices
- Disable captureElementInteractions (UIKit-only, duplicates manual events)
- Disable captureScreenViews (meaningless SwiftUI names, duplicates trackScreen())
- Opt out entirely in DEBUG builds to prevent test data polluting production

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:40:27 -05:00
Trey t
5ec2dfa739 Enable anonymous person profiles for accurate unique user tracking
Set personProfiles to .always so PostHog creates anonymous person
profiles for every user, fixing inaccurate unique user counts in
dashboards without requiring identify() calls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:29:05 -05:00
Trey t
45d83cff89 Redesign haptic patterns per animation and play on selection
Rewrite all 10 celebration haptic patterns to match visual timing and
feel distinct: confetti gets playful falling taps, explosion gets a deep
boom, shatter gets glassy cracks, morph gets liquid breathing, etc.
Play the matching haptic when selecting a new vote animation in
customization (respects haptic feedback toggle).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:43:29 -05:00
Trey t
24a1a7b072 Fix tunnel animation icon and add missing localizations
Replace non-existent "tunnel.circle" SF Symbol with "circle.dashed" for
the tunnel vote animation. Add missing translations for haptic feedback
strings and "Close" across all 6 languages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:32:25 -05:00
akatreyt
e44f8242df Merge pull request #151 from akatreyt/fix/issue-150
fix: issue #150 - add haptic feedback option
2026-03-10 16:16:06 -05:00
treyt
1303cb8cbc fix: issue #150 - add haptic feedback option
Automated fix by Tony CI v3.
Refs #150

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-10 16:13:08 -05:00
Trey t
2c2456019c Fix missing Japanese/Korean translations and BGTask string interpolation bug
Add "THE" translations for ja/ko in the subscription magazine header, and fix
broken string interpolation in BGTask error logging.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 09:28:20 -06:00
Trey t
83cca395cf Fix feature card truncation and unequal sizing on subscription screens
Replace HStack layout with LazyVGrid for uniform card sizing, remove
lineLimit(1) to allow multiline subtitles, and add 1:1 aspect ratio
so all four feature cards are identical squares across all 12 themes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:50:47 -06:00
Trey t
3323c4a61c Fix onboarding voting test for new Day→Time page order
The onboarding flow changed from Welcome→Time→Day to
Welcome→Day→Time. Updated test to swipe once instead of twice.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 12:57:59 -06:00
akatreyt
6069f726e4 Merge pull request #149 from akatreyt/fix/issue-148
fix: issue #148 - for onboarding first ask to rate today / tomorrow then the next screen shoudl be time. if the user select today make the default time 9pm, if hte user selects tomorrow default time is 9am
2026-02-28 12:53:37 -06:00
treyt
0eaac2ffca fix: issue #148 - for onboarding first ask to rate today / tomorrow then the next screen shoudl be time. if the user select today make the default time 9pm, if hte user selects tomorrow default time is 9am
Automated fix by Tony CI v3.
Refs #148

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-28 12:51:17 -06:00
Trey t
675547db76 Fix subscription screen hanging on "Loading Subscription"
The .containerRelativeFrame(.horizontal) on the marketing content
caused an infinite layout loop inside SubscriptionStoreView's scroll
container. Replaced with .frame(maxWidth: .infinity).

Also fixes leading space in StoreKit config display name, adds
debug logging to product loading, and reverts to groupID initializer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:54:41 -06:00
Trey t
6ce7c508ed Fix subscription screen: use product IDs and add close button
- Switch from groupID to productIDs for more reliable product loading
- Add dismiss button overlay so users aren't trapped if products fail to load
- Make productIdentifiers static for shared access

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:13:01 -06:00
Trey t
f614487057 Merge branch 'main' of github.com:akatreyt/Feels 2026-02-28 10:19:39 -06:00
Trey t
97c8128e2d Update landing page redesign and clean up string catalog
- Landing page: editorial redesign with phone/watch device frames,
  scroll animations, and responsive layout
- Localizable.xcstrings: remove 56 stale extraction state markers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 10:19:08 -06:00
Trey t
b02a497a86 Fix subscription store not loading on TestFlight
The subscription group ID was still set to the old Feels value (21914363).
Updated to the correct Reflect group ID (21951685) from App Store Connect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 10:10:32 -06:00
akatreyt
4068bdd60d Merge pull request #147 from akatreyt/fix/issue-146
fix: resolve #146 - trial banner always says days
2026-02-27 13:36:33 -06:00
treyt
b1713337f6 fix: issue #146 - make trial always says days on every trial banner in the app
Automated fix by Tony CI v3.
Refs #146

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-27 13:00:53 -06:00
treyt
d41ba29939 fix: issue #145 - Onboarding subtext
Automated fix by Tony CI v3.
Refs #145

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-26 20:33:47 -06:00
treyt
451e6d74f0 Fix text truncation in onboarding views
Add .fixedSize(horizontal: false, vertical: true) to prevent
multiline text from being clipped on smaller screens.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 20:33:27 -06:00
Trey t
3a4e60587a Fix production crash points, actor-isolation warnings, and rebrand URLs
Remove all fatalError/force unwrap/force cast crash points from production
paths (ShowBasedOnVoteLogics, Random, ReflectApp, NoteEditorView). Fix
actor-isolation warnings by wrapping off-main-thread AnalyticsManager calls
in Task { @MainActor in } (LocalNotification) and replacing DispatchQueue
with Task.detached + MainActor.run (LiveActivityPreviewView). Update legal
URLs from feels.88oakapps.com to reflect.88oakapps.com in SettingsView.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 19:31:10 -06:00
Trey t
16c5c34942 Fix 4 flaky UI tests for iOS 26 compatibility
- AppLaunchTests/StabilityTests: Increase assertTabSelected timeout to
  8s for iOS 26 Liquid Glass delayed isSelected state updates
- DeepLinkTests: Detect SubscriptionStoreView container instead of text
  labels, since Apple's native view shows "Subscription Unavailable" in
  test storefront
- SettingsActionTests: Check for empty state after clearing data, bump
  Settings header timeout to 8s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 18:59:22 -06:00
Trey t
087d8c4cdd Sync StoreKit config from App Store Connect, reset version to 1.0.0
- StoreKit config now syncs from ASC instead of local definitions
- Reset marketing version to 1.0.0 and build to 1
- Xcode reformatted Localizable.xcstrings (whitespace only)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:19:02 -06:00
Trey t
0442eab1f8 Rebrand entire project from Feels to Reflect
Complete rename across all bundle IDs, App Groups, CloudKit containers,
StoreKit product IDs, data store filenames, URL schemes, logger subsystems,
Swift identifiers, user-facing strings (7 languages), file names, directory
names, Xcode project, schemes, assets, and documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 11:47:16 -06:00
Trey t
b1a54d2844 Reduce minimum days between review requests from 60 to 14
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:23:57 -06:00
Trey t
36be57e47d Move vote animation to Customize tab as persistent user setting
Replace random animation selection with a user-configurable picker on
the Customize tab between Mood Style and Notifications. Confetti is
the default. Selecting a style shows an inline preview that auto-plays
the animation then dismisses itself. Remove Animation Lab from Settings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:47:40 -06:00
Trey t
c643feb1d6 Fix unescaped quote in German localization string
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 21:28:32 -06:00
Trey t
4851eee5f8 Fix paywall width overflow on iOS 18, update onboarding tip from Yesterday to Today
Add containerRelativeFrame to paywall marketing content so feature cards
fit within screen width on iOS 18. Update onboarding tip text and all
localizations (DE, ES, FR, JA, KO, PT-BR).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 21:21:41 -06:00
Trey t
b2b6931d7c Lower deployment target from iOS 26 to iOS 18, gate Foundation Models behind @available
Broadens installable audience to iOS 18+ while keeping AI insights available on iOS 26.
Foundation Models types and service wrapped in @available(iOS 26, *), InsightsViewModel
conditionally instantiates the service with fallback UI on older versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:21:45 -06:00
Trey t
7660521540 Move Animation Lab to release settings, Add Test Data to debug, fix localization to 100%
- Animation Lab moved out of #if DEBUG so it's available in release builds
- Add Test Data moved into #if DEBUG debug section
- Removed #if DEBUG wrapper from DebugAnimationSettingsView.swift
- Added 58 missing translations across all 6 languages (de, es, fr, ja, ko, pt-BR)
- Localization coverage restored from 87% to 100% (473/473 keys)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:12:52 -06:00
Trey t
5b8a98f763 Fix feels://subscribe deep link on cold launch via app.open()
When XCUITest calls app.open(url), the app relaunches (cold launch) and
onOpenURL doesn't fire reliably. Capture the URL from launch options in
AppDelegate and check it on appear with a short delay to ensure the view
hierarchy is ready for sheet presentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:58:12 -06:00
Trey t
f495ae90fa Add 4 passing UI tests (batch 8): sharing template rendering
- TC-111: Year share Gradient template renders in SharingStylePickerView
- TC-112: Year share Color Block template renders after swipe
- TC-116: Month share Clean Calendar template renders
- TC-117: Month share Stacked Bars template renders after swipe

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:52:53 -06:00
Trey t
c701bf9d3b Add 3 passing UI tests (batch 7): insights collapse, pull-to-refresh, share no data
- TC-046: Insights section collapse/expand via header tap
- TC-047: Pull-to-refresh gesture on Insights tab
- TC-119: Share with empty data handles gracefully
- Added accessibility IDs to InsightsSectionView sections and MonthView share button
- Marked 6 tests RED: TC-040 (DEBUG triple-tap), TC-041 (dead code),
  TC-091 (DEBUG paywall lab), TC-113/114/115 (SharingListView dead code)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:50:46 -06:00
Trey t
655e59c230 Add 3 passing UI tests (batch 6): onboarding voting, locale formatting, long translations
- TC-122: Onboarding day voting (Today/Yesterday selection)
- TC-139: German locale date formatting verification
- TC-138: German long translations don't truncate
- TC-028 marked RED: DayFilterPickerView is dead code

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:35:05 -06:00
Trey t
537f8621c6 Add 3 passing UI tests (batch 5): heatmap, reduce motion, high contrast
- TC-148: Year View heatmap grid renders with data (added accessibility ID)
- TC-143: App navigable with Reduce Motion enabled
- TC-144: App navigable with High Contrast mode enabled
- Marked 89 blocked tests RED in QA spreadsheet

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:19:55 -06:00
Trey t
6d1f54f451 Add 3 passing UI tests (batch 4): personality pack, Spanish locale, accessibility text size
- TC-052: Personality pack selection in Customize tab with accessibility IDs
- TC-137: Spanish localization verification (Ajustes, tab labels)
- TC-142: App navigable at XXL accessibility text size

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:15:20 -06:00
Trey t
f83c52fb42 Add 3 passing UI tests (batch 3): deep links and trial expiration
TC-125: feels://subscribe deep link opens subscription view
TC-126: Malformed deep link (feels://invalidpath) does not crash
TC-078: Trial expired state shows "Trial expired" banner in Settings

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:05:45 -06:00
Trey t
599e54aa72 Add 5 passing UI tests (batches 1-2) and mark 4 blocked tests RED
Batch 1: TC-035 (donut chart), TC-036 (bar chart) — Year View stats
Batch 2: TC-037 (collapse/expand), TC-065 (privacy link), TC-066 (EULA link)
Blocked: TC-124, TC-068 (Settings ScrollView tap issue), TC-038 (share sheet)

New accessibility IDs: bypass subscription toggle, EULA, privacy policy buttons.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 10:02:17 -06:00
Trey t
5895b387be Refactor ZStack layouts to .background(), add Year View accessibility IDs, triage QA test plan
Replace ZStack-with-gradient patterns with idiomatic .background() modifier
across onboarding, customize, and settings views. Add accessibility identifiers
to Year View charts for UI test automation. Mark 67 impossible-to-automate
tests RED in QA plan and scaffold initial Year View and Settings onboarding tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 09:17:52 -06:00
Trey t
ffc74f1a27 Add 9 new UI tests and complete QA test plan triage (170/170)
New tests: NoteEditTests (TC-133, TC-134), AppResumeTests (TC-153),
InsightsEmptyStateTests (TC-043), DarkModeStylesTests (TC-022),
TrialBannerTests (TC-076, TC-080), TrialWarningBannerTests (TC-033),
LocalizationTests (TC-136). All pass 2/2 consecutive runs.

Updated Feels_QA_Test_Plan.xlsx: 48 green (passing XCUITest coverage),
122 red (impossible/impractical for XCUITest — widgets, watch, Siri,
CloudKit multi-device, biometrics, HealthKit, StoreKit purchases,
iOS 26 ZStack accessibility issue blocking many settings buttons).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 08:40:05 -06:00
Trey t
c22d246865 Fix 25 audit issues: memory leaks, concurrency, performance, accessibility
Address findings from comprehensive audit across 5 workstreams:

- Memory: Token-based DataController listeners (prevent closure leaks),
  static DateFormatters, ImageCache observer cleanup, MotionManager
  reference counting, FoundationModels dedup guard
- Concurrency: Replace Task.detached with Task in FeelsApp (preserve
  MainActor isolation), wrap WatchConnectivity handler in MainActor
- Performance: Cache sortedGroupedData in DayViewViewModel, cache demo
  data in MonthView/YearView, remove broken ReduceMotionModifier
- Accessibility: VoiceOver support for LockScreen, DemoHeatmapCell
  labels, MonthCard button labels, InsightsView header traits,
  Smart Invert protection on neon headers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 09:11:48 -06:00
Trey t
b58dfd5093 Add XCUITest authoring docs and reusable prompt template 2026-02-18 09:00:28 -06:00
Trey t
56ac783219 Stabilize iOS UI test foundation and fix flaky suites 2026-02-17 22:24:08 -06:00