First run end to end: welcome pages, a permission step and a trial offer, then into the app.
A complete first run on one screen: onboarding pages, a fully configurable permission step and an optional paywall handoff, joined by shared-axis pushes with an injectable completion key so it runs once.
$199 once, every piece included. See how installing works · Sign in
SwiftUI source you own, built on Apple frameworks only.
PermissionStep, or none.poster layout that carries the Welcome posters through every stepWelcome. Installed together, automatically.
Editorial (style), Subscription Utility (brief), Onboarding to Paywall (recipe). Your agent builds around this screen in the same design.
Subscription App (template), Meditation App (template), Travel App (template)
How it behaves, what it handles, and the decisions behind it.
Composes OnboardingStack, a permission step and an optional paywall, moving between them with shared-axis pushes. The permission step is a private sheet with an icon tile, benefit rows and requesting, granted and denied states; a denial swaps the copy and offers Open Settings. Every string comes from PermissionStep, and PermissionStep.notifications(...) wires UNUserNotificationCenter for you while still taking your copy. Completion is stored in AppStorage under an injectable completionKey.
finish closure: paywall: { done in GlassPaywallScreen(productIDs: ids, features: f, onUnlocked: done, onDismiss: done) }.permission: nil to skip the permission step; use the Paywall == EmptyView initializer to skip the paywall..success on grant, .warning on denial.layout: .poster carries the Welcome posters through the flow: the permission step becomes a poster with a large badge and benefits on overlapping color rows, and steps slide side by side as whole screens, so no frame shows two steps over each other. .fullBleed (the default) keeps the shared-axis cross-fade.OnboardingPoster is public, so a paywall step can match the posters (the example's trial offer does).OnboardingFlowScreenScreenExample at the end of OnboardingFlowScreen.swift is the Onboarding screen from the preview; OnboardingFlowScreenExample below it is the full-bleed version the Subscription template uses.SPTheme from @Environment(\.spTheme) and needs the design-system item; one .environment(\.spTheme, YourTheme()) re-skins every step.theme.color.bg behind all steps. The benefits card sits on .spSurface(.e1, in:), and the icon tile and primary buttons use accent with an accentOn label.theme.type.display, so a theme's display font (for example the serif in PaperTheme) carries through the pages and the permission step.Pieces that work well next to this one.