Skip to content

feat(ios): align illustrations and flow to BetterFit design system - #13

Merged
johnnyhuy merged 3 commits into
mainfrom
feat/refine-app-design
Jul 27, 2026
Merged

feat(ios): align illustrations and flow to BetterFit design system#13
johnnyhuy merged 3 commits into
mainfrom
feat/refine-app-design

Conversation

@johnnyhuy

Copy link
Copy Markdown
Contributor

Summary

Three commits that align BetterFit's iOS host app to the BetterFit design system.

  • `fix(iOS): remove invalid UIApplicationSceneManifest blocking launch` — the auto-generated scene manifest declared an empty `UISceneDelegateClassName`, which left the app on a black launch screen on iOS 26 simulators. Removing it lets SwiftUI's `WindowGroup` attach directly.
  • `feat(design): add identity tokens and BetterFit mark mascot` — the Ember mascot was rendered in ember orange, which the design system reserves for ordinary product actions. Adds `identity`, `identityInk`, and `identitySurface` tokens to `BFColors`, then re-renders the mascot as the BetterFit mark (three compressed yellow ovals with black features for contrast). Athlete illustrations on workout cards stay on ember product accent per the posture rule.
  • `feat(ios): lead with next action and tighten Workout/Plan layouts` — Workout home collapses seven metrics into a single conclusion line; the workout preview now reads from the currently-displayed suggested workout so `Target Muscles` stays in sync with `Up Next`; the Apple Health banner collapses two icon buttons into a single tappable card; Plan padding goes from 16 to 20 and the empty-day state becomes a clear primary CTA.

Consequences

  • No migrations, no schema changes, no dependency updates.
  • Existing SwiftUI build (BetterFitApp) targets iOS 17+ and watchOS 10+, unchanged.
  • Lint state is unchanged: 442 pre-existing violations, 25 pre-existing serious. None of these are introduced by this branch; the four files I edited are lint-clean apart from the same pre-existing violations that were there before the edit.
  • `BFIllustrations.swift` is a new file in the iOS host app (Demo-only, not in the BetterFit SwiftPM library).
  • `Info.plist` is gitignored (XcodeGen-generated); the corresponding `project.yml` change removes the manifest from the source-of-truth config.

Testing

  • `mise run test` — 95 tests passed, 0 failures.
  • `mise run ios:build:dev` — built cleanly on iPhone 16 / iOS 26.2.
  • Visual verification on iPhone 16 simulator: Workout home now reads identity → conclusion → streak → next action → start CTA; Plan reads week strip → rest-day label → proper empty-state CTA; Me shows the new mark mascot at 80pt with visible face features; target muscles (Triceps / Chest / Shoulders) populate correctly from the displayed workout.
  • Targeted UI regression `BetterFitAppUITests/TabNavigationUITests/testStartWorkoutButtonDoesNotOverlapContent` passes (16.9s).
  • SwiftPM video pipeline checks (23/23) pass; pipeline not affected by these changes.

johnnyhuyand others added 3 commits July 27, 2026 13:03
The auto-generated scene manifest declared an empty
UISceneDelegateClassName, which prevented UIKit from installing a
scene delegate and left the app on a black launch screen on
iOS 26 simulators. Removing the manifest lets SwiftUI's
WindowGroup attach directly.
Co-authored-by: opencode-agent <noreply@opencode.ai>
The mascot was rendered with the ember product accent, which the
design system reserves for ordinary product actions. Identity
yellow is for brand moments only, so the mascot now mirrors
the BetterFit mark (three compressed ovals in identity yellow
with black features for contrast) and a new `identity` token
lives in BFColors alongside identityInk and identitySurface.
The profile header swaps its generic avatar for the new
EmberMascot, and athlete illustrations on workout cards stay
on the ember product accent (correct per the posture rule).
Co-authored-by: opencode-agent <noreply@opencode.ai>
Restructure Workout home and Plan to follow the design-system
flow rule: lead with the next action or conclusion, then support
it; do not fill the screen with metrics.
Workout home:
- greeting 'Hello! Demo' -> 'Hello, Demo' (proper comma, single
voice, no debug-flag feel)
- workout overview collapses seven metrics into one
conclusion line + recovery %; the category split was an
echo of the heatmap below
- workout preview reads from the currently-displayed suggested
workout, so Target Muscles stays in sync with Up Next
- Apple Health banner collapses two icon buttons into a single
tappable card; long-press exposes Dismiss
Plan:
- page padding 16 -> 20 per spec
- empty-day state becomes a clear 'Add exercises' primary CTA
on a 16pt card instead of a dashed ghost button
- recovery row corner radius aligned to BFRadius.card
Co-authored-by: opencode-agent <noreply@opencode.ai>
@johnnyhuy
johnnyhuy merged commit 59b1863 into mainJul 27, 2026
8 of 11 checks passed
@johnnyhuy
johnnyhuy deleted the feat/refine-app-design branch July 27, 2026 03:05
@github-actionsgithub-actionsBot mentioned this pull request Jul 26, 2026
johnnyhuy added a commit that referenced this pull request Aug 9, 2026
* fix(iOS): remove invalid UIApplicationSceneManifest blocking launch
The auto-generated scene manifest declared an empty
UISceneDelegateClassName, which prevented UIKit from installing a
scene delegate and left the app on a black launch screen on
iOS 26 simulators. Removing the manifest lets SwiftUI's
WindowGroup attach directly.
Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
* feat(design): add identity tokens and BetterFit mark mascot
The mascot was rendered with the ember product accent, which the
design system reserves for ordinary product actions. Identity
yellow is for brand moments only, so the mascot now mirrors
the BetterFit mark (three compressed ovals in identity yellow
with black features for contrast) and a new `identity` token
lives in BFColors alongside identityInk and identitySurface.
The profile header swaps its generic avatar for the new
EmberMascot, and athlete illustrations on workout cards stay
on the ember product accent (correct per the posture rule).
Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
* feat(ios): lead with next action and tighten Workout/Plan layouts
Restructure Workout home and Plan to follow the design-system
flow rule: lead with the next action or conclusion, then support
it; do not fill the screen with metrics.
Workout home:
- greeting 'Hello! Demo' -> 'Hello, Demo' (proper comma, single
voice, no debug-flag feel)
- workout overview collapses seven metrics into one
conclusion line + recovery %; the category split was an
echo of the heatmap below
- workout preview reads from the currently-displayed suggested
workout, so Target Muscles stays in sync with Up Next
- Apple Health banner collapses two icon buttons into a single
tappable card; long-press exposes Dismiss
Plan:
- page padding 16 -> 20 per spec
- empty-day state becomes a clear 'Add exercises' primary CTA
on a 16pt card instead of a dashed ghost button
- recovery row corner radius aligned to BFRadius.card
Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
---------
Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
@github-actionsgithub-actionsBot mentioned this pull request Aug 9, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@johnnyhuy