Flagship native product case study

Focusin

A local-first macOS utility that turns the moment a focus interval ends into one practical reset—without opening a dashboard or asking the user to invent the next step.

Implementation

Locally verified

Role

Product, UX, SwiftUI, release

Runtime

Native macOS 14+

Year

2026

Inspect source

Product premise

The useful break is one choice away.

State and available time narrow a reviewed local catalog to one optional action. Completing or skipping it closes the loop and starts focus again.

21

reviewed activities

0

accounts or network calls

Focusin menu bar interface showing a running focus interval and a state-aware micro-break recommendation
Current deterministic debug-fixture capture used as engineering evidence; signed-candidate media remains open.
FlowA small state machine

Four states carry the whole product.

The interface stays compact because the lifecycle is explicit. One store owns the graph on MainActor; dates remain the source of truth when the app wakes, relaunches, or observes time changes.

  1. 01

    Ready

    Start a focus interval or take a reset immediately.

  2. 02

    Focusing

    A wall-clock deadline remains authoritative through sleep and relaunch.

  3. 03

    Break due

    The app recommends one safe activity; a notification is optional.

  4. 04

    Breaking

    Done, Skip, or natural expiry records variety and begins focus again.

Breaking returns to Focusing, so the fourth state closes the loop back to the second.

Focusin active break screen with Window Breath recommendation, progress, Done, and Skip controls
The active break keeps progress, completion, and a respectful escape route visible in one compact surface.

The local loop does not depend on platform permission.

Notifications and launch-at-login improve reach, but neither controls the product state. Their adapters report real macOS status while the focus and break lifecycle continues locally.

Denied notifications never stop a deadline from becoming break due.

Quiet hours suppress reminders, not local timer progression.

Activation, wake, clock, timezone, and day changes share one reconciliation path.

Legacy preference payloads remain backward-compatible and fixture-tested.

DecisionsEngineering judgment

Small interface. Deliberate boundaries.

Dates over countdown ticks

Started-at and ends-at dates make the interface a projection of elapsed wall time, not a fragile chain of timer callbacks.

Hard constraints stay hard

Office-safe and mindfulness preferences are never relaxed. State, duration, and novelty soften only through an explicit fallback order.

Curated and local by design

A versioned JSON catalog keeps wellness copy inspectable, activity identities stable, and the complete version-one loop offline.

Accessibility is product behavior

Keyboard defaults, stable progress semantics, adaptive native layouts, and named accessibility actions are part of the workflow contract.

54

Deterministic checks before distribution claims.

The suite covers the state graph, persistence, catalog policy, quiet hours, permission reconciliation, and the release packet. It does not substitute for a signed-build lifecycle matrix or beta.

21

validated local activities

Every default-filter state and duration intersection is covered, with named human review for version 0.1.0 (1).

41

appearance and accessibility captures

Light, dark, large text, contrast, transparency, recovery, and Settings presentations are recorded as engineering evidence.

0

runtime network dependencies

No account, backend, analytics, advertising, remote content, or network entitlement is part of version one.

NativeSystem fit

Settings explain the tradeoffs.

Notification denial is shown as a state, not an error trap. Quiet hours, interval controls, activity preferences, and system integration stay native, inspectable, and reversible.

These are current deterministic fixture captures. Final public media must still come from the exact signed candidate.

Focusin dark-mode Reminder settings with notification, focus interval, break duration, and quiet-hours controls
The interface remains useful when reminders are disabled: the explanatory row makes the degraded behavior explicit.
EvidenceCase-study record

Locally verified

What the work proves.

Help desk workers move from a focus interval into a useful micro-break without adding a dashboard, an account, or another decision at the moment their attention is already depleted.

Role

  • Independent product direction, native macOS UX, SwiftUI implementation, state and persistence architecture, accessibility, testing, and release preparation

User

  • Mac-based desk workers who notice stiffness, fatigue, scattered attention, or anxiety and want a small, optional reset that stays close to their current task.

Key decisions

  • Persisted wall-clock deadlines instead of countdown ticks so focus and break state reconcile after sleep, relaunch, clock changes, and delayed timers.
  • Separated non-negotiable safety preferences from softer state, duration, and same-day novelty matching through a documented fallback order.
  • Bundled a versioned, human-reviewed activity catalog instead of introducing remote generation, accounts, or runtime networking.
  • Kept notification and login-item services outside the local state core so platform denial never blocks the focus-and-break loop.

Verification

  • 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 current appearance and accessibility captures cover light and dark modes, large text, increased contrast, reduced transparency, recovery states, and Settings.

Limitations

  • The implementation and unsigned Release integrity are locally verified; 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.
MoreEarlier / Archived case studies

Earlier work remains available for context and does not represent my current technical scope.