Project / Case study

Focusin. A small break,
a clearer return.

A native macOS companion for the moment between focus and fatigue.

I designed and built a menu bar utility that turns “I need a break” into one practical action. Choose how you feel and how much time you have. The rest stays small.

Explore the loop
Role
Product design + native macOS engineering
Platform
macOS 14+ · SwiftUI + AppKit
Experience
Native macOS build
Focusin’s native popover moving from a focus interval to an active micro-break, in light and dark appearance
Local engineering captures arranged to show the loop. Debug fixtures; unsigned build, not release media.

A reminder says when.
Focusin helps with what.

When attention is running low, choosing a useful break can feel like another task. I reduced that decision to two inputs: your current state and the time you have.

One optional reset, close to the work. No account, streak pressure, or network connection. General-wellness prompts, without clinical promises.

Focus. Reset.
Get back to it.

Choose a moment to inspect the actual interface. Completing, skipping, or finishing a timed break starts the next focus interval.

Focusin focusing popover with state and duration selectors and a recommended micro-break
September opaque-panel refinement · deterministic engineering fixture. Screen selection illustrates the app; it does not run a timer.

Keep your work in the foreground.

The interval lives in the menu bar. Open the popover to check the time, choose how you feel, or take an earlier break.

Why I designed it this way

A small utility should fit around work. The main interaction stays one click away, without a separate dashboard.

Small on screen.
Considered in use.

Recent work made the surfaces quieter, the controls easier to access, and recovery more explicit.

A surface that holds its own.

Opaque semantic panels keep desktop colors from bleeding through the popover. Light and dark appearances retain clear status, instructions, and actions.

A timer that doesn’t talk every second.

Stable VoiceOver progress semantics avoid countdown chatter. Settings actions expose named buttons, and larger text expands the layout.

Focusin native Activities and System settings with recommendation preferences and platform recovery controls
July Settings engineering fixtures. Historical supporting evidence; these captures predate the September popover refinement. Inspect full-size capture (new tab).

Desktop life is messy.
The loop should recover.

Select a situation to see the implemented behavior. These are explanations of the state contract, not live native-app simulations.

Time catches up when the Mac wakes.

What happens
The focus deadline passes while the Mac is asleep.
How it recovers
On wake, Focusin reconciles elapsed time and enters break due.

Dates are persisted; a missed countdown tick cannot extend the interval.

A local core, with optional platform services.

  1. Native interface

    SwiftUI popover and Settings; AppKit handles desktop lifecycle events.

  2. One state owner

    A MainActor store reconciles deadlines, activity identity, and reminders.

  3. Local persistence

    Codable settings and daily history; 21 bundled, reviewed activities.

What is verified

The recorded baseline covers 54 deterministic tests. Recorded native appearance and accessibility checks support the design.

Source-repository evidence, not usability or adoption metrics.

What comes next

Signing, exact-candidate platform checks, and the planned 5–8 person beta. No App Store release or user outcomes yet.

Verification evidence and release boundaries

Recorded checks

  • Fifty-four deterministic tests cover lifecycle, persistence, quiet hours, recommendation passes, catalog validation, permission reconciliation, and beta templates.
  • Twenty-one bundled activities pass state, duration, safety, and default-filter coverage validation, with named human content approval for version 0.1.0 (1).
  • Forty-one July appearance and accessibility captures cover light and dark modes, large text, increased contrast, reduced transparency, recovery states, and Settings. They predate the September opaque-panel refinement; three newer popover captures show that refinement. All remain engineering evidence rather than final release media.

Still open

  • Earlier local build and unsigned Release integrity checks are recorded. The 12 October 2026 native rerun is blocked by a missing SwiftUI macro plugin in the installed Command Line Tools; no signed archive, installable external beta, TestFlight build, or App Store listing exists yet.
  • Exact-candidate VoiceOver, notification, login-item, lifecycle, upgrade, and final-media checks remain open until a signed candidate exists.
  • The five-to-eight-person beta has not run, so the case study makes no usability, satisfaction, or real-world recommendation-quality claim.
MoreCurrent case studies

Explore the other current projects where product thinking is carried through interface, architecture, testing, and release.