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>
This commit is contained in:
Trey t
2025-12-26 23:53:35 -06:00
parent 53eb953b77
commit a0b30d8bae
8 changed files with 4084 additions and 77 deletions

View File

@@ -558,8 +558,37 @@
"comment" : "A symbol that appears before a command in a terminal interface.",
"isCommentAutoGenerated" : true
},
"✨" : {
},
"🌈" : {
},
"🎉" : {
"comment" : "A smiling face emoji.",
"isCommentAutoGenerated" : true
},
"🎨" : {
"comment" : "An emoji used as a preview for a theme in the CustomizeContentView.",
"isCommentAutoGenerated" : true
},
"💫" : {
},
"😄" : {
"comment" : "A smiling face emoji.",
"isCommentAutoGenerated" : true
},
"😊" : {
"comment" : "A playful emoji used in the lock screen view.",
"isCommentAutoGenerated" : true
},
"12" : {
},
"12 curated combinations of colors, icons, and layouts" : {
"comment" : "A description of the 12 color, icon, and layout combinations available in the theme picker.",
"isCommentAutoGenerated" : true
},
"17" : {
@@ -1190,8 +1219,8 @@
"comment" : "An accessibility label for the section of the settings view that indicates that Apple Health is not available on the user's device.",
"isCommentAutoGenerated" : true
},
"are safe here" : {
"comment" : "A description of the safety of the app's \"Aurora background\".",
"Apply %@ Theme" : {
"comment" : "A button that, when tapped, applies a theme to the app. The label inside the button changes to reflect the name of the theme being applied.",
"isCommentAutoGenerated" : true
},
"Are you sure you want to delete this mood entry? This cannot be undone." : {
@@ -1321,10 +1350,6 @@
}
}
},
"Authenticate to continue your journey" : {
"comment" : "A description of the action required to unlock the app.",
"isCommentAutoGenerated" : true
},
"Authentication Failed" : {
"comment" : "An alert title when authentication fails.",
"isCommentAutoGenerated" : true,
@@ -1367,6 +1392,10 @@
}
}
},
"Browse Themes" : {
"comment" : "A suggestion to the user to explore different color and layout combinations.",
"isCommentAutoGenerated" : true
},
"Build Your Streak!" : {
"comment" : "A title for a tip that encourages users to build a mood streak.",
"isCommentAutoGenerated" : true,
@@ -1787,6 +1816,10 @@
}
}
},
"Choose Your Vibe" : {
"comment" : "A title displayed at the top of the view, encouraging the user to choose a theme.",
"isCommentAutoGenerated" : true
},
"Clarity through simplicity.\nPremium unlocks understanding." : {
"comment" : "A description of the benefits of the premium subscription.",
"isCommentAutoGenerated" : true
@@ -4506,6 +4539,10 @@
"comment" : "A hint that appears when tapping on an icon to select it.",
"isCommentAutoGenerated" : true
},
"Each theme combines colors, icons, layouts, and styles into a cohesive experience." : {
"comment" : "A description of how themes work.",
"isCommentAutoGenerated" : true
},
"Edit" : {
"comment" : "A button label that triggers the editing of a journal note.",
"isCommentAutoGenerated" : true,
@@ -4548,6 +4585,13 @@
}
}
},
"Elevate Your\nEmotional Life" : {
},
"ELEVATE YOUR\nEXPERIENCE" : {
"comment" : "A title for the section that describes the premium theme.",
"isCommentAutoGenerated" : true
},
"Entries" : {
"comment" : "A label describing the number of mood entries.",
"isCommentAutoGenerated" : true,
@@ -4674,10 +4718,18 @@
}
}
},
"Every entry tells your story.\nPremium unlocks the full narrative." : {
"comment" : "A description of the premium feature, emphasizing the narrative aspect of journaling.",
"isCommentAutoGenerated" : true
},
"Every feeling is a seed.\nPremium helps you grow." : {
"comment" : "A description of the premium subscription's benefits.",
"isCommentAutoGenerated" : true
},
"Every feeling is a track.\nPremium gives you the full album." : {
"comment" : "A description of the premium subscription that highlights the unlimited access to all tracks.",
"isCommentAutoGenerated" : true
},
"Exit" : {
"comment" : "A button label that dismisses the current view.",
"isCommentAutoGenerated" : true,
@@ -5025,6 +5077,13 @@
}
}
}
},
"Feel It All" : {
"comment" : "The title of a section that highlights the premium feature of the app.",
"isCommentAutoGenerated" : true
},
"Feel With\nAll Your Heart" : {
},
"Feels" : {
"comment" : "The name of the widget.",
@@ -5068,6 +5127,10 @@
}
}
},
"FEELS" : {
"comment" : "The name of the app.",
"isCommentAutoGenerated" : true
},
"Feels Icon" : {
"comment" : "Name of the widget configuration.",
"isCommentAutoGenerated" : true,
@@ -5153,6 +5216,10 @@
}
}
},
"FEELS MIXTAPE" : {
"comment" : "The name of the premium subscription experience.",
"isCommentAutoGenerated" : true
},
"filter_view_total" : {
"extractionState" : "manual",
"localizations" : {
@@ -5199,6 +5266,13 @@
}
}
}
},
"Find Your\nInner Calm" : {
"comment" : "A title describing the main benefit of the premium subscription.",
"isCommentAutoGenerated" : true
},
"Find Your\nInner Peace" : {
},
"Fix Weekday" : {
"comment" : "A button label that, when tapped, will attempt to correct the user's calendar entries that are set to the wrong weekday.",
@@ -5933,6 +6007,10 @@
"comment" : "A description of the social proof badge.",
"isCommentAutoGenerated" : true
},
"JOURNAL" : {
"comment" : "The title of the journal.",
"isCommentAutoGenerated" : true
},
"Journal Note" : {
"comment" : "The title of the view that appears in the navigation bar.",
"isCommentAutoGenerated" : true,
@@ -6099,6 +6177,14 @@
}
}
},
"Level up your self-awareness.\nPremium = MAX POWER!" : {
"comment" : "A tagline describing the premium subscription and its benefits.",
"isCommentAutoGenerated" : true
},
"Like ink on paper, each mood\nleaves its mark. Premium reveals the pattern." : {
"comment" : "A description of how the premium version reveals patterns in user moods.",
"isCommentAutoGenerated" : true
},
"Log Mood" : {
"comment" : "A button that opens Feels to log a mood.",
"isCommentAutoGenerated" : true,
@@ -6349,6 +6435,9 @@
}
}
}
},
"Make Tracking\nFun Again!" : {
},
"Manage" : {
"comment" : "A button that allows the user to manage their subscription.",
@@ -6736,6 +6825,10 @@
}
}
},
"MOOD UNLOCKED! 🎮" : {
"comment" : "A catchy title for the premium subscription content.",
"isCommentAutoGenerated" : true
},
"Mood Vote" : {
"comment" : "The display name of the widget configuration.",
"isCommentAutoGenerated" : true,
@@ -8933,6 +9026,10 @@
}
}
},
"Predict your patterns.\nPrepare for any weather." : {
"comment" : "A description of the premium feature, \"Your Emotional Forecast\", that appears below the title.",
"isCommentAutoGenerated" : true
},
"Premium Active" : {
"localizations" : {
"de" : {
@@ -8973,6 +9070,10 @@
}
}
},
"Premium Edition" : {
"comment" : "A title for the premium edition of the app.",
"isCommentAutoGenerated" : true
},
"Premium Feature" : {
"comment" : "A label indicating a premium feature.",
"isCommentAutoGenerated" : true,
@@ -9019,6 +9120,10 @@
"comment" : "A description of a premium feature that requires a subscription.",
"isCommentAutoGenerated" : true
},
"Premium refinement for those\nwho expect the finest." : {
"comment" : "A description of the premium theme, highlighting its exclusivity and superior quality.",
"isCommentAutoGenerated" : true
},
"Preview" : {
},
@@ -12538,6 +12643,24 @@
}
}
}
},
"THE" : {
"comment" : "The first word of the title of the magazine.",
"isCommentAutoGenerated" : true
},
"THE ART\nOF FEELING" : {
},
"Themes" : {
"comment" : "The title of the view where they can choose different themes.",
"isCommentAutoGenerated" : true
},
"Themes set all four options at once" : {
"comment" : "An explanatory note about how themes affect all four settings.",
"isCommentAutoGenerated" : true
},
"This theme includes" : {
},
"Tip: \"Yesterday\" works great for evening reminders" : {
"comment" : "A tip displayed below the \"Today\" and \"Yesterday\" options in the onboarding flow.",
@@ -13217,6 +13340,10 @@
}
}
},
"Unlock the complete story\nof your emotional landscape." : {
"comment" : "A description of the premium edition of the app.",
"isCommentAutoGenerated" : true
},
"Unlock the Full\nExperience" : {
"comment" : "A title displayed in the onboarding view, promoting the full experience that can be unlocked with a subscription.",
"isCommentAutoGenerated" : true,
@@ -13995,6 +14122,9 @@
}
}
}
},
"Write Your\nEmotional Story" : {
},
"Year in Review" : {
"comment" : "A description below the year's mood breakdown.",
@@ -14080,6 +14210,10 @@
}
}
},
"You can still customize individual settings after applying a theme" : {
"comment" : "A note explaining that users can still customize individual settings after applying a theme.",
"isCommentAutoGenerated" : true
},
"You don't have a streak yet. Log your mood today to start one!" : {
"comment" : "Text displayed in a notification when a user has not logged a mood for the current day.",
"isCommentAutoGenerated" : true,
@@ -14290,12 +14424,24 @@
}
}
},
"Your Emotional\nForecast" : {
"comment" : "The title of the section that describes the main feature of the premium subscription.",
"isCommentAutoGenerated" : true
},
"Your emotions tell a story.\nPremium helps you read it." : {
"comment" : "A subheadline describing the benefits of the premium subscription.",
"isCommentAutoGenerated" : true
},
"Your Feelings" : {
"comment" : "The title of the main screen in the lock screen.",
"Your heart knows the way.\nPremium helps you listen." : {
"comment" : "A description of the premium subscription service, emphasizing its ability to help users listen to their hearts.",
"isCommentAutoGenerated" : true
},
"YOUR MOOD\nMIXTAPE" : {
"comment" : "The title of the mixtape theme's main content.",
"isCommentAutoGenerated" : true
},
"Your Personal\nDiary" : {
"comment" : "The title of the premium subscription feature.",
"isCommentAutoGenerated" : true
}
},