feat(paywall): enhance onboarding with rich backgrounds and intro pricing

- Add themed backgrounds for each onboarding feature page:
  - Unlimited Trips: animated route map with dotted paths and traveling car
  - Export & Share: floating documents with radiating share lines
  - Track Your Journey: stadium map with pins and achievement badges
- Add sports-themed pricing page background with random glow effects
- Display introductory offer pricing in subscription rows
- Add feature bullets to each onboarding page for better value prop
- Add crown icon header and feature pills to pricing page
- Add debug button in Settings to preview onboarding flow
- Create StoreKit configuration file for testing IAP

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-13 20:07:47 -06:00
parent 76a6958f5e
commit bb332ade3c
3 changed files with 922 additions and 74 deletions

View File

@@ -10,6 +10,7 @@ struct SettingsView: View {
@State private var viewModel = SettingsViewModel()
@State private var showResetConfirmation = false
@State private var showPaywall = false
@State private var showOnboardingPaywall = false
var body: some View {
List {
@@ -33,6 +34,11 @@ struct SettingsView: View {
// Reset
resetSection
#if DEBUG
// Debug
debugSection
#endif
}
.scrollContentBackground(.hidden)
.themedBackground()
@@ -44,6 +50,9 @@ struct SettingsView: View {
} message: {
Text("This will reset all settings to their default values.")
}
.sheet(isPresented: $showOnboardingPaywall) {
OnboardingPaywallView(isPresented: $showOnboardingPaywall)
}
}
// MARK: - Theme Section
@@ -246,6 +255,31 @@ struct SettingsView: View {
.listRowBackground(Theme.cardBackground(colorScheme))
}
// MARK: - Debug Section
#if DEBUG
private var debugSection: some View {
Section {
Button {
showOnboardingPaywall = true
} label: {
Label("Show Onboarding Flow", systemImage: "play.circle")
}
Button {
UserDefaults.standard.removeObject(forKey: "hasSeenOnboardingPaywall")
} label: {
Label("Reset Onboarding Flag", systemImage: "arrow.counterclockwise")
}
} header: {
Text("Debug")
} footer: {
Text("These options are only visible in debug builds.")
}
.listRowBackground(Theme.cardBackground(colorScheme))
}
#endif
// MARK: - Subscription Section
private var subscriptionSection: some View {