feat(onboarding): responsive fit-to-viewport + copy polish + celebratory finale#75
Merged
Merged
Conversation
Onboarding steps 1/2/5 were each wrapped in a ScrollView with fixed Pro-Max dimensions, so content overflowed and scrolled on smaller iPhones (tiles clipped behind the footer). Rework them to fit centered with no scroll on every size. - New OnboardingLayout.swift: OnboardingFittedBand — a GeometryReader band that derives a scale s = clamp(height/560, 0.80…1.06) and centers content with a Spacer pair. Scaled dims = base*s; button heights stay fixed (56/52/44). Dynamic-Type accessibility sizes fall back to the original ScrollView bodies. Also hosts the shared FittedOnboardingHeader + CompactOnboardingHeader. - Step 1 (Welcome): rebuilt on the fitted band; fixed even-height 1-line tiles (was height 118 + lineLimit 2 → uneven wrap/clipping); shorter tile copy; header subtitle; 'Explore without ring' demoted from a capsule to a quiet text button (Get started stays primary). - Step 5 (Baseline): redesigned finale — animated success medallion, largeTitle 'You're all set', and a connected vertical glass timeline (Today / First sync / Days 3–7), centered so the dead gap is gone. Button → 'Start using PulseLoop'. - Step 2 (Pairing): fitted band for the default state only (scanning/connected/ accessibility keep ScrollView); carousel height derived from the ring-art size; 'Skip for now' → text button; 'Connect ring' → 'Connect my ring'. - Steps 3/4 (Profile/Goals): kept scrollable (forms); share the header for visual consistency, no behavior change. All animations gated behind Reduce Motion; tap targets >= 44pt.
…o satisfy SwiftLint large_tuple
# Conflicts: # PulseLoop/Views/PairingView.swift
saksham2001
approved these changes
Jul 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Overhauls onboarding so every step fits centered with no scroll on every iPhone (SE/mini → Pro Max), fixes the feature-tile text, clarifies button hierarchy, and redesigns the plain "You're ready" finale.
The problem
Steps 1/2/5 were each a
ScrollViewwith fixed Pro-Max dimensions → on smaller iPhones the content overflowed and scrolled (Step-1 tiles clipped behind the footer; Step-5 had a big dead gap).Changes
OnboardingLayout.swift—OnboardingFittedBand: aGeometryReaderband that derives a scales = clamp(height/560, 0.80…1.06)and centers content with aSpacerpair. Scaled dimensions =base*s; button heights stay fixed (56/52/44). Dynamic-Type accessibility sizes fall back to the original ScrollView bodies (no-scroll can't hold at AX type). Also hosts the shared header components.height 118+lineLimit(2)→ uneven wrapping/clipping); shorter tile copy; header subtitle; "Explore without ring" demoted to a quiet text button (Get started stays the primary capsule).largeTitle"You're all set", and a connected vertical glass timeline (Today / First sync / Days 3–7), centered so the dead gap is gone. Button → "Start using PulseLoop".Notes
#080A0F).