Skip to content

fix(desktop): unify onboarding step UI — consistent dark theme with top bar#6026

Merged
kodjima33 merged 1 commit into
mainfrom
worktree-fix-onboarding-ux
Mar 25, 2026
Merged

fix(desktop): unify onboarding step UI — consistent dark theme with top bar#6026
kodjima33 merged 1 commit into
mainfrom
worktree-fix-onboarding-ux

Conversation

@kodjima33
Copy link
Copy Markdown
Collaborator

All 5 post-chat steps now use same layout: dark bg, top header bar with Skip, centered content. No more split-pane grey/white/yellow inconsistency.

…op bar

Both shortcut steps (keyboard + voice) were using a split-pane layout
with light/yellow right pane, no top bar, and Skip buried in the corner.
The demo and tasks steps used a clean single-pane dark layout with a
top header bar.

Now all 5 post-chat onboarding steps use the same pattern:
- Dark background (OmiColors.backgroundPrimary)
- Top header bar with step title + Skip button
- Centered content area
- Consistent dark theme colors throughout

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@kodjima33 kodjima33 merged commit 2251cba into main Mar 25, 2026
1 check passed
@kodjima33 kodjima33 deleted the worktree-fix-onboarding-ux branch March 25, 2026 07:11
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 25, 2026

Greptile Summary

This PR unifies the layout of two onboarding steps (OnboardingFloatingBarShortcutStepView and OnboardingVoiceShortcutStepView) to match the rest of the post-chat onboarding flow. Both views are refactored from a split HStack (left descriptive pane + gradient-tinted right pane) to a single-column VStack with a fixed top header bar (title + Skip button), a divider, and a centered content area — consistent with the dark OmiColors.backgroundPrimary theme used across the other onboarding steps.

Key changes:

  • Layout: Two-column HStack → single-column VStack with header bar + centered content in both files.
  • Color tokens: All hardcoded Color.white, Color.black.opacity(…), hex gradients, and warm-white card fills replaced with OmiColors semantic tokens (backgroundPrimary/Secondary/Tertiary, textPrimary/Secondary/Tertiary).
  • Hint text removed: Both steps dropped the "Try pressing the shortcut now" / "Try asking: 'What's on my screen?'" prompt that appeared before the Continue button unlocked. The content titles were slightly updated to compensate, but the secondary descriptive paragraphs from the old left pane are gone.
  • Border strokes removed: The 1pt stroke overlay on unselected shortcut-choice buttons was dropped in both files. If backgroundSecondary lacks sufficient contrast against backgroundPrimary, button affordance may be reduced.
  • Shadows removed: Drop shadows on keycaps were removed, which is appropriate for a dark theme.
  • All functional behaviour (key monitor setup/teardown, PTT state observation, shortcut cycling, animated Continue button reveal) is preserved.

Confidence Score: 5/5

  • This PR is safe to merge — it is a pure UI refactoring with no logic changes.
  • All functional code (event monitoring, PTT state observation, shortcut cycling, animated button reveal) is identical to the original. The only runtime-visible changes are visual: color tokens, layout structure, removed shadows, and removed instructional hint text. No new state, no new side-effects, no threading changes.
  • No files require special attention beyond the minor button-border contrast noted in the inline comments.

Important Files Changed

Filename Overview
desktop/Desktop/Sources/OnboardingFloatingBarShortcutStepView.swift Refactored from a two-pane HStack layout to a single-column VStack with a top header bar. Logic (key monitor install/teardown, shortcut cycling, continue-button unlock) is unchanged. All hardcoded Color.white/Color.black.opacity(…) and gradient fills replaced with OmiColors tokens. Minor: unselected shortcut-choice buttons lost their 1pt stroke overlay.
desktop/Desktop/Sources/OnboardingVoiceShortcutStepView.swift Same pane-to-VStack layout unification as the keyboard shortcut step. PTT state machine and onAppear/onDisappear/onChange handlers moved to the top-level view and are functionally identical to before. Content title updated from generic "Press this shortcut" to the PTT-appropriate "Press and hold to test." Minor: same unselected button border removal as the other file.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A([View appears]) --> B[onAppear\nunregisterShortcuts / installKeyMonitor\nor setup FloatingControlBar + PTT]
    B --> C[Header Bar\nTitle + Skip button]
    C --> D[Content Area\nShortcut key preview\nChoice buttons\nChange Shortcut button]
    D --> E{Shortcut\ndetected?}
    E -- No --> D
    E -- Yes --> F[Animate in\nContinue button]
    F --> G([onComplete callback])
    C -- Skip --> H([onSkip callback])
    A -.->|onDisappear| I[removeMonitor\nregisterShortcuts\nor toggleAIInput]
