Personal Project · 2025
FocusFlow - Minimalist Pomodoro Timer
Small Pomodoro PWA. Custom durations, light task list, works offline. Personal project.
FocusFlow - Minimalist Pomodoro Timer
The Challenge
I kept bouncing between tabs and losing focus. Most timers I tried were either cluttered or wanted an account. I wanted something that enforces Pomodoro without setup theater and still runs when the tab goes to the background.
The Solution
FocusFlow is a minimal PWA that stays out of the way. You can tweak focus, short break, and long break lengths. A simple task list keeps the current objective visible. Install it on desktop or phone and it behaves close enough to native for daily use.
Photo by Kelly Sikkema on Unsplash
Technical Architecture
Vue 3 with the composition API, Vite for builds, Tailwind for styling. Everything runs client-side. A service worker caches assets so the timer still loads offline.
PWA-first was the constraint: installable, reliable without network. Timing logic lives in a Web Worker so background tabs don't throttle the clock as aggressively on mobile. That's not perfect on every OS battery saver, but it's better than trusting setInterval on the main thread alone.
My Role & Contributions
I designed and built it solo. UI, timer state, task list, manifest, and service worker config. Lighthouse scores for performance, accessibility, and best practices came back strong, which was the bar I cared about for a utility app.
Challenges & Learnings
Background timer behavior still varies by browser and phone OS. The worker helped. Users who tried it liked that there's no signup and the UI stays quiet. I'll take that over feature sprawl.
Impact & Results
Shipped and usable on any device with a browser. It does one job. If you need a similar offline utility (timer, tracker, something else small), get in touch or browse more projects. I usually reply within a day or two; I'm in Thessaloniki so timezone may add a little delay.