Classic Pomodoro has a hidden assumption: once the work timer starts, you should stay focused until it ends.
That sounds great in theory. In practice, it kept failing for me.
Sometimes I would get distracted in the middle of a focus session. Sometimes other people would interrupt me. The timer kept running anyway, and when those 25 minutes were over, I had no honest idea how much I had actually worked and how much of that time had been noise.
At that point, the timer stopped being helpful. It became performative.
So I built Ketchup — a compact desktop timer that keeps the Pomodoro spirit, but changes one rule that made all the difference for me.
Instead of forcing “work first, break later” as one rigid timeline, Ketchup treats work and break as two independent budgets inside the same cycle.
If your cycle is 25 + 5, then you still owe the cycle 25 minutes of work and 5 minutes of rest — but you can switch between them whenever real life demands it.
Got interrupted 8 minutes into work? Switch to break.
Ready again after 2 minutes? Switch back to work.
Need another short pause later? Go for it.
The cycle only ends when both budgets reach zero.
That means the timer no longer pretends you worked for 25 uninterrupted minutes when you didn’t. It reflects what actually happened.
In a way, it feels closer to a chess clock than to a classic Pomodoro timer.
Why this model works better for me
The main problem I had with traditional Pomodoro wasn’t discipline. It was that the model assumed a level of uninterrupted focus that my real workdays rarely have.
A good productivity tool should survive interruptions, not break because of them.
This dual-budget approach helped me in a few ways:
- I no longer “lose” work time to random interruptions.
- Breaks are still deliberate, not accidental.
- A cycle stays honest: work is work, rest is rest.
- I can adapt in the moment without throwing away the structure entirely.
It feels less like failing a timer and more like using one.
What I built
Ketchup is a small cross-platform desktop app built with Tauri v2 + React.
A few things I wanted from it:
- Free phase switching — move between Work and Break at any moment
- Dual progress rings — both budgets stay visible, so the whole cycle is always readable at a glance
- Preset and custom configurations — easy to change timing setups
- Sound transitions using the Web Audio API
- A compact desktop UI with a frameless window and smooth animations
- Local-first behavior — no accounts, no cloud, no ceremony
I also intentionally kept the architecture simple: the timer state machine and UI logic live in the React frontend, while Rust is mostly there to host the Tauri side of the app.
Why Tauri
This project felt like a perfect fit for Tauri.
I wanted a desktop app that was:
- lightweight
- cross-platform
- easy to ship
- pleasant to build UI for
React gave me a fast way to iterate on the interaction model, and Tauri made it possible to package that into a native-feeling desktop app without dragging in the overhead of a heavier runtime.
For a tiny utility app, that combination feels really good.
The more interesting part wasn’t the code
Honestly, the most valuable part of building this project was not the implementation.
It was realizing that many productivity tools fail not because they are badly designed, but because they encode the wrong assumptions about attention.
The classic Pomodoro method assumes a clean separation:
- focus
- break
- repeat
But real work is messy. Attention is messy. Interruptions are normal.
So instead of trying to force myself to behave like a perfect timer user, I changed the timer to better match reality.
That turned out to be much more useful.
What’s next
I’ve already published the first release, and I’m still polishing the project.
Things I’m especially interested in now:
- feedback on the interaction model
- UI/UX improvements
- ideas for small but meaningful features
- edge cases in timer behavior across platforms
If you’ve ever felt that Pomodoro is helpful in theory but too rigid in practice, I’d love to hear how you handle that.
GitHub repo: https://github.com/Rench321/ketchup-timer
Downloads: available in the Releases section
Top comments (0)