A focus session with a dial you drag to set minutes and a ring that drains as you work.
A focus timer: drag the dial to set minutes with haptic detents, Start morphs it into a draining ring on a date-anchored clock, with pause and resume, session dots and a success pulse.
$199 once, every piece included. See how installing works · Sign in
SwiftUI source you own, built on Apple frameworks only.
Graphic (style), Productivity (brief). Your agent builds around this screen in the same design.
Productivity App (template)
How it behaves, what it handles, and the decisions behind it.
Drag anywhere on the dial and the arc follows the finger, snapping to one-minute detents with a light tick and a heavier one every five. Start fades the ticks, thickens the arc into a ring and shrinks the knob away; the digits in the center count down with numericText while the ring drains. Pause holds the remaining time, Resume re-anchors it, and reaching zero pulses the ring with a success haptic and fills the next session dot.
Date, not a counter: TimelineView derives the remaining time from it, a .task(id:) sleeps until the end date to fire completion, and a scene-phase check catches sessions that finished while the app was in the background.range (at least 60), so a 90-minute range reads as a 90-minute dial.FocusTimerExample at the end of FocusTimer.swift is the screen shown in the preview; copy it as a starting point.Pieces that work well next to this one.