feat(dashboard): Phase 1 — SwiftUI migration of native dashboard - #11
Merged
Conversation
Brainstormed and designed SwiftUI migration plan for the native macOS dashboard with AI Summary, data visualization, mascot system, animations, and theme support across 4 phases.
Add 4 phase plans for the DashboardApp v2 SwiftUI migration: - Phase 1: SwiftUI migration of existing AppKit dashboard - Phase 2: Tabs + data visualization with Swift Charts - Phase 3: AI Summary integration via claude/codex CLI - Phase 4: Visual enhancements (mascot, animations, theme system) Each phase is independently releasable with bite-sized TDD tasks.
Adds ObservableObject ViewModel to back the SwiftUI DashboardApp migration. Tests for pure HelperCore progress functions pass; I/O function stubs resolved in Task 3.
Replace SwiftUI onKeyPress (requires focus) with NSEvent.addLocalMonitorForEvents so q/r/b shortcuts work reliably regardless of keyboard focus state.
Track key-window state via NSWindow notifications and dim content to 0.55 opacity when unfocused. Tap anywhere on the surface to force NSApp.activate + makeKeyAndOrderFront, ensuring Cmd+R/Cmd+B shortcuts reliably fire. configureWindow() also calls activate+makeKeyAndOrderFront on initial setup so the window grabs focus immediately on launch.
…hortcuts Replace NSEvent local monitor + NotificationCenter key-window observers with @focusstate, .onKeyPress, and @Environment(\.controlActiveState). Removes isWindowActive from the view model; opacity and keyboard focus are now driven entirely from SwiftUI's environment.
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.
Summary
DashboardApp v2 Phase 1: AppKit
DashboardApp/main.swift(429 lines)을 SwiftUI로 전면 마이그레이션. 기존 기능 1:1 포팅 + 여러 사용성 개선.Design spec:
docs/superpowers/specs/2026-04-17-dashboard-v2-design.mdImplementation plan:
docs/superpowers/plans/2026-04-17-dashboard-v2-phase1.mdChanges
Architecture:
DashboardAppMain.swift— SwiftUI@mainentry +NSApplicationDelegateAdaptorbridgeDashboardViewModel.swift—@MainActor ObservableObjectwith 1-second pollingSystemIO.swift— platform I/O (state/config load, launchd query, idle detection)CircularProgressRing.swift,StatusHeaderView.swift,TimerTabView.swift— SwiftUI viewsBreaking change:
.v12→.v14(required for.onKeyPress/controlActiveState; also prerequisite for Swift Charts in Phase 2)Usability fixes added during manual testing:
q/r/b) via physicalkeyCode(IME-independent — 한글 입력 상태에서도 동작)NSApp.activate+makeKeyAndOrderFrontcontrolActiveState→ opacity 1.0 when active, 0.55 when backgroundedTest plan
go test ./...passescd helpers && swift testpasses (55 tests)make buildsucceeds — all 3 Swift binaries + Go CLI builtbin/break-dashboardlaunches and shows correct statebin/break-reminder dashboard --guilaunches via CLI wrapperq/r/bshortcuts work (including Korean IME mode)