Skip to content

Commit 3991275

Browse files
momentmakerclaude
andcommitted
feat(welcome,about): App Review unblock + first-90s polish
- AboutView: new DATA SOURCES section with Apple Weather attribution + link to https://weatherkit.apple.com/legal-attribution.html (App Review 5.2.5 requirement; previous submission rejected for missing WeatherKit attribution). Keeps the wabi-sabi by living in About next to OPEN SOURCE instead of cluttering the Walk Summary. - WelcomeView: breath cue ("Take a breath. We're right with you.") beneath the walking-prints animation so users read the wait as intentional ritual rather than load time. Privacy promise on screen below the Begin button ("No accounts. Your recordings stay private — they never leave your device.") so the trust signal lands in the first 90 seconds instead of being buried in Settings. Follow-ups in issues #42 (profile launch latency) and #43 (onboarding delight pass — Wander Zoom energy on first launch). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 1c628b2 commit 3991275

3 files changed

Lines changed: 57 additions & 6 deletions

File tree

.blitz/project.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"createdAt" : "2026-03-21T22:51:27Z",
3+
"lastOpenedAt" : "2026-03-21T22:51:27Z",
4+
"name" : "pilgrim-ios",
5+
"platform" : "iOS",
6+
"type" : "swift"
7+
}

Pilgrim/Scenes/Settings/AboutView.swift

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ struct AboutView: View {
2929
}
3030
openSource
3131
divider
32+
dataSources
33+
divider
3234
motto
3335
seasonalVignette
3436

@@ -37,7 +39,7 @@ struct AboutView: View {
3739
.padding(.horizontal, Constants.UI.Padding.big)
3840
}
3941
.scrollContentBackground(.hidden)
40-
.canvasBackground()
42+
.background(Color.parchment)
4143
.navigationTitle("About")
4244
.navigationBarTitleDisplayMode(.inline)
4345
.toolbar {
@@ -75,11 +77,6 @@ struct AboutView: View {
7577
setAlternateIcon("AppIconDark")
7678
}
7779
}
78-
if UIApplication.shared.alternateIconName != "AppIconConstellation" {
79-
Button("Use constellation icon") {
80-
setAlternateIcon("AppIconConstellation")
81-
}
82-
}
8380
if let current = UIApplication.shared.alternateIconName, current != "AppIconDefault" {
8481
Button("Reset to default") {
8582
setAlternateIcon("AppIconDefault")
@@ -300,6 +297,31 @@ struct AboutView: View {
300297
}
301298
}
302299

300+
// MARK: - Data Sources
301+
302+
private var dataSources: some View {
303+
VStack(alignment: .leading, spacing: Constants.UI.Padding.normal - Constants.UI.Padding.xs) {
304+
Text("DATA SOURCES")
305+
.font(Constants.Typography.caption)
306+
.tracking(2)
307+
.foregroundColor(.stone.opacity(0.6))
308+
.padding(.top, Constants.UI.Padding.big)
309+
310+
Text("Weather conditions and temperature recorded with each walk are fetched at the start of the walk from Apple's WeatherKit service.")
311+
.font(Constants.Typography.body)
312+
.foregroundColor(.ink)
313+
314+
linkRow(
315+
icon: "cloud.sun",
316+
label: "\u{F8FF} Weather — Legal attribution",
317+
url: URL(string: "https://weatherkit.apple.com/legal-attribution.html")!
318+
)
319+
}
320+
.padding(.bottom, Constants.UI.Padding.big)
321+
.frame(maxWidth: .infinity, alignment: .leading)
322+
.sectionAppear(index: 4, appeared: appeared, reduceMotion: reduceMotion)
323+
}
324+
303325
// MARK: - Motto
304326

305327
private var motto: some View {

Pilgrim/Scenes/Setup/Welcome/WelcomeView.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,17 @@ struct WelcomeView: View {
5252
Spacer()
5353

5454
footprintsView
55+
56+
// Breath cue framing the walking-prints animation — turns dead
57+
// load time into intentional ritual so first-time users read
58+
// the wait as design, not latency.
59+
Text("Take a breath. We're right with you.")
60+
.font(Constants.Typography.caption.italic())
61+
.foregroundColor(.fog)
62+
.multilineTextAlignment(.center)
63+
.padding(.top, Constants.UI.Padding.small)
5564
.padding(.bottom, Constants.UI.Padding.big)
65+
.opacity(animation.showQuote ? 0.85 : 0)
5666

5767
Button(action: beginTapped) {
5868
Text(LS["Welcome.Begin"])
@@ -67,6 +77,18 @@ struct WelcomeView: View {
6777
.opacity(animation.showButton ? 1 : 0)
6878
.offset(y: animation.showButton ? 0 : 30)
6979
.disabled(animation.isExiting)
80+
81+
// Privacy promise on-screen at sign-up. Surfacing this here
82+
// (vs. burying it in Settings) earns trust in the first 90s
83+
// and signals Pilgrim's no-accounts, no-tracking posture
84+
// before the user is asked for anything.
85+
Text("No accounts. Your recordings stay private — they never leave your device.")
86+
.font(Constants.Typography.caption)
87+
.foregroundColor(.fog)
88+
.multilineTextAlignment(.center)
89+
.padding(.top, Constants.UI.Padding.normal)
90+
.opacity(animation.showButton ? 0.7 : 0)
91+
.accessibilityLabel("No accounts required. Your recordings stay private and never leave your device.")
7092
}
7193
.padding(.horizontal, Constants.UI.Padding.big)
7294
.padding(.bottom, Constants.UI.Padding.normal)

0 commit comments

Comments
 (0)