-
-
Every session is an espresso shot — dial in your real attention span and the cup tells you the truth. This one's a god shot.
-
Every shot ever pulled, kept forever. A god shot lights its own rim; a dumped one stains the shelf, same size as a good one.
-
How long can you actually concentrate? Not twenty-five minutes off a paperback — the dose you set for yourself.
-
The extraction renders live at 60fps from real session state, with a pressure trace you can watch as the shot runs.
-
Pick up your phone mid-shot and the puck cracks — the crema tears, permanently, for the rest of that session.
-
Four things can happen to a shot. The onboarding teaches all four before you ever pull your first one.
-
Nine bean origins to unlock, each with its own yield multiplier — free to earn, no purchase required.
-
The free tier already closes everything. The one purchase buys precision: name the four apps you can't be trusted with, leave the rest open.
-
Arm the shield and nothing but Pull opens while a shot runs — built on Apple's Family Controls, self-control not supervision.
-
The Machine: grinder and basket upgrades, earned in ground coffee, no purchase required for any of them.
-
Pull — Espresso Focus Timer
Inspiration
Every focus app lies to you the same way: it fills a bar while you cheat, and calls twenty-five minutes "a Pomodoro," as if the number came down from physics instead of a kitchen timer in the 1980s. It isn't your number. It was never anyone's number.
The lie compounds. Sit still for the whole session, or check Instagram nine times — the bar fills exactly the same either way. Cheating costs nothing, so everyone cheats, and the app never finds out.
Espresso already solved this. A shot has a length that depends on the bean, the grind, the day — and it does not negotiate. Pull it short and it is sour. Run it long and it is bitter. Touch the machine mid-pour and the crack shows in the crema, permanently, in the cup. Coffee has been grading attention honestly for a century. We just never asked it to grade ours.
What it does
You set a dose: the number of minutes you believe you can concentrate for. You pull. The shot renders live at sixty frames a second, driven by real session state — not a canned animation played over a countdown.
- Cut early and the shot is sour.
- Run far past your dose and the stream blondes to pale straw. Bitter.
- Pick up your phone and the puck channels: the stream splits, the crema tears, and the tear stays for the rest of the shot.
Every cup you have ever pulled is kept on a wall, at day, week, month and year — one continuous object at four zooms, in the colour it came out. A god shot lights its own rim. A dumped one lies on its side and stains the board, at the same size as a good one, permanently.
Across clean sessions the app measures how long you actually sustain attention and reads that number back, and it says so plainly when your history is too scattered to call one yet.
The glass you pull into is a collection. Eight of them, each a different silhouette, unlocked by doing specific things rather than bought — a ristretto glass that shows the shot in layers, a cupping bowl that is almost all crema, a steel travel tumbler you cannot see into at all. A vessel is not a skin: it changes what the shot shows you, because the shot is a readout and the glass is the instrument you read it through.
The shield closes your apps while a shot runs, using Apple's Family Controls framework. It lifts itself the moment the session ends, is cut, or is abandoned. It is free, and free it closes everything.
How we built it
Pull is native SwiftUI, nothing borrowed. The extraction you watch during a session isn't a video or a canned animation — it's a custom renderer painting live, frame by frame, from the real state of your session. If your attention changes, the picture changes with it, instantly.
Underneath the visuals sits a pure logic engine with no UI code at all, which is what let us write 151 tests around the economy of the app rather than its pixels: that faking focus while scrolling Instagram scores worse than an honest short session, that a long break away halves your streak instead of erasing it, that force-quitting mid-session still counts as time away, and that no two screens can ever disagree about your numbers.
The shield that closes distracting apps runs on Apple's own Family Controls framework, used the way Apple designed it — for individuals managing their own device, not for monitoring someone else's. You choose which apps get closed through Apple's own picker, so the app itself never actually learns what you picked.
RevenueCat is the only thing in the entire app that talks to the network. There's no analytics, no tracking, nothing phoning home — your session history lives in one file, on your device, and it never leaves.
Challenges we ran into
The real challenge wasn't the interface — it was making the scoring impossible to cheat. An app whose entire pitch is "honest feedback" is worthless if you can game it. Early on, you could check Instagram, come back, and cut the shot before the distraction ever got charged against you — the exact loophole the app exists to close.
The fix meant treating every time you leave as something the shot itself remembers, not something calculated only at the end. Force-quitting mid-session, letting the battery die, the app crashing — none of them read as an innocent exit. There's no path out that doesn't count. Once that held, we could finally trust the shot's own math, and that trust is the entire product.
Accomplishments that we're proud of
Nothing on the timer screen is decorative. The blonding stream is the over-extraction warning; the crema thickness is how clean the session was. The picture is the instrument, not an illustration of one.
And the paid tier blocks less, not more. The shield is free and free it closes every app on the phone. The one purchase buys precision: name the handful of apps you cannot be trusted with, and leave maps and music exactly where they are. Nothing that works today ever moves behind it.
What we learned
An honest signal changes behaviour and a filling bar does not. Once picking up your phone visibly tears the crema — and the tear is still there on the wall a month later — putting the phone down stops being discipline and starts being obvious.
Also: the App Store submission is a real engineering surface. Screenshot dimensions, entitlement re-signing, age-rating wording. Each one is a build-time check nobody wrote, and each one costs a review cycle when you get it wrong.
What's next for Pull
Break intervals, so it can honestly claim the pomodoro shape rather than only gesture at it. A continuous year skyline instead of twelve cards. And a dumped shot made the most visible object on the shelf rather than the least — right now the wall is kindest about exactly the sessions it should be harshest about.
Log in or sign up for Devpost to join the conversation.