Loading

Reviews (1): Last reviewed commit: "fix(desktop): unify onboarding step UI —..." | Re-trigger Greptile

Comment on lines +58 to 68
VStack(spacing: 12) {
Text("Choose a different shortcut:")
.font(.system(size: 14, weight: .medium))
.foregroundColor(OmiColors.textSecondary)

RoundedRectangle(cornerRadius: 16, style: .continuous)
.fill(Color(red: 0.95, green: 0.94, blue: 0.92))
.frame(height: 128)
.overlay {
shortcutKeyPreview
}

VStack(alignment: .leading, spacing: 12) {
Text("Choose a different shortcut:")
.font(.system(size: 14, weight: .medium))
.foregroundColor(Color.black.opacity(0.68))

HStack(spacing: 10) {
ForEach(ShortcutSettings.AskOmiKey.allCases, id: \.self) { key in
shortcutChoiceButton(key)
}
HStack(spacing: 10) {
ForEach(ShortcutSettings.AskOmiKey.allCases, id: \.self) { key in
shortcutChoiceButton(key)
}
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Unselected choice buttons have no visible border

The old layout had a 1pt stroke on shortcut choice buttons (both selected and unselected) to define their hit area:

.overlay(
    RoundedRectangle(cornerRadius: 12, style: .continuous)
        .stroke(isSelected ? OmiColors.purplePrimary : Color.black.opacity(0.08), lineWidth: 1)
)

This overlay was removed in both files. On a dark background, the unselected state now relies entirely on OmiColors.backgroundSecondary fill for visibility. If backgroundSecondary is close in luminance to backgroundPrimary, the buttons may be hard to perceive as tappable targets.

Consider either re-adding a subtle border or verifying that the secondary/primary background contrast is sufficient in both light and dark appearances.

Comment on lines +57 to 67
VStack(spacing: 12) {
Text("Try another key if it doesn't react:")
.font(.system(size: 14, weight: .medium))
.foregroundColor(OmiColors.textSecondary)

RoundedRectangle(cornerRadius: 16, style: .continuous)
.fill(Color(red: 0.95, green: 0.94, blue: 0.92))
.frame(height: 128)
.overlay {
shortcutKeyPreview
}

VStack(alignment: .leading, spacing: 12) {
Text("Try another key if it doesn't react:")
.font(.system(size: 14, weight: .medium))
.foregroundColor(Color.black.opacity(0.68))

HStack(spacing: 10) {
ForEach(ShortcutSettings.PTTKey.allCases, id: \.self) { key in
shortcutChoiceButton(key)
}
HStack(spacing: 10) {
ForEach(ShortcutSettings.PTTKey.allCases, id: \.self) { key in
shortcutChoiceButton(key)
}
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Same unselected border removal applies here

Same as OnboardingFloatingBarShortcutStepView — the shortcutChoiceButton stroke overlay was removed, leaving only the backgroundSecondary fill to distinguish the buttons from the surrounding backgroundPrimary background. Ensure adequate contrast or re-add a low-opacity stroke for the unselected state.

Glucksberg pushed a commit to Glucksberg/omi-local that referenced this pull request Apr 28, 2026
…op bar (BasedHardware#6026)

All 5 post-chat steps now use same layout: dark bg, top header bar with
Skip, centered content. No more split-pane grey/white/yellow
inconsistency.
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