Portfolio

Intention

Available on the Mac App Store. Designed and built by one person.

Challenge

Have you ever gotten to the end of a long work day and realized you’re no closer to your goals? I have.

Sure, I was doing a lot of stuff. But I wasn’t pausing to ask whether I was doing the right stuff. Or whether my approach was working. Or if I was spending the right amount of time on it. My fingers were moving but I wasn’t really thinking.

So I needed a reliable way to interrupt my “unproductive productivity” and actually think. The obvious solution was a timer. Unfortunately, if you use timers a lot, you learn to dismiss them reflexively. And it’s really easy to forget to set the next timer. A week later I’d realize: “Hey, that timer idea really worked, I should get back to that.” And then I didn’t.

I designed and built Intention, a macOS app that asks what I’ll focus on and gradually blurs the screen if I don’t set the next timer.

Intention

Process

I’m building Intention, not just designing it. With tools like Cursor and Claude Code, the person who decides what the product should be can implement it in the same session.

The traditional loop is: design something, spec it, hand it off, see it implemented, try it, realize a decision was wrong, spec the change, hand that off, repeat. Every step costs friction. Every translation between design and engineering loses information. When iteration is expensive, designs settle for whatever’s already half-built. When the same person designs and implements, iteration is cheap and the software gets better.

$ git log --oneline --reverse
  1. 7185e162025-04-16Initial Commit
  2. 6e4384e2025-04-19Rename folder to Docs for GH pages
  3. 67c3fe62025-04-30Released
  4. 60485f42025-10-31Small visual tweaks
  5. 354e4842025-11-02Multi-monitor support, prevent closing while no timer running, a little more room in the input
  6. a7867c72025-11-04Fixed crash when laptop closed
  7. 3fc64762025-11-04Vertical spacing
  8. 173a7ed2026-04-16Bug fixes and stuff
  9. 5fcdcd82026-04-18Fixing focus stealing
  10. 6f71e702026-04-24Hero animation
  11. c99a8512026-04-25mobile enhancements and tiny typography things
  12. c03fd042026-04-25Responsive refinements

In the past, I would have sketched some solutions, put together a clickable prototype, and user tested that. But how much does that user test actually test? A traditional prototype in Figma is paper-thin. I’m testing much less than the full experience.

Now I can sculpt functional software as I go. I build something, use it, notice what’s wrong, and fix it in the same session.

That said, sketches are still faster. I bounce between sketching and building.

Early sketches

A prototype tells you whether a flow makes sense. Using a working build for weeks tells you whether you have avoidable friction that becomes evident after the hundredth use, or whether a fade calibrated by feel is too aggressive in practice.

Decisions

Not a blocker. Intention doesn’t prevent you from opening anything. A site blocker is something I’d turn off the first time it inconvenienced me. A prompt asking what I’m doing is simply inviting me to be aware of what I’m doing.

You can’t dismiss it without starting a new timer. A simple dismiss would train people not to use it.

Six durations. 3, 5, 10, 15, 30, 60 minutes, bound to ⌘1 through ⌘6. You can choose depending upon whether you need a shorter leash or more room to run.

The duration is the timer start. Picking a duration starts the timer in the same motion. No Begin button, no confirm step. The first version had a separate Begin button; removing it cut a step from every session.

The original Intention card next to the current one: the prompt changed from "What is your intention?" to "What will you focus on?", the Begin button disappeared, and the durations became a 2×3 grid bound to ⌘1–⌘6

Hands stay on the keyboard. ⌘1 through ⌘6 picks a duration and starts the timer. The text field is focused the moment the window appears. I noticed early that 3-minute timers turned hostile fast if I had to reach for the trackpad every cycle — the friction of switching modalities outweighed the value of the prompt. Full keyboard coverage took some work, but it was the difference between using the app and abandoning it.

The intention stays in the menu bar. Most timers show how much time is left. This one shows what you said you’d do, next to the countdown. The prompt is “What will you focus on?”, so the answer is a verb phrase like “Finish the draft” or “Reply to Mom” that reads as an action in the menu bar. Every glance up is a chance to notice drift.

A gradual blur overlay. I tried a black overlay. I tried a system modal the user couldn’t get past. Neither works. The user needs an opportunity to finish their thought. An immediate, hard barrier would just frustrate them and cause them to uninstall. The blur builds slowly. The user keeps working as it comes in, but also notices. The black overlay had the opposite problem: the screen got dimmer so smoothly that the user might not notice until it was almost black. Sixty seconds of escalation was too fast in practice; ninety seconds gives the user time to finish a thought before the blur becomes hard to see through.

The original black overlay (top) versus the current frosted blur (bottom): the old version dimmed the screen toward black, while the new one makes content harder to see without making it darker

The dock paradox. You might expect intention to be menu bar only. The app never grabs keyboard focus, but you still need a fast way to switch to it when you’re ready to answer. Intention appears in the dock so Cmd+Tab works.

Craft

The UI conforms to the macOS look and feel, without calling undue attention to itself. The visual inspiration for the brand, however, is the early 1600s Caravaggio painting Saint Jerome Writing. In it the aging scholar Jerome, remembering the nearness of death, absorbs himself completely in the most noble work he can find to do while ignoring everything else. This is our task.

Saint Jerome Writing by Caravaggio

It’s far more practical to draw usable imagery than to generate it. The dock icon is drawn by hand in Figma with the pen tool and layer effects. The candle in the dark serves as both a metaphor for the app’s purpose illuminating the way forward, and an allusion to meditative practice.

The Intention app icon: a candle with a warm flame on a dark background

The same visual language carries through to the landing page, in Merriweather with warm gradients pulled off the painting. Three feature panels carry the product’s three claims, each in its own slice of the palette: a deep brown for the blur mechanic, a dark red for the timer grid, a cream for goals checked off. I make heavy use of animation to convey the product’s behavior and value.

The full Intention landing page, top to bottom: hero animation, the three feature panels in brown, red, and cream, and the footer

Living with it

This small intervention has worked beautifully. Not only am I catching unproductive divergences earlier, I’m noticing fewer of them over time. It seems to be training me to do more and better thinking.

If I’m making great progress on something that doesn’t require much thinking, I can set the timer for a longer duration, maybe 30 minutes. But if I’m working on something more open-ended, I might tighten the leash all the way down to 3 minutes. Then I can’t get off track.

I can’t fail to set the next one. If I don’t answer it promptly, the screen gradually becomes less readable until I do. If I wanted to avoid answering, I’d have to make a conscious decision to close the app. I’d have to decide to be less productive. I never do.