Skip to content
Andrew Voirol
WorkLogAboutContact
HomeWorkLog

AboutContact

✦ Just one prompt away from figuring it all out.

Friday, August 14, 2026personal-pomodoro-build

Two bugs and the tab overflow nobody saw coming

Apple Silicon

Eighteen files compiled, the app appeared in my menu bar, and nothing worked. The πŸ… icon was there. The popover opened. The timer showed 25:00. But clicking Start did nothing. Tapping the tab buttons β€” Timer, Break, Stats, Settings β€” nothing. The entire UI was a museum exhibit: look but don't touch. The issue: SwiftUI's default activation model inside an NSPopover doesn't make the popover the key window, so button targets never receive focus. The fix required explicit NSApp.activate(ignoringOtherApps: true) on popover show and rewiring the view hierarchy to use @State-driven tab switching instead of relying on implicit focus. Four minutes, three files rewritten, one rebuild β€” and the controls came alive. Then the user (me) reported tab label overflow: "Timer," "Break," "Stats," "Settings" crammed into a 330px popover was clipping text. Replaced text labels with SF Symbol icon pills β€” timer, leaf.fill, chart.bar.fill, gearshape β€” which fixed the width budget and looked better anyway. In the same pass, the timer's DispatchSourceTimer wasn't initializing on Start because the state machine expected a ready β†’ running transition that the UI wasn't triggering. Wired the button directly to TimerManager.start() and the countdown began ticking. Total debug time from "nothing works" to "everything works": about six minutes. The 14-minute headline is real, but the honest story is 14 minutes to render + 6 minutes to respond.

← Previous

Stats dashboard, sound picker, and shipping dockless

Next β†’

The 320% hair slider that bounces when I talk


Andrew Voirol

Builder, hacker, shipper. Currently leaving localhost.

Navigate

WorkBuilder’s LogAboutContactRSS Feed

Connect

X / TwitterGitHubLinkedIn

Β© 2026 Andrew VoirolΒ·Back to top ↑
✦Just one prompt away from figuring it all out.