Skip to content

Align Settings styling and shared glyphs with the redesigned onboarding#703

Merged
FuJacob merged 1 commit into
mainfrom
feat/settings-onboarding-theme-alignment
Jun 12, 2026
Merged

Align Settings styling and shared glyphs with the redesigned onboarding#703
FuJacob merged 1 commit into
mainfrom
feat/settings-onboarding-theme-alignment

Conversation

@FuJacob

@FuJacob FuJacob commented Jun 12, 2026

Copy link
Copy Markdown
Owner

Summary

The onboarding redesign (#701) and the Settings revamp (#699) landed in parallel with convergent but not identical design vocabularies. This PR closes the visible gaps so finishing onboarding and landing in Settings reads as one product: the brand palette is promoted to a shared CotabbyBrand (and the Settings Home hero logo now casts the same brand-blue glow as onboarding's welcome hero), the physical keycap chrome from the onboarding keys step is promoted to a shared KeycapView and replaces the flat gray pill in the Shortcuts pane, Settings permission rows derive their glyphs from CotabbyPermissionKind.systemImageName instead of hardcoding divergent symbols, and a new SuggestionEngineKind.systemImageName gives the engine one canonical glyph (apple.logo / cpu.fill) across the Home status card and onboarding's engine selector and tier footers, which previously disagreed (cpu.fill vs internaldrive).

Validation

swiftlint lint --quiet --strict
# exit 0

xcodebuild -project Cotabby.xcodeproj -scheme Cotabby -destination 'platform=macOS' \
  -configuration Debug build -derivedDataPath build/DerivedData
# ** BUILD SUCCEEDED **

xcodebuild test -project Cotabby.xcodeproj -scheme Cotabby -destination 'platform=macOS' \
  -derivedDataPath build/DerivedData \
  -skip-testing:CotabbyTests/FoundationModelDriftEvalTests \
  -skip-testing:CotabbyTests/ScreenshotContextGeneratorTests \
  CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO
# ** TEST SUCCEEDED ** Executed 1610 tests, with 6 tests skipped and 0 failures

Skip notes: same two environmental exclusions as #701 (drift eval mirrors CI; the screenshot-context class hangs while this machine is screen-locked and runs normally on CI).

Visual verification: rendered the Home, Shortcuts, and Permissions panes plus the onboarding template and keys steps off-screen via NSHostingView in light and dark (10 PNGs reviewed; saved locally, happy to attach). Confirmed: Shortcuts bindings render as the same raised keycaps onboarding shows (Tab / backtick / None), the Home hero glow is brand blue, permission rows show the canonical glyphs (keyboard.fill, rectangle.dashed.badge.record), and the onboarding engine cards show the shared cpu.fill glyph that the Home status card uses.

The new systemImageName contract is pinned in SuggestionEngineModelsTests.

Linked issues

Refs #701, #699 (the two parallel redesigns this reconciles).

Risk / rollout notes

  • Pure presentation; no behavior, persistence, or layout-structure changes. Recording/reset/clear flows in both shortcut surfaces are untouched.
  • OnboardingTheme is renamed to CotabbyBrand (now in Cotabby/UI/CotabbyBrand.swift); the onboarding-only layout constant moved to OnboardingLayout. Mechanical rename, no values changed.
  • The Open Source engine's glyph in onboarding changes from internaldrive to cpu.fill to match Settings; if we prefer the disk metaphor everywhere instead, it is a one-line change in SuggestionEngineKind.systemImageName.

Greptile Summary

This PR reconciles the design vocabulary between the onboarding redesign (#701) and the Settings revamp (#699) by promoting three previously-siloed primitives to shared, codebase-wide components. All changes are purely presentational with no effect on behavior, persistence, or recorded/reset flows.

  • CotabbyBrand extracts the brand-blue palette from the onboarding-only OnboardingTheme (renamed OnboardingLayout, now layout-constants only); every surface that references the brand color now reads from one place.
  • KeycapView promotes the private OnboardingKeycap struct so the Settings Shortcuts pane renders bindings with the same raised-keycap chrome as the onboarding keys step.
  • SuggestionEngineKind.systemImageName and the existing CotabbyPermissionKind.systemImageName are now the single source of glyphs for both onboarding and Settings, eliminating the internaldrive / cpu.fill disagreement; the new contract is pinned in SuggestionEngineModelsTests.

Confidence Score: 5/5

Pure presentation refactoring with no changes to behavior, persistence, or user-facing flows — safe to merge.

Every changed file is UI-only. The three promoted abstractions (CotabbyBrand, KeycapView, systemImageName) are mechanical lifts of existing, working code with values identical to what they replace. OnboardingTheme has zero remaining references after the rename, confirmed by grep. The new systemImageName switch is exhaustive with no default, so adding a future engine case will be a compile error rather than a silent wrong glyph. The pinning test locks the cross-surface glyph contract. Build and full test suite pass per the PR description.

No files require special attention — the most structurally interesting changes (the OnboardingTheme → CotabbyBrand/OnboardingLayout split and the PermissionsPaneView glyph delegation) are correct and verified against the model layer.

Important Files Changed

Filename Overview
Cotabby/UI/CotabbyBrand.swift New shared brand-color enum promoting OnboardingTheme colors to a wider-scope home; values are unchanged (#007AFF / lighter companion), comment correctly documents the intentional non-adaptive design.
Cotabby/UI/KeycapView.swift Promotion of the private OnboardingKeycap body to a shared, named KeycapView; chrome is identical to the original, no behavioral change.
Cotabby/Models/SuggestionEngineModels.swift Adds systemImageName computed property to SuggestionEngineKind; exhaustive switch with no default ensures compile-time coverage if new cases are added.
Cotabby/UI/Onboarding/OnboardingStyle.swift Renames OnboardingTheme to OnboardingLayout (retaining only horizontalPadding) and migrates all brand-color references to CotabbyBrand; zero remaining OnboardingTheme references in the codebase.
Cotabby/UI/Settings/Panes/PermissionsPaneView.swift Removes hardcoded systemImage string from SettingsPermissionRow call sites and derives the glyph from CotabbyPermissionKind.systemImageName; all glyph changes are intentional alignment with the model-layer source of truth.
Cotabby/UI/Settings/Panes/ShortcutsPaneView.swift Replaces the flat .quaternary-filled pill in KeybindRow with KeycapView(fontSize: 12, minWidth: 36), matching the raised-keycap chrome onboarding already shipped.
Cotabby/UI/Settings/Panes/HomePaneView.swift Swaps the logo's neutral black drop-shadow for a brand-blue glow (CotabbyBrand.accent, radius 16) and delegates the engine status-card glyph to systemImageName; purely cosmetic.
CotabbyTests/SuggestionEngineModelsTests.swift Adds a pinning test for both systemImageName values; correctly documents the cross-surface contract so any future accidental glyph drift will surface as a test failure.

Class Diagram

%%{init: {'theme': 'neutral'}}%%
classDiagram
    class CotabbyBrand {
        +accent: Color
        +accentSoft: Color
    }
    class KeycapView {
        +label: String
        +fontSize: CGFloat
        +minWidth: CGFloat
    }
    class SuggestionEngineKind {
        <<enum>>
        appleIntelligence
        llamaOpenSource
        +systemImageName: String
    }
    class CotabbyPermissionKind {
        <<enum>>
        +systemImageName: String
    }
    class OnboardingLayout {
        +horizontalPadding: CGFloat
    }
    class HomePaneView
    class ShortcutsPaneView
    class PermissionsPaneView
    class WelcomeKeybindStepView
    class WelcomeTemplateStepView
    class WelcomeView
    class OnboardingStyle

    OnboardingStyle ..> CotabbyBrand : accent/accentSoft
    OnboardingStyle ..> OnboardingLayout : horizontalPadding
    WelcomeKeybindStepView ..> KeycapView : shared chrome
    WelcomeTemplateStepView ..> CotabbyBrand : accent tints
    WelcomeTemplateStepView ..> SuggestionEngineKind : systemImageName
    WelcomeView ..> CotabbyBrand : logo shadow
    WelcomeView ..> OnboardingLayout : padding
    HomePaneView ..> CotabbyBrand : brand-blue glow
    HomePaneView ..> SuggestionEngineKind : systemImageName
    ShortcutsPaneView ..> KeycapView : shared chrome
    PermissionsPaneView ..> CotabbyPermissionKind : systemImageName
Loading

Reviews (1): Last reviewed commit: "feat(ui): align Settings styling with th..." | Re-trigger Greptile

The onboarding redesign (#701) and the Settings revamp (#699) landed in
parallel with convergent but not identical vocabularies. This closes the
gaps so a user who finishes onboarding lands in Settings that speak the
same language:

- Promote the brand palette to CotabbyBrand (shared file); onboarding's
  OnboardingTheme references rename, and the Settings Home hero logo now
  casts the same brand-blue glow as the onboarding welcome hero
- Promote the physical keycap to a shared KeycapView and render it in the
  Shortcuts pane's KeybindRow, replacing the flat quaternary pill, so a
  binding looks like the same object on both surfaces
- Permission rows in Settings derive their glyph from
  CotabbyPermissionKind.systemImageName instead of hardcoding divergent
  symbols, matching onboarding and the permission reminder
- Add SuggestionEngineKind.systemImageName (one canonical engine glyph:
  apple.logo / cpu.fill) and use it in the Home status card and
  onboarding's engine selector and tier-card footers, which previously
  disagreed (cpu.fill vs internaldrive)
@FuJacob FuJacob merged commit 0a8db14 into main Jun 12, 2026
4 checks passed
@FuJacob FuJacob deleted the feat/settings-onboarding-theme-alignment branch June 12, 2026 15:52
Sign up for free to 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