Back to portfolio

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.

FocusFlow Interface

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